XL 2019 Bouton de macro pour tri alphabétique

  • Initiateur de la discussion Initiateur de la discussion DJISA
  • 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 !

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

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

Dernière édition:
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)
 
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.
 
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
 
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.
 
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.
 
- 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

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
284
Réponses
17
Affichages
1 K
Réponses
4
Affichages
177
Réponses
6
Affichages
1 K
Réponses
11
Affichages
780
Réponses
1
Affichages
1 K
Retour