VBA EXCEL : tri de données sur colonnes multiples.

dirkv

XLDnaute Nouveau
Bonjour à tous!

Je débute (c'est vraiment le cas de le dire) en VBA. Je suis à la recherche d'une solution me permettant de trier une plage de données sur 63 colonnes.

Ma plage est un tableau type échéancier de congés. Et je voudrais trier les colonnes en fonction du fait qu'elles soient vides ou non... (J’ai joint un exemple).

En faisant quelques recherches j'avais trouvé un code du type :
Code:
Range("a2:g9").Sort Range("b1"), xlAscending, Range("c1"), , xlAscending, Range("d1"), , xlAscending
Pour trier sur une plage réduite...

J'ai donc bêtement pensé que je pouvais faire un truc du genre :
Code:
Range("e7:bo57").Sort Range("e6"), xlAscending, Range("f6"), , xlAscending, Range("g6"), , xlAscending, Range("h6"), , xlAscending, Range("i6"), , xlAscending, Range("j6"), , xlAscending, Range("k6"), , xlAscending, Range("l6"), , xlAscending, Range("m6"), , xlAscending, Range("n6"), , xlAscending, Range("o6"), , xlAscending, Range("p6"), , xlAscending, Range("q6"), , xlAscending, Range("r6"), , xlAscending, Range("s6"), , xlAscending, Range("t6"), , xlAscending, Range("u6"), , xlAscending, Range("v6"), , xlAscending, Range("w6"), , xlAscending, Range("x6"), , xlAscending, Range("y6"), , xlAscending, Range("z6"), , xlAscending, Range("aa6"), , xlAscending, Range("ab6"), , xlAscending, Range("ac6"), , xlAscending, Range("ad6"), , xlAscending, Range("ae6"), , xlAscending, Range("af6"), , xlAscending, Range("ag6"), , xlAscending, Range("ah6"), , xlAscending, Range("ai6"), , xlAscending, Range("aj6"), , xlAscending, Range("ak6"), , xlAscending, Range("al6"), , xlAscending, Range("am6"), , xlAscending, Range ("an6"), , xlAscending, Range("ao6"), , xlAscending, Range("ap6"), , xlAscending, Range("aq6"), , xlAscending, Range("ar6"), , xlAscending, Range("as6"), , xlAscending, Range("at6"), , xlAscending, Range("au6"), , xlAscending, Range("av6"), , xlAscending, Range("aw6"), , xlAscending, Range("ax6"), , xlAscending, Range("ay6"), , xlAscending, Range("az6"), , xlAscending, Range("ba6"), , xlAscending, Range("bb6"), , xlAscending, Range("bc6"), , xlAscending, Range("bd6"), , xlAscending, Range("be6"), , xlAscending, Range("bf6"), , xlAscending, Range("bg6"), , xlAscending, Range("bh6"), , xlAscending, Range("bi6"), , xlAscending, Range("bj6"), , xlAscending, Range("bk6"), , xlAscending, Range("bl6"), , xlAscending, Range("bm6"), , xlAscending, Range("bn6"), , xlAscending, Range("bo6"), , xlAscending

Donc forcément erreur de syntaxe/erreur de compilation...

Suis-je dans la bonne voie? Y'a-t-il plus simple?

Merci d'avance pour vos retours.
 

Pièces jointes

  • fonction trier.xlsx
    11.6 KB · Affichages: 53

PMO2

XLDnaute Accro
Re : VBA EXCEL : tri de données sur colonnes multiples.

Bonjour,

Dans la mesure où j'ai bien compris, une piste avec le code suivant
Code:
Sub aa()
Dim S As Worksheet
Dim R As Range
Dim R2 As Range
Dim j&
'---
'--- La plage à trier ---
Set S = Sheets("test")    'à adapter
Set R = S.[a1].CurrentRegion
'--- Efface les niveaux de tri préexistants ---
S.Sort.SortFields.Clear
'--- Les niveaux de tri ---
Set R2 = Range(S.Cells(2, 2), S.Cells(R.Rows.Count, 2))
For j& = 2 To R.Columns.Count
  S.Sort.SortFields.Add Key:=R2, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  Set R2 = R2.Offset(0, 1)
Next j&
'--- Effectue le tri ---
With S.Sort
  .SetRange R
  .Header = xlYes
  .MatchCase = False
  .Orientation = xlTopToBottom
  .SortMethod = xlPinYin
  .Apply
End With
'--- Efface les niveaux de tri ---
S.Sort.SortFields.Clear
End Sub
 

Pièces jointes

  • Créer des niveaux de tri pour des données sur colonnes multiples.xlsm
    20.1 KB · Affichages: 44

dirkv

XLDnaute Nouveau
Re : VBA EXCEL : tri de données sur colonnes multiples.

Rebonjour,

J'ai tenté l'utilisation de l'assistant VBA et du coup j'ai ma solution!

Je la poste quand même :
Code:
ActiveWindow.SmallScroll Down:=-21
    Range("A8:BO9").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range("A7:BO8").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("E8:E57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("F8:F57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("G8:G57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("H8:H57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("I8:I57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("J8:J57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("K8:K57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("L8:L57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("M8:M57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("N8:N57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("O8:O57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("P8:P57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Q8:Q57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("R8:R57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("S8:S57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("T8:T57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("U8:U57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("V8:V57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("W8:W57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("X8:X57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Y8:Y57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Z8:Z57"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AA8:AA57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AB8:AB57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AC8:AC57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AD8:AD57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AE8:AE57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AF8:AF57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AG8:AG57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AH8:AH57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AI8:AI57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AJ8:AJ57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AK8:AK57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AL8:AL57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AM8:AM57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("AN8:AN57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Ao8:Ao57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Ap8:Ap57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Aq8:Aq57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Ar8:Ar57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("As8:As57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("At8:At57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Au8:Au57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Ax8:Ax57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Ay8:ay57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("Az8:Az57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("BA8:ba57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bb8:bb57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bc8:bc57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bd8:bd57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("be8:be57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bf8:bf57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bg8:bg57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bh8:bh57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bi8:bi57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bj8:bj57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bk8:bk57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bl8:bl57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bm8:bm57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bN8:bN57") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Avril - Mai").Sort.SortFields.Add Key:=Range("bo8:bo57") _

    With ActiveWorkbook.Worksheets("Avril - Mai").Sort
        .SetRange Range("A7:BO57")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply

   End With

   End Sub

Voila voila!
 

dirkv

XLDnaute Nouveau
Re : VBA EXCEL : tri de données sur colonnes multiples.

Bonjour,

Dans la mesure où j'ai bien compris, une piste avec le code suivant
Code:
Sub aa()
Dim S As Worksheet
Dim R As Range
Dim R2 As Range
Dim j&
'---
'--- La plage à trier ---
Set S = Sheets("test")    'à adapter
Set R = S.[a1].CurrentRegion
'--- Efface les niveaux de tri préexistants ---
S.Sort.SortFields.Clear
'--- Les niveaux de tri ---
Set R2 = Range(S.Cells(2, 2), S.Cells(R.Rows.Count, 2))
For j& = 2 To R.Columns.Count
  S.Sort.SortFields.Add Key:=R2, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  Set R2 = R2.Offset(0, 1)
Next j&
'--- Effectue le tri ---
With S.Sort
  .SetRange R
  .Header = xlYes
  .MatchCase = False
  .Orientation = xlTopToBottom
  .SortMethod = xlPinYin
  .Apply
End With
'--- Efface les niveaux de tri ---
S.Sort.SortFields.Clear
End Sub

Bonjour PMO2,

Je n'avais pas vu ta réponse... je vais l'essayer dès que possible!

Merci en tout cas
 

Discussions similaires

Statistiques des forums

Discussions
312 024
Messages
2 084 722
Membres
102 638
dernier inscrit
TOTO33000