Astuce VBA : trier un tableau
Voici une solution prête à l'emploi pour trier un tableau (Array) en VBA sans toucher aux cellules.
Cette solution est prévue pour un tableau à 1 dimension et un tri croissant (ordre alphabétique).
Une seconde solution pour trier un tableau à 1 dimension par ordre décroissant (ordre alphabétique inverse) est disponible un peu plus bas.
Tri croissant
Copiez tout d'abord cette procédure dans un module :
'Tri croissant (ordre alphabétique) d'un tableau à 1 dimension
'Source : https://www.excel-pratique.com/fr/astuces_vba/trier-tableau-array
Sub triCroissant(tableau)
nb = UBound(tableau)
tabTemp = tableau
Erase tableau
For i = 0 To nb
pos = 0
For l = 0 To nb
If LCase(tabTemp(i)) > LCase(tabTemp(l)) And i <> l Then
pos = pos + 1
End If
Next
For j = 1 To 1
If tableau(pos) = "" Then
tableau(pos) = tabTemp(i)
Else
pos = pos + 1
j = j - 1
End If
Next
Next
End Sub
Ajoutez ensuite simplement la ligne triCroissant tableau
pour trier votre tableau :
Sub exemple()
Dim tableau(29)
'Pour exemple : copie de A1 à A30 dans un tableau
For i = 1 To 30
tableau(i - 1) = Range("A" & i)
Next
'Tri du tableau
triCroissant tableau
'Pour exemple : copie du tableau trié dans la colonne B
For i = 1 To 30
Range("B" & i) = tableau(i - 1)
Next
End Sub
Tri décroissant
Copiez cette procédure dans un module :
'Tri décroissant (ordre alphabétique) d'un tableau à 1 dimension
'Source : https://www.excel-pratique.com/fr/astuces_vba/trier-tableau-array
Sub triDecroissant(tableau)
nb = UBound(tableau)
tabTemp = tableau
Erase tableau
For i = 0 To nb
pos = 0
For l = 0 To nb
If LCase(tabTemp(i)) > LCase(tabTemp(l)) And i <> l Then
pos = pos + 1
End If
Next
For j = 1 To 1
If tableau(nb - pos) = "" Then
tableau(nb - pos) = tabTemp(i)
Else
pos = pos + 1
j = j - 1
End If
Next
Next
End Sub
Puis ajoutez la ligne triDecroissant tableau
dans votre code pour trier le tableau :
Sub exemple()
Dim tableau(29)
'Pour exemple : copie de A1 à A30 dans un tableau
For i = 1 To 30
tableau(i - 1) = Range("A" & i)
Next
'Tri du tableau
triDecroissant tableau
'Pour exemple : copie du tableau trié dans la colonne B
For i = 1 To 30
Range("B" & i) = tableau(i - 1)
Next
End Sub
Astuce
Si vous avez installé l'add-in gratuit disponible sur Excel-Pratique, vous pouvez simplement utiliser arraySortAsc pour trier votre tableau :
Sub triCroissant()
tableau = Array("Test", 36, "Q", "ABCD", 8, 211, "XLP", 45)
arraySortAsc tableau 'Tri croissant du tableau
End Sub
Utilisez arraySortAsc pour effectuer un tri croissant et arraySortDesc pour un tri décroissant.