Microsoft 365 Trier sur colonnes disjointe sur 12 feuilles

  • Initiateur de la discussion Initiateur de la discussion jcf6464
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jcf6464

XLDnaute Impliqué
Bonjour à vous toutes et tous ,
J'ai réalisé des macros (par enregistrer des macros) sur le mois de février pour trier par ordre plus petit au plus grand les colonnes B9😀 , E9:G ,J9:L, M9:O, R9:T , U9:W sur la première colonne soit B,E,J,M,R,U,

Le classeur contient 12 mois ,

Ma demande y a t'il possibilité de faire un code plus court pour traiter les 12 mois à l'activation du mois,

Merci d’avance à vous,
Bonne journée, JCF6464
 

Pièces jointes

Solution
Bonjour à tous,

Ou encore, dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Workbook_SheetChange Sh, [A1] 'lance la macro
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not IsDate("1/" & Sh.Name) Then Exit Sub
Dim a, derlig&, i As Byte
a = Array("B8:D8", "E8:G8", "J8:L8", "M8:O8", "R8:T8", "U8:W8")
derlig = Sh.Cells.SpecialCells(xlCellTypeLastCell).Row
Application.ScreenUpdating = False
If Sh.FilterMode Then Sh.ShowAllData 'si la feuille est filtrée
For i = 0 To UBound(a)
    With Sh.Range(a(i))
        .Resize(derlig - .Row + 1).Sort .Cells(1), xlAscending, Header:=xlYes 'tri sur la 1ère colonne
    End With
Next i
End Sub
Le code s'exécute quand on modifie...
Bonjour @jcf6464🙂,

Voici un code à placer uniquement dans le module de ThisWorkbook. Les codes des modules des feuilles "Mois" ont été effacés. Les mois des onglets peuvent contenir ou non des accents.
Le code est un peu commenté :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim nomMois As String, i As Long, xcol, ncol As Long
' nom de la feuille activée (minuscule et sans accent)
nomMois = Replace(Replace(LCase(Sh.Name), "é", "e"), "û", "u")
For i = 1 To 12   ' boucle sur chaque numéro de mois
   ' si le nom de la feuille est le nom du i ème mois (minuscule et sans accent)
   If nomMois = Replace(Replace(LCase(Format(29 * i, "mmmm")), "é", "e"), "û", "u") Then
      With Sh                                   ' avec la feuille activée
         Application.ScreenUpdating = False     ' on fige l'écran (plus rapide)
         If .FilterMode Then .ShowAllData       ' si filtre actif alors on affiche tout
         For Each xcol In Split("b e j m r u")  ' pour chaque première colonne (en lettre) des blocs à trier
            ncol = .Cells(9, xcol).Column       ' la même colonne en nombre
            .Cells(9, ncol).Resize(80, 3).Sort key1:=.Cells(9, ncol), order1:=xlAscending, _
            key2:=.Cells(9, ncol + 1), order2:=xlAscending, Header:=xlNo, MatchCase:=False      ' tri du bloc
         Next xcol
      End With
      Exit For    ' la feuille activée a été trié (son mois a été trouvé), on quitte la boucle des mois
   End If
Next i
 

Pièces jointes

Dernière édition:
Hello

Mets ceci dans un module standard (et supprime ton code)
VB:
Sub Trier(Feuille As Worksheet)

listcol = Array(2, 5, 10, 13, 18, 21) 'liste des premières colonnes de zone à trier (colonnes B , E J M R et U)
With Feuille
    For j = LBound(listcol) To UBound(listcol)
        LastLine = .Cells(.Rows.Count, listcol(j)).End(xlUp).Row
        Set ZoneATrier = .Range(.Cells(9, listcol(j)), .Cells(LastLine, listcol(j))).Resize(, 3)
        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=ZoneATrier.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         With .Sort
            .SetRange ZoneATrier
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Next j
End With

End Sub

Sub test()
Dim Ws As Worksheet

Application.ScreenUpdating = False
    For Each Ws In ActiveWorkbook.Sheets
        Trier Ws
    Next Ws
Application.ScreenUpdating = True
End Sub
 
Bonjour à tous,

Ou encore, dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Workbook_SheetChange Sh, [A1] 'lance la macro
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not IsDate("1/" & Sh.Name) Then Exit Sub
Dim a, derlig&, i As Byte
a = Array("B8:D8", "E8:G8", "J8:L8", "M8:O8", "R8:T8", "U8:W8")
derlig = Sh.Cells.SpecialCells(xlCellTypeLastCell).Row
Application.ScreenUpdating = False
If Sh.FilterMode Then Sh.ShowAllData 'si la feuille est filtrée
For i = 0 To UBound(a)
    With Sh.Range(a(i))
        .Resize(derlig - .Row + 1).Sort .Cells(1), xlAscending, Header:=xlYes 'tri sur la 1ère colonne
    End With
Next i
End Sub
Le code s'exécute quand on modifie ou valide une cellule quelconque ou qu'on active la feuille.

Attention, ne pas oublier les accents dans les onglets des mois de Février Août Décembre.

Edit : il y a des trous dans les dates, j'ai donc ajouté la variable derlig.

A+
 

Pièces jointes

Dernière édition:
Bonjour à tous,

Ou encore, dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Workbook_SheetChange Sh, [A1] 'lance la macro
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not IsDate("1/" & Sh.Name) Then Exit Sub
Dim a, derlig&, i As Byte
a = Array("B8:D8", "E8:G8", "J8:L8", "M8:O8", "R8:T8", "U8:W8")
derlig = Sh.Cells.SpecialCells(xlCellTypeLastCell).Row
Application.ScreenUpdating = False
If Sh.FilterMode Then Sh.ShowAllData 'si la feuille est filtrée
For i = 0 To UBound(a)
    With Sh.Range(a(i))
        .Resize(derlig - .Row + 1).Sort .Cells(1), xlAscending, Header:=xlYes 'tri sur la 1ère colonne
    End With
Next i
End Sub
Le code s'exécute quand on modifie ou valide une cellule quelconque ou qu'on active la feuille.

Attention, ne pas oublier les accents dans les onglets des mois de Février Août Décembre.

Edit : il y a des trous dans les dates, j'ai donc ajouté la variable derlig.

A+
Bonjour à vous tous ,

Excusez moi de retard un peut débordé avec les confitures ,
Merci pour vos codes j'ai fait des essaies je garde celui de Job75 qui me va,

merci a vous tous d'aider nous autres néophyte

Bon WE jcf6464
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

P
Réponses
6
Affichages
1 K
P
A
Réponses
6
Affichages
2 K
A
Retour