Tri croissant et décroissant en VBA

23test-tri.xlsm (24.75 Ko)

Bonjour à vous,
Je sollicite de nouveau votre aide, je dois faire des tri croissant et décroissant sur plusieurs feuilles.
Cela dans les mêmes colonnes.

Si je mets la macro dans chaque module tout fonctionne bien mais lorsque je crée un Call macro.

le tri ne s'opère pas sur toute les feuilles, juste sur la première feuille

Merci

Bonjour,

dans ton code, tu demandes explicitement de trier la feuille Données1, c'est donc normal qu'il n'y ait que cette feuille qui soit triée.

                ActiveWorkbook.Worksheets("Données1").Sort.SortFields.Clear
                ActiveWorkbook.Worksheets("Données1").Sort.SortFields.Add2 Key:=Range("C2"), _
                SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
                With ActiveWorkbook.Worksheets("Données1").Sort
                .SetRange Range("A3:E1000")
                .Apply
                End With

                ActiveWorkbook.Worksheets("Données1").Sort.SortFields.Clear
                ActiveWorkbook.Worksheets("Données1").Sort.SortFields.Add2 Key:=Range("I2"), _
                SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
                With ActiveWorkbook.Worksheets("Données1").Sort
                .SetRange Range("G3:K1001")
                .Apply
                End With

pour trier toutes les feuilles

Sub appel()

    For Each ws In ActiveWorkbook.Sheets

        ws.Sort.SortFields.Clear
        ws.Sort.SortFields.Add2 Key:=ws.Range("C2"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        With ws.Sort
            .SetRange ws.Range("A3:E1000")
            .Apply
        End With

        ws.Sort.SortFields.Clear
        ws.Sort.SortFields.Add2 Key:=ws.Range("I2"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        With ws.Sort
            .SetRange ws.Range("G3:K1001")
            .Apply
        End With
    Next
End Sub

Bonjour, Salut h2so4,
Remplace les codes et teste

Sub defaut()
    For Each sh In Worksheets
        If sh.Name Like "Données*" Then
            sh.Activate
            Call appel
        End If
    Next
End Sub
Sub appel()
    Range("A3:E1000").Sort Key1:=[C2], Order1:=xlDescending, Header:=xlGuess, Orientation:=xlTopToBottom
    Range("G3:K1001").Sort Key1:=[I2], Order1:=xlDescending, Header:=xlGuess, Orientation:=xlTopToBottom
End Sub

Salut h2so4,

Je sais bien, c'est pour cela que j'ai besoin d'aide. Sur mon fichier final, lorsque je mets sur chaque module (il y en a plusieurs dizaines) tout fonctionne bien.

Mais pour gagner en temps j'aimerais faire appel à un call, mais je ne sais pas comment.

Bonjour

Code à remplacer et à exécuter depuis la macro Defaut

Sub appel()
Dim i As Integer
Dim plage As Range

For i = 1 To Sheets.Count
    With ThisWorkbook.Sheets(i)
         Set plage = .Range("A3:E" & .Range("A" & .Rows.Count).End(xlUp).Row)
    End With

    With ThisWorkbook.Sheets(i).Sort
        .SortFields.Clear
        .SortFields.Add Key:=ThisWorkbook.Sheets(i).Range("C2"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .SetRange plage
        .Apply
        End With

Next i

End Sub

Cordialement

Edit : Oups !, il y a du monde qui est passé.... Désolé

Merci à vous, je teste et je vous dit ce qu'il en est.

@ h2so4, nickel la macro sur le fichier tri fonctionne très bien.

@ Raja, idem

@ Dan, la macro fonctionne que sur la colonne C et non sur la colonne I. Juste à l'adapter.

En tous cas, vous m’évitez pas mal de travail. Merci à vous

Re

@ Dan, la macro fonctionne que sur la colonne C et non sur la colonne I. Juste à l'adapter.

Oups déso, je n'avais pas regardé

Le code adapté

Sub appel()
Dim i As Integer
Dim plage As Range

For i = 1 To Sheets.Count
    With ThisWorkbook.Sheets(i)
         Set plage = .Range("A3:E" & .Range("A" & .Rows.Count).End(xlUp).Row)
    End With

    With ThisWorkbook.Sheets(i).Sort
        .SortFields.Clear
        .SortFields.Add Key:=ThisWorkbook.Sheets(i).Range("C2"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .SetRange plage
        .Apply
        End With

    With ThisWorkbook.Sheets(i)
         Set plage = .Range("G3:I" & .Range("G" & .Rows.Count).End(xlUp).Row)
    End With

    With ThisWorkbook.Sheets(i).Sort
        .SortFields.Clear
        .SortFields.Add Key:=ThisWorkbook.Sheets(i).Range("I2"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .SetRange plage
        .Apply
        End With
Next i

End Sub

Merci Dan

Rechercher des sujets similaires à "tri croissant decroissant vba"