Un bouton qui trie la feuille sur la colonne où il est placé

Bonjour Forum,

Je crée souvent des macros qui trient une feuille suivant la valeur de la colonne où le bouton est placé.

(par exemple, dans une liste d'adresses, le bouton "CODE POSTAL", placé en haut de la colonne qui contient les valeurs de code postal, trie la feuille sur ce critère).

Du coup, mes classeurs sont remplis de macros qui se ressemblent beaucoup, et ne servent qu'à trier une feuille donnée, sur une colonne donnée.

Alors je me dis que ce serait bcp + simple si je disposais d'une macro "générique", que je puisse associer à des boutons n'importe où dans le classeur (n'importe quelle feuille, n'importe quelle ligne dans une feuille).

Cette macro pourrait trier toutes les lignes situées sous la ligne où apparaît le bouton, en fonction de la colonne où le bouton est placé.

Quelqu'un saurait-il m'aider à faire ça, car ça dépasse de loin mon niveau en VBA ?

Merci !!!

Salut gloub,

tu as juste besoin de placer le curseur dans la colonne du tableau à partir de laquelle tu veux que le tri se fasse

25gloub-tri.xlsm (14.51 Ko)

Merci pour ta réponse très rapide.

Après avoir placé le bouton dans la feuille (par exemple en A2), j'obtiens un message d'erreur :

Erreur d'exécution '1004'

La méthode Sort de la classe Range a échoué.

Qu'est-ce qui se passe ?

Par ailleurs, je préfère les boutons créés à partir de formes.

(ça me permettra par exemple de créer un bouton semi-transparent superposé à l'en-tête de colonne à trier)

Est-on obligé de passer par un contrôle ?


Merci pour ta réponse très rapide.

J'ai un problème.

Après avoir placé le bouton dans la feuille (par exemple en A2), j'obtiens un message d'erreur :

Erreur d'exécution '1004'

La méthode Sort de la classe Range a échoué.

Qu'est-ce qui se passe ?

Par ailleurs, je préfère les boutons créés à partir de formes.

(ça me permettra par exemple de créer un bouton semi-transparent superposé à l'en-tête de colonne à trier)

Est-on obligé de passer par un contrôle ?

gloub a écrit :

J'ai un problème.

Après avoir placé le bouton dans la feuille (par exemple en A2), j'obtiens un message d'erreur :

Erreur d'exécution '1004'

La méthode Sort de la classe Range a échoué.

Qu'est-ce qui se passe ?

Je n'en ai aucune idée... tout fonctionne parfaitement ici.

est ce que la version 2003 serait en conflit avec le code ?!

Bonjour à tous,

Je crois que vous vous comprenez mal.

Pour utiliser la macro de game over sélectionner B1 et cliquer, sélectionner C1 et cliquer, etc

Une proposition sans bouton : il suffit de double-cliquer sur le titre en ligne 1

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, [A1:C1]) Is Nothing Then
        ActiveCell.CurrentRegion.Sort Key1:=ActiveCell.End(xlUp), Header:=xlYes
        Cancel = True
    End If
End Sub

eric

23classeur3.xlsm (15.00 Ko)
eriiic a écrit :

Pour utiliser la macro de game over sélectionner B1 et cliquer, sélectionner C1 et cliquer, etc

Oui, c'est ça, c'est ainsi que fonctionne la macro.

PS : j'ai édité mon post précédent et ajouté une autre proposition.

eric

Merci à tous les 2.

Merci à Eriiic : en effet, je n'avais pas compris le fonctionnement de la macro.

Maintenant que j'ai compris j'arrive très bien à utiliser la macro de Game Over.

La macro d'Eriiic fonctionne très bien aussi.

En revanche, j'ai besoin d'une macro qui effectue un tri seulement à partir d'une certaine ligne, qui change suivant la feuille.

(dans certaines feuilles, j'ai 2,voire 3 ou 4 lignes d'en-têtes de colonnes qui ne doivent surtout pas être triées).

D'où mon rêve d'un bouton qui déclenche le tri.

Si le bouton couvre les lignes 1 à 3 de la colonne A, le tri s'effectue à partir de la ligne 4.

Est-ce possible de faire comme ça ?

En tous cas, merci à tous les 2.

Bonjour,

toujours sans bouton et sur un double-clic en ligne 4 :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, [A4:C4]) Is Nothing Then
        Target.CurrentRegion.Offset(Target.Row - 1).Sort Key1:=ActiveCell.End(xlUp), Header:=xlYes
        Cancel = True
    End If
End Sub
21classeur3.xlsm (15.51 Ko)

Merci pour ta nouvelle macro.

En effet elle ne trie qu'à partir de la ligne 4, mais seulement à partir de la ligne 4.

Ça m'oblige donc à avoir 1 macro par feuille, et une macro différente pour une autre feuille si je veux que le tri s'effectue à partir de la ligne 3, par exemple.

C'est pour ça qu'une macro liée à un bouton, qui trie à partir de la ligne après le bas du bouton me semble une solution plus universelle.

Désolé de faire le client exigeant !

Salut gloub, eriiic...

voici le principe : positionne ta cellule active dans la 1ere ligne et dans la colonne dont tu veux faire le tri :

les 3 lignes avec zzz ne doivent pas être affectées par le tri et tu veux un tri par ville à partir de la ligne 5 :

sélectionne la cellule C5 (yyy) et appuie sur Run.

à tester

Ça marche nickel !

Bravo, et merci.

(mais si quelqu'un sait adapter la macro pour que le tri soit déclenché par un bouton à partir de la ligne située sous le bas du bouton, ça continue à m'intéresser.....!)

Bonjour,

Voir si ça te va.

Le tri se fait à partir de son coin inférieur droit, ainsi il peut déborder sur les lignes au-dessus.

Bien penser à renommer les boutons. Après un copié-collé ils portent le même nom...

eric

C'est parfait, merci beaucoup beaucoup.

Je crois que je vais en tartiner pas mal de mes feuilles utilisées par des collègues béotiens en Excel.

Et bravo pour ces jolis boutons bleus. Je n'avais pas réussi à en créer d'aussi beaux jusqu'ici.

Me reste 1 question :

Je ne savais pas qu'une forme pouvait être nommée.

J'ai créé une forme (un carré), que j'ai associé à la macro, puis j'ai copié le tout dans plusieurs colonnes.

Chaque bouton fonctionne sans problème. Pourquoi dis-tu qu'il faut renommer les boutons après copier/coller ?

Et comment faire ?

Bonjour,

le bouton en A4 s'appelle BoutonTrier1.

Si tu le copies en C4, il s'appellera également BoutonTrier1.

Et si tu cliques dessus c'est A4 qui se triera et non C4.

Au-dessus des n° de lignes tu as la référence de la cellule active.

Si tu sélectionnes une forme tu y lis son nom. Y saisir le nouveau nom et valider.

Si tu n'as pas eu le pb tant mieux. Ca dépend peut-être des formes.

eric

PS: n'oublie pas de mettre en résolu si c'est le cas (coche verte sur le post)

Merci Eriiic,

J'ai tout compris.

Et en effet, jusqu'ici, pas eu de pb sans renommer les boutons.

Rechercher des sujets similaires à "bouton qui trie feuille colonne place"