Double tri sur tableaux Excel actif
Bonjour,
Je suis un quasi débutant en macros. En lançant une macro automatique, je suis parvenu à automatiser ce que je voulais, c'est à dire à trier mon tableau Excel TABLO (Insérer / Tableau) selon deux critères, celui de la colonne A, puis celui de la colonne B. Sauf que j'ai dans mon classeur plein de tableaux sur différents onglets (et pas seulement sur SGPERSO). Je souhaite obtenir une macro unique qui s'appliquerait sur mon tableau actif et pas seulement sur celui (TABLO)qui est paramétré dans ma macro. En gros, je souhaite qu'elle fonctionne pour le tableau sur lequel mon curseur est positionné. Pouvez-vous m'aider svp ? Voici le code actuel. Merci par avance.
Sub DoubleTri()
ActiveWorkbook.Worksheets("SGPERSO").ListObjects("TABLO").Sort.SortFields. _
Clear
ActiveWorkbook.Worksheets("SG PERSO").ListObjects("TABLO").Sort.SortFields. _
Add2 Key:=Range("TABLO[Date]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SGPERSO").ListObjects("TABLO").Sort.SortFields. _
Add2 Key:=Range("TABLO[Mode de règlement]"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("SGPERSO").ListObjects("TABLO").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A4").Select
Selection.End(xlDown).Select
End SubBonsoir Marco et bienvenu, bonsoir le forum,
Ton code modifié ci-dessous permet d'agir sur le tableau qui contient la cellule active. Il te suffit de sélectionner n'importe quelle cellule du tableau avant de lancer la macro mais si le tableau ne contient ni l'en-tête Date ni Mode de règlement ça va planter...
Sub DoubleTri()
Dim NT As String
Dim TS As ListObject
NT = ActiveCell.ListObject.Name
Set TS = ActiveSheet.ListObjects(NT)
TS.Sort.SortFields.Clear
TS.Sort.SortFields.Add2 Key:=Range(NT & "[Date]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
TS.Sort.SortFields.Add2 Key:=Range(NT & "[Mode de règlement]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With TS.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub[Édition]
Si le double tri se fait toujours sur les colonnes A et B tu peux aussi le coder comme ça sans avoir les mêmes en-têtes :
Sub DoubleTri()
Dim NT As String
Dim TS As ListObject
NT = ActiveCell.ListObject.Name
Set TS = ActiveSheet.ListObjects(NT)
TS.Sort.SortFields.Clear
TS.Sort.SortFields.Add2 Key:=TS.HeaderRowRange(1, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
TS.Sort.SortFields.Add2 Key:=TS.HeaderRowRange(1, 2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With TS.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End SubBonjour, super merci, ca marche impeccable. Et tu m'as même donné une solution pour d'autres tableaux avec entêtes différents.
Je n'hésiterai pas à revenir sur ce forum faire appel à vos lumières dans l'avenir.
Après m'être creusé la tête quand même :-)
Bonne journée.