TrierPlageDonnees

Retour vers Excel

Trier une plage de données

On peut facilement trier une ligne ou une colonne, en la sélectionnant et en utilisant les deux boutons spécialisés dans la barre d'outils
On peut aussi exécuter le code VBA correspondant

Sub TrierUneLigne()
    Range("A1:A3").Select
    Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight
End Sub

Sub TrierUneColonne()
    Range("A1:A3").Select
    Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub

Assez curieusement, on ne retrouve pas d'outil pour trier une plage de données. La difficulté réside dans le fait de comparer la dernière cellule d'une ligne avec la première case de la ligne suivante et aussi de déterminer le nombre de boucles qu'il est nécessaire d'exécuter pour obtenir le bon résultat... Alors, je vous propose une petite astuce, créons une feuille temporaire sur laquelle nous recopions les données dans une seule colonne, trions celle-ci et rapatrions les données triées sur l'emplacement de la plage de données. Nous placerons le curseur sur le coin supérieur gauche de cette plage

Sub TrierUnePlage()
Dim plage As Range, i As Integer, NomFeuil As String, NomCel As String
'parce si la page Temp a déjà été effacée, ça bugge
On Error Resume Next
'parce que je ne veux pas avoir un message d'avertissement
'quand j'efface Temp
Application.DisplayAlerts = False
'besoin d'une variable pour définir la case dans Temp
i = 1
'récupération de l'environnement de travail
NomFeuil = ActiveSheet.Name
NomCel = Selection.Address
'j'efface la feuille Temp si elle existe
Sheets("Temp").Delete
'je définis le tableau à trier
Set tbl = Sheets(NomFeuil).Range(NomCel).CurrentRegion
'j'ajoute une feuille
Sheets.Add
'je la renomme
ActiveSheet.Name = "Temp"
'je boucle sur le tableau
For Each c In tbl
'j'incris les données dans la feuille Temp
Sheets("Temp").Cells(i, 1) = c
'incrémentation de la variable pour descendre d'une case
i = i + 1
Next
'je retourne sur la feuil Temp
Sheets("Temp").Range("A1").Select
'je trie la colonne
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'je replace mon compteur à 1
i = 1
'je déplace le focus
Sheets(NomFeuil).Select
'je reboucle sur mon tableau
For Each c In Range(tbl.Address)
'je remplis maintenant les cellules du tableau originel
'avec les valeurs de la colonne de la feuil Temp
c.Value = Sheets("Temp").Cells(i, 1)
'incrémentation de la variable pour descendre d'une case
i = i + 1
Next
'j'efface la feuille Temp
Sheets("Temp").Delete
'je remets les alertes dans l'état normal
Application.DisplayAlerts = True
End Sub

Télécharger le fichier exemple Tri

FIN