IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Philippe Tulliez

VBA Excel - Fonction générique - Trier un objet ListObject (Tableau structuré)

Noter ce billet
par , 30/04/2022 à 13h17 (2766 Affichages)
Nom : SortTable.png
Affichages : 1911
Taille : 88,3 Ko

Introduction
J'avais publié il y a quelques années le code d'une fonction générique permettant de trier un objet Range voir mon billet à ce sujet Excel VBA Trier – Procédure pour version 2003-2010 (Version 5.1) malgré son titre, elle fonctionne toujours aujourd'hui (version 365). Cependant elle ne fonctionne pas avec l'objet ListObject

Je publie donc aujourd'hui, une fonction triant un ListObject (Tableau structuré). Elle offre moins de possibilités mais une nouvelle version avec plus d'arguments comme tri des couleurs est en cours de développement.

La fonction a deux arguments l'objet ListObject à trier ainsi que la liste des colonnes à trier soit croissant soit décroissant. Cette liste est une chaîne de caractères séparées par ";" contenant soit le nom de l'étiquette de colonne soit le n° de la colonne (voir l'exemple en bas de cet article)

Code de la fonction
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
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
Function SortTable(oList As ListObject, Optional LabelList As String)
  ' Fonction de tri pour ListObject
  ' Tri Ascendant/Descendant de colonne(s) d'un tableau structuré
  ' Author  : Philippe Tulliez (www.magicoffice.be)
  ' Arguments
  '   oList       (ListObject)  Objet table
  '   [LabelList] (String)     (Nom des étiquettes de colonne ou numéro des colonnes à trier séparé par ; (Exemple Voiture;Logement;3)
  '                              Si l'étiquette est précédée par un signe négatif, le tri est descendant
  '                                 Exemple ("Service;-Logement;-Voiture")
  '                                 signifie que la colonne "Service" sera triée par ordre croissant et les deux autres par ordre décroisant
  '                              Si LabelList est vide, le tri se fait sur la première colonne de la table
  ' 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
  Dim Value As Variant
  ' 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
   For El = LBound(Sl) To UBound(Sl)
    So = 1 + Abs(Left(Sl(El), 1) = "-")
    Value = Mid(Sl(El), So): If IsNumeric(Value) Then Value = Val(Value)
    Set Sc = .ListColumns(Value).DataBodyRange
   .Sort.SortFields.Add Key:=Sc, SortOn:=xlSortOnValues, Order:=So
   Next
   .Sort.Apply
  End With
  Set Sc = Nothing
End Function
Exemple d'une procédure qui l'invoque
La procédure ci-dessous triée les colonnes "Sexe" et "Points" du tableau structuré nommé t_People. La première est triée par ordre croissant et la seconde par ordre décroissant.
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Sub SortTableExemple()
  SortTable Range("t_People").ListObject, "Sexe;-Points"
End Sub

Envoyer le billet « VBA Excel - Fonction générique - Trier un objet ListObject (Tableau structuré) » dans le blog Viadeo Envoyer le billet « VBA Excel - Fonction générique - Trier un objet ListObject (Tableau structuré) » dans le blog Twitter Envoyer le billet « VBA Excel - Fonction générique - Trier un objet ListObject (Tableau structuré) » dans le blog Google Envoyer le billet « VBA Excel - Fonction générique - Trier un objet ListObject (Tableau structuré) » dans le blog Facebook Envoyer le billet « VBA Excel - Fonction générique - Trier un objet ListObject (Tableau structuré) » dans le blog Digg Envoyer le billet « VBA Excel - Fonction générique - Trier un objet ListObject (Tableau structuré) » dans le blog Delicious Envoyer le billet « VBA Excel - Fonction générique - Trier un objet ListObject (Tableau structuré) » dans le blog MySpace Envoyer le billet « VBA Excel - Fonction générique - Trier un objet ListObject (Tableau structuré) » dans le blog Yahoo

Mis à jour 16/05/2022 à 07h01 par Philippe Tulliez

Catégories
VBA Excel

Commentaires