XL 2019 Tri sur plusieurs feuilles via macro

lolo72

XLDnaute Nouveau
Bonjour à tous,

J'ai parcouru plusieurs posts similaires mais sans vraiment trouver la réponse à ma question. Je précise que je débute en VBA.

J'ai un classeur avec des dizaines d'onglets configurés de la même façon (dans le fichier exemple simplifié ci-joint, j'en ai laissé trois).

J'aimerais simplement créer une macro qui me permette de trier toutes les feuilles de la même façon, quel que soit l'ordre de tri choisi. Dans mon exemple, ce pourrait être par "évènement", "part" ou "montant".

Le premier onglet ("données") ainsi que le dernier ("recap") ne sont pas concernés.

Je n'ai pas eu de mal à créer la macro pour un onglet seul mais je ne sais comment l'étendre à l'ensemble du classeur (sauf onglets non concernés).

Merci par avance pour votre aide !
 

Pièces jointes

  • feuille_test_vba.xlsx
    12.8 KB · Affichages: 28
Solution
Salut, qqch dans le genre
Je précise Feuil1 et Feuil2 sont les CodeNames des feuilles Données et Récap
Ceci permettant de ne pas retoucher au code vba si on change les noms d'onglet de ces 2 feuilles, ou si on les déplace dans le classeur.

VB:
Option Explicit

Sub Tri()
Dim Wsh As Worksheet, LastRow As Long
    Application.ScreenUpdating = False
    For Each Wsh In ThisWorkbook.Worksheets
        If Wsh.Name <> Feuil1.Name And Wsh.Name <> Feuil2.Name Then
            With Wsh
                .Activate
                LastRow = Wsh.UsedRange.Rows.Count
                .Sort.SortFields.Clear
                .Sort.SortFields.Add Key:=Range("A2:A" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal...

kiki29

XLDnaute Barbatruc
Salut, qqch dans le genre
Je précise Feuil1 et Feuil2 sont les CodeNames des feuilles Données et Récap
Ceci permettant de ne pas retoucher au code vba si on change les noms d'onglet de ces 2 feuilles, ou si on les déplace dans le classeur.

VB:
Option Explicit

Sub Tri()
Dim Wsh As Worksheet, LastRow As Long
    Application.ScreenUpdating = False
    For Each Wsh In ThisWorkbook.Worksheets
        If Wsh.Name <> Feuil1.Name And Wsh.Name <> Feuil2.Name Then
            With Wsh
                .Activate
                LastRow = Wsh.UsedRange.Rows.Count
                .Sort.SortFields.Clear
                .Sort.SortFields.Add Key:=Range("A2:A" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .Sort.SortFields.Add Key:=Range("B2:B" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .Sort.SortFields.Add Key:=Range("C2:C" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

                With .Sort
                    .SetRange Wsh.Range("A1:C" & LastRow)
                    .Header = xlYes
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
                .Range("D1").Select
            End With
        End If
    Next Wsh
    Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
312

Membres actuellement en ligne

Statistiques des forums

Discussions
312 069
Messages
2 085 038
Membres
102 763
dernier inscrit
NICO26