VBA tri automatique

Bonjour à tous,

Je souhaite réaliser un tri automatique grace à une macro. J'ai donc fait un enregistrement pour avoir le code VBA mais celui ci est un peu lourd.

J'obtiens ceci en triant sur 3 colonnes (I, F puis E):

Sub Tri()

    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("I2:I000"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("F2:F1000"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("E2:E1000"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("A1:M1000")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Avez vous une solution pour que ça soit plus lisible ?

Merci d'avance pour votre aide.

Bonjour et bienvenue sur le forum

Joins un fichier en donnant un exemple de ce que tu as et de ce que tu veux obtenir.

Bye !

Bonjour,

En attendant un petit fichier, essaie cette procédure :

Sub Tri()
Dim ws As Worksheet
Dim arrCol As Variant
Dim rng As Range
Dim i As Long
    Set ws = ActiveWorkbook.Worksheets("Feuil1")
    Set rng = ws.Cells(1).CurrentRegion
    arrCol = Array(9, 6, 5)
    For i = LBound(arrCol) To UBound(arrCol)
        With ws
            .Sort.SortFields.Add _
                    Key:=rng.Columns(arrCol(i)), _
                    SortOn:=xlSortOnValues, _
                    Order:=xlAscending, _
                    DataOption:=xlSortNormal
            With .Sort
                .SetRange rng
                .Header = xlYes
                .Apply
            End With
            .Sort.SortFields.Clear
        End With
    Next i
End Sub

Bonjour GMB,

La macro ci-dessus fonctionne très bien pour mon fichier, je voudrais juste la modifier parce que je trouve ça illisible

Sur le fichier joint, le tri est bien effectué d'abord sur la colonne I, puis sur la F et enfin sur la E.

Par ailleurs, l'objectif final de mon fichier est le suivant :

Lorsque que je modifie les clés de tri sur la "Feuil2" et que je relance la macro, l'ordre des tris à été mis à jour.

Je pense que pour ça il faut utiliser une boucle "For" mais j'ai du mal à la mettre en place

Si vous avez une idée..

Merci beaucoup !

10essai.xlsm (18.78 Ko)

Re,

Ton fichier en retour.

A tester.

Cdlt.

12essai.xlsm (25.28 Ko)

Bonjour Jean-Éric et merci pour votre réponse,

J'ai testé votre solution et le seul problème est que les tris ne sont pas enregistrés ; par exemple la colonne I est bien triée en première position mais le tri de la colonne F efface ce qui a été fait précédemment (de même pour la colonne E)..

Re,

Voici le tri qui est effectué par la procédure.

N'était ce pas ce que tu souhaitais?

Cdlt.

6essai.xlsm (42.21 Ko)
snip 20180108161825

Bonjour,

Si, le tri indiqué sur l'image est ce que je souhaite et c'est de cette façon que j'ai enregistré ma macro, mais la macro de votre fichier ne fait pas la même chose... elle fait en fait l'inverse (j'ai donc modifié "arrCol = Array(9, 6, 5)" par "arrCol = Array(5, 6, 9)" et j'obtiens le bon résultat)

bonjour,

je pense qu'il faut déplacer l'instruction next i comme ceci

Option Explicit

Sub Tri()
    Dim ws As Worksheet
    Dim arrCol As Variant
    Dim rng As Range
    Dim i As Long
    Set ws = ActiveWorkbook.Worksheets("Feuil1")
    Set rng = ws.Cells(1).CurrentRegion
    arrCol = Array(9, 6, 5)
    With ws
        For i = LBound(arrCol) To UBound(arrCol)
            .Sort.SortFields.Add _
                    Key:=rng.Columns(arrCol(i)), _
                    SortOn:=xlSortOnValues, _
                    Order:=xlAscending, _
                    DataOption:=xlSortNormal
        Next i
        With .Sort
            .SetRange rng
            .Header = xlYes
            .Apply
        End With
        .Sort.SortFields.Clear
    End With

End Sub

Bonjour,

@ h2so4,

Après relecture de ma proposition, je ne peux qu'acquiescer.

Bonne journée.

Bonjour,

Merci à vous tous, ça fonctionne parfaitement !!

Juste une dernière chose, je gère le tri automatique grâce à des clés modifiables (Cf. carré orange dans le fichier joint).

Est-il possible de faire passer ce carré sur la 'Feuil2", et que la macro fonctionne toujours ?

Merci

5essai1.xlsm (25.18 Ko)

bonsoir,

code adapté pour prendre les clés en feuil2

6essai1.xlsm (20.78 Ko)

Parfait, c'est exactement ce que je voulais !!

Je vous remercie

Rechercher des sujets similaires à "vba tri automatique"