Résolu 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
 
Ce fil a été résolu! Aller à la solution…

Fichiers joints

laurent3372

XLDnaute Occasionnel
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
 

Fichiers joints

Dernière édition:

DJISA

XLDnaute Occasionnel
Salut laurent3372, Le Forum!
Merci pour la réponse, mais le code proposé ne marche pas à notre niveau. Peut-être n'avons nous pas bien compris. Et nous ne parvenons pas ouvrir le fichier renvoyé. Il est corrompu.
DJISA
 

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.
Essayez en modifiant simplement comme suit votre macro :
VB:
Sub Tri_alpha()
   On Error Resume Next
   ActiveSheet.ListObjects(1).Sort.Apply
   End Sub
 

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
 

DJISA

XLDnaute Occasionnel
Salut Stapple, le forum!
Oui, toutes les données figurant dans ces fichiers sont bien fictives
Cordialement
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.
 
Ce message a été identifié comme étant une solution!

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas