Tri auto d'une plage en appuyant sur un bouton ?

Bonjour Forum,

Je fais très souvent des tris sur 1 critère dans des portions de feuilles.

Pour éviter des sélections fastidieuses et répétitives, ces portions sont des plages nommées.

Cela dit, je reste obligé de créer une macro pour chaque colonne sur laquelle doit s’effectuer le tri.

J’aimerais créer une macro universelle (du moins, valable pour une feuille), qui fonctionne en cliquant sur un bouton placé dans l’en-tête de la colonne.

La macro lancerait le tri sur la plage « LISTE_A_TRIER », en prenant comme clé de tri la colonne où est situé le coin supérieur gauche du bouton.

Mais ça, c’est trop fort pour mon niveau de VBA…

Quelqu’un pourrait-il m’aider, siouplé ?

Merci !!!

31tri-auto.zip (2.45 Ko)

Salut,

Je ne sais pas si cela peut aider,

J'avais fait un code pour que si tu double cliques sur l'entetes cela lance le tri automatiquement sur la colonne...

A tester ;

(coller le code dans le code de la feuille et PAS dans un module)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim quellecolonne As String

If Target.Row > 1 Then Exit Sub

quellecolonne = Split(Target.Address, "$")(1)

    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add _
            Key:=Range(quellecolonne & "2", quellecolonne & ActiveCell.SpecialCells(xlLastCell).Row), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            DataOption:=xlSortNormal

    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("A1", ActiveCell.SpecialCells(xlLastCell))
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Damien

Merci pour ton aide.

A priori ta proposition me pose 2 problèmes :

  • le tri ne doit pas s'appliquer à toutes les lignes (il y a des parties de feuille non triées) d'où le recours à des plages nommées
  • il y a souvent des lignes cachées dans mes feuilles, du coup, l'en-tête d'une colonne peut se retrouver à la ligne 8 ou 9.
D'où l'idée du bouton, que je pourrais placer librement, pour déclencher le tri (surtout si des lignes cachées sont affichées au moment où j'ai besoin de trier).

Malheureusement, je ne saurais pas adapter ton code à ce mode de fonctionnement.

Je m'en remets donc aux gourous du VBA...

Ça n'inspire personne ?

Salut,

double clique sur une des cellules de la colonne de ton tableau dont tu veux qu'elle soit ton choix de tri.

(Fais quand même quelques tests supplémentaires)

Bonsoir gloub

a voir si cela convient

Merci à tous les 2 !

@BOB71AU : ça marche, merci beaucoup !!!

En revanche, je vois que tu dois créer une macro par colonne à trier.

Mon but ultime serait une macro qui détecte la colonne où se situe le coin supérieur gauche du bouton, et fasse le tri sur cette colonne.

Ça je ne sais pas faire....

@Game Over : ça marche, mais si je rajoute des lignes avant les en-têtes ça ne marche plus

Voici un code modifié pour prendre en charge une plage de tri avec des lignes non vides au dessus de la ligne d'en têtes.

Du coup, tu ne peux plus double cliquer n'importe ou dans la colonne; le clic devra obligatoirement se faire sur une des cellules de l'en tête.

D'autre part, l'en tête doit obligatoirement être en gras.

Merci GameOver - et désolé d'avoir mis tant de temps à réagir, je suis complètement débordé.

Sur mon ordi, ça ne marche pas : dès que je double-clique sur un en-tête (en gras), j'obtiens un message d'erreur :

Erreur d'exécution '438' Propriété ou méthode non géréepar cet objet

Je suis coincé...

aucune idée, je n'ai jamais eu ce problème... as tu changé le format du fichier ? (normalement ça ne devrait pas poser de problème)

Ca te donne le message d'erreur après avoir exécuté l'application de quelle façon ? (pour essayer de reproduire l'erreur depuis mon pc). Normalement, une ligne de code devrait être surlignée en jaune, laquelle ?

Merci pour ta réponse ultra-rapide.

Non, je n'ai rien changé : je télécharge ton fichier, je l'ouvre, je clique, c'est tout.

La ligne surlignée en jaune c'est :

With Worksheets("Feuil1").Sort

Précision peut-être utile : je suis sur Excel 2003.

Je confirme que tout fonctionne ici, je ne pense pas que ça vienne de ta version Excel, le fichier est sauvegardé sous la version 2003.

Bon voilà, j'ai changé et adapté le code de l'enregistreur de macro... ça fonctionne correctement de mon côté; si ça ne marche pas comme ça, je t'avoue que je n'ai pas d'autre solution...

18tri-gloup.zip (13.01 Ko)
Rechercher des sujets similaires à "tri auto plage appuyant bouton"