Tri automatique d'une zone excel dès que l'on change une valeure.

Contenu du snippet

Bonjour,
ce code permet d'effectuer un tri automatique dès que l'on modifie une valeur de la colone à trier.

Il suffit de mettre ce code dans la feuille et de renseigner les trois valeurs.
Cellule du début de la colone de tri.
Nombre de colones à prendre après la colone à trier.
Nombre de colones à prendre avant la colone à trier.

Je m'en suis servi pour garder les 25 meilleurs années pour le calcule de la retraite.

Source / Exemple :


Private Sub Worksheet_Change(ByVal Target As Range)
 Dim i As Integer 'indice de parcours de toutes les valeurs du trie
 Dim temp As String '
 Dim cell As Variant
 Dim lettreCellule As String
 Dim lettreColone As String
Dim nbColonesApres As Integer
Dim nbColonesAvant As Integer
Dim derCellule As String
Dim premCellule As String
  '''''''''''''''''''''''''''''''''''''à modifier'''''''''''''''''''''''
  '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  'cellule du début du trie
  cell = "D2"
  'nombre de colone apres la cellule pour le tri
  nbColonesApres = 3
   'nombre de colone avant la cellule pour le tri
  nbColonesAvant = 3
'''''''''''''''''''''''''''''''fin modification'''''''''''''''''''''''''''''''

 'colone où l'on effectue le trie
lettreColone = Mid(cell, 1, 1)
 
 'adresse de la cellule modifiée
 temp = ActiveCell.Address

'on récupere la lettre de la cellule modifiée
 lettreCellule = Mid(temp, 2, 1)
 
 'on regarde si l'on a modifié une valeur
 'de notre colone où on veut effectuer le tri.
 If lettreCellule = lettreColone Then
 
    'on compte le nombre de cellules jusqu'à ce que l'on en trouve une vide
    Range(cell).Select
    i = 0
    While ActiveCell.Offset(i, 0).Text <> ""
        i = i + 1
    Wend
 
 'on selection toute la zone
 premCellule = Range(cell).Offset(0, -nbColonesAvant).Address
 derCellule = Range(cell).Offset(i - 1, nbColonesApres).Address
 Range(premCellule & ":" & derCellule).Select
    
    
    'on trie notre séléction
   Selection.Sort Key1:=Range(cell), Order1:=xlAscending, Header:=xlNo, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

   
End If
End Sub

Conclusion :


Attention il faut qu'il y ait une cellule vide sous la dernière valeur de la colone à trier.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.