1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| Function SortTable(oList As ListObject, _
Optional LabelList As String, _
Optional CustomList As String, _
Optional CaseSensitive As Boolean)
' Fonction de tri pour ListObject
' Trie Ascendant/Descendant de colonne(s) d'un tableau structuré
' Author : Philippe Tulliez (www.magicoffice.be)
' Date : 05/07/2021
' Version : 3.1
' Arguments
' oList (ListObject)
' [LabelList] (String) (Nom des étiquettes de colonne à trier séparé par ; (Exemple Voiture;Logement)
' Si l'étiquette est précédée par un signe négatif, le tri est descendat
' Exemple ("Service;-Logement;-Voiture")
' signifie que la colonne "Service" sera triée par ordre croissant, les deux autres par ordre décroisant
' [CustomList] String
' [CaseSensitive] Boolean
' Déclaration & Affectation
Dim Sc As Range ' Colonne à trier
Dim So As Byte ' Ordre de tri
Dim Sl As Variant ' Liste des champs à trier
Dim El As Integer ' Variable de boucle
' Liste des champs à trier suivant argument [LabelList] (Si vide l'Array prend l'étiquette de la première colonne)
Sl = IIf(Len(LabelList), Split(LabelList, ";"), Array(oList.ListColumns(1).Name))
'
With oList
.Sort.SortFields.Clear
' Insert level sort
For El = LBound(Sl) To UBound(Sl)
So = 1 + Abs(Left(Sl(El), 1) = "-"): Set Sc = .ListColumns(Mid(Sl(El), So)).DataBodyRange
.Sort.SortFields.Add Key:=Sc, SortOn:=xlSortOnValues, Order:=So
Next
' Sort
With .Sort: .MatchCase = CaseSensitive: .Apply: End With
End With
Set Sc = Nothing
End Function |