XL 2019 Bouton de macro pour tri alphabétique

DJISA

XLDnaute Occasionnel
Bonsoir le Forum!
Nous avons créer cette macro pour trier alphabétiquement des listes nominatives. Le problème est qu'elle ne s'applique qu'à l'onglet "5B". Nous voudrions la modifier pour l'étendre aux autres onglets classes, ici 6A, 3A, 3B.
La macro:
Code:
Sub Tri_alpha()

   Range("Tableau95B").Select
    ActiveWorkbook.Worksheets("5B").ListObjects("Tableau95B").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("5B").ListObjects("Tableau95B").Sort.SortFields.Add2 _
        Key:=Range("Tableau95B[Prénom]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("5B").ListObjects("Tableau95B").Sort.SortFields.Add2 _
        Key:=Range("Tableau95B[Nom]"), SortOn:=xlSortOnValues, Order:=xlAscending _
        , DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("5B").ListObjects("Tableau95B").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Merci
DJISA
 

Pièces jointes

  • Pn @ DS.xlsm
    64.4 KB · Affichages: 6

laurent3372

XLDnaute Impliqué
Supporter XLD
Sur chaque feuille à trier, on crée un bouton ActiveX nommé cbTri
Dans le code des feuilles :
VB:
Sub cbTri_Click()
    Tri_alpha Me.ListObjects("Tableau9" & Me.Name)
End Sub
Dans un module:
Code:
Sub Tri_alpha(tableau As ListObject)
    With tableau.Sort
        With .SortFields
            .Clear
            .Add Range(tableau.Name & "[Prénom]")
            .Add Range(tableau.Name & "[Nom]")
        End With
        .Header = xlYes
        .Apply
    End With
End Sub
Cela suppose que les tableaux sont tous nommés Tableau9xx où xx est le nom de la feuille où il se trouvent.

Cordialement,
--
LR
 

Pièces jointes

  • Pn @ DS (1).xlsm
    74.9 KB · Affichages: 8
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil

DJISA
Le fichier fourni par laurent3372 n'est pas corrompu.
J'ai pu l'ouvrir.

Par contre une question en passant
Les données qui sont le fichier (le tien à la base) sont fictifs ou pas ?
Dans le cas contraire, il faudrait remplacer ton fichier par une version sans données confidentielles.

(Comme expliqué dans la charte du forum, RGPD oblige)
 

Dranreb

XLDnaute Barbatruc
Bonjour Staple1600
Oui, le classeur du poste #2 je peux l'ouvrir aussi bien que l'original du poste #1.
J'ai oublié de préciser qu'il suffisait ce copier/coller sur toutes les feuilles le bouton de formulaire qui exécute ma version de la macro.
 

DJISA

XLDnaute Occasionnel
Bonjour laurent3372, Le forum!
J'ai finalement ouvert le fichier. Il y a un beug:
La méthode 'range' de l'objet global a échoué
VB:
Sub Tri_alpha(tableau As ListObject)
    With tableau.Sort
        With .SortFields
            .Clear
          [B] [/B][COLOR=rgb(247, 218, 100)][B] .Add2 Range(nomTableau & "[Prénom]")[/B][/COLOR]
            .Add2 Range(nomTableau & "[Nom]")
        End With
        .Header = xlYes
        .Apply
    End With
End Sub

Important: Nous aimerions avoir un seul bouton de commande pour trier toutes les feuilles si possible.
Merci
DJISA
 

Dranreb

XLDnaute Barbatruc
Un bouton de commande est forcément sur une certaine feuille et doit avoir sa propre procédure _Click dans l'objet Workseet qui la représente, tandis qu'un bouton de formulaire tel qu'il y en avait un seul dans une des feuilles de votre classeur d'origine, répété sur chaque feuille, s'est vu attribué partout la même macro d'un module standard.
 

Dranreb

XLDnaute Barbatruc
Important: Nous aimerions avoir un seul bouton de commande pour trier toutes les feuilles si possible.
Supposons qu'il s'appelle CommandButton1, mettez ça dans le module de l'objet worksheet qui représente la feuille qui le contient :
VB:
Private Sub CommandButton1_Click()
   TriToutesFeuilles
   End Sub
Et corrigez comme sui le code du module standard :
VB:
Sub Tri_alpha(Optional ByVal Wsh As Worksheet)
   Dim LOt As ListObject
   On Error Resume Next
   If Wsh Is Nothing Then Set Wsh = ActiveSheet
   Wsh.ListObjects(1).Sort.Apply
   End Sub
Sub TriToutesFeuilles()
   For Each Wsh In ThisWorkbook.Worksheets
      Tri_alpha Wsh
      Next Wsh
   End Sub
Mais il serait plus simple à mon avis de simplement affecter la macro TriToutesFeuilles à un bouton de formulaire.
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 842
dernier inscrit
seb0390