Trier un tableau avec un nombre variable de colonnes

Bonjour

En utilisant du code vba, je voudrais automatiser le tri croissant d'un tableau dont je ne connais pas le nombre de colonne au départ.

Par exemple, pour un tableau de 3 colonnes, il faudrait commencer par passer le code ci-dessous pour lui dire qu'on veut d'abord un tri croissant par la colonne A, puis un tri croissant par la colonne B, puis un tri croissant par la colonne C

Mais comment faire quand on ne connait pas le nombre de colonnes au départ ?

ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add2 Key:=Range("A2:A130" _
    ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add2 Key:=Range("B2:B130" _
    ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add2 Key:=Range("C2:C130" _
    ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

Un grand merci d'avance

bonjour Alexandre Gory,

souvent c'est plus facile d'utiliser un tableau structuré parce que comme ça, on sait directement le nombre de lignes et colonnes.

Vous avez un fichier anonymisé ?

Bonjour et bienvenue,

Quelque chose comme ceci peut etre ?

Public Sub ExempleTri()
  ' feuille de travail
  Dim feuil As Worksheet
  Set feuil = ThisWorkbook.Worksheets(1)

  ' plage a trier
  Dim plageATrier As Range
  With feuil.Range("A1")
    Set plageATrier = Range(.Cells, .End(xlToRight).End(xlDown))
  End With

  ' nettoyage sort precedent
  feuil.Sort.SortFields.Clear

  ' tris successifs
  Dim colI As Long
  With feuil.Sort
    For colI = 1 To plageATrier.Columns.Count
      .SortFields.Add2 Key:=plageATrier.Columns(colI), Order:=xlAscending, DataOption:=xlSortNormal
    Next colI
    ' application
    .SetRange plageATrier
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
End Sub

Array de test a copier en A1 :

ABCDEF
1873309
389055
10203410
1208892
181920249
25187517
201142312
1213141154
1720516165
127841810
15961734
1661519194
14410111711
146215153
14813141719
101378313
415641812
1717185216
1611619313
1340141618

Bonjour Bart

Merci pour votre réponse

Effectivement, ça serait plus facile d'avoir un tableau structuré. Malheureusement, je ne connais le nombre de colonne qu'au moment de rouler la macro.

Donc avec un InputBox, je peux saisir le nombre de colonnes dans le tableau mais j'aimerais pouvoir automatiser la gestion du tri sans avoir à entrer dans le code à chaque fois.

Bonjour saboh12617

Merci pour votre réponse. C'est exactement ça. C'est le code ci-dessous que je cherchais à créer

Un immense merci !

    For colI = 1 To plageATrier.Columns.Count
      .SortFields.Add2 Key:=plageATrier.Columns(colI), Order:=xlAscending, DataOption:=xlSortNormal
    Next colI

Je vous en prie, content d'aider.

Bonne fin de journée

re,

avec un tableau, il faut juste savoir le nom , la feuille , sa place dans la feuille, le nombre de lignes ou colonnes, aucune importance ....

Sub Trier()
     With Range("Tableau1").ListObject.Range
          .Sort .Range("A1"), xlAscending, , .Range("B1"), xlAscending, .Range("C1"), xlAscending, Header:=xlYes
     End With
End Sub
Rechercher des sujets similaires à "trier tableau nombre variable colonnes"