Créer une macro pour simplifier la commande trier ?

Bonjour Forum !

Je fais très souvent des tris.

J’aimerais disposer d’une macro qui simplifie cette commande, mais je ne sais pas l’écrire en VBA.

Fonctionnement idéal :

  • je sélectionne une plage
  • je lance une macro (raccourci-clavier)
  • je clique 1 fois n’importe où dans une colonne
  • Excel trie la plage sélectionnée (tri sans en-tête) avec, comme clé de tri, la colonne où j’ai cliqué
  • à l’issue du tri, la plage reste sélectionnée

Quelqu’un saurait-il m’aider à mettre ça au point, siouplé ?

D’avance merci !!!

Bonjour

Quelle est la plage concernée par le tri ??

Quelle est ta version excel pour le tri ? 2003 ?

A te relire

Merci pour ta réponse.

Pour la plage : je la sélectionne manuellement.

Pour la version d'Excel, j'utilise 2003 chez moi et 2007 au bureau.

Idéalement, j'aimerais que la macro fonctionne dans les 2 environnements, sinon 2007 me suffira car avec 2003, j'utilise des boutons personnalisés.

Re

Essaie ceci

Sub tri()
'Macro Dan
Dim col As Byte
Dim plage As Range
col = ActiveCell.Column
Set plage = Application.InputBox(prompt:="Sample", Type:=8)
With ThisWorkbook.ActiveSheet.Sort
    .SortFields.Clear
    .SortFields.Add Key:=Cells(, col), SortOn:=xlSortOnValues, Order:=xlAscending
    .SetRange plage
    .Header = xlNo
    On Error Resume Next
    .Apply
End With
End Sub

Le code te demandera de sélectionner la plage à trier.

si ok, clique sur le V vert à coté du Bouton EDITER lors de ta réponse afin de cloturer le fil

Amicalement

Merci pour ta réponse et ta rapidité !

Ça marche !!!

J'ai mis un peu de temps à comprendre que la cellule active avant de lancer la macro était la clé de tri.

Si possible, je préférerais une ergonomie inverse : sélection de la plage puis lancement macro puis choix de la clé de tri.

Ça me permettrait de relancer un nouveau tri sans avoir à resélectionner la plage de tri.

Merci encore.

Re,

Si possible, je préférerais une ergonomie inverse : sélection de la plage puis lancement macro puis choix de la clé de tri.

Ça me permettrait de relancer un nouveau tri sans avoir à resélectionner la plage de tri.

Heu... pas compris là

Avec ce que tu m'expliques plus besoin de macro la fonction Tri personnalisé d'excel fait ce que tu dis non ?

Sélectionne la base de données à trier

Option "tir personnalisé"

choix de la colonne à trier puis Ok

Ai-je loupé quelque chose ??

Merci pour ta réponse.

Comme je ne suis pas à mon bureau aujourd'hui, je ne suis pas sûr de l'ergonomie de 2007, mais si je me souviens bien, c'est un peu comme dans la 2003 :

  • sélectionner une plage
  • lancer la commande
  • choisir la colonne dans une liste déroulante
  • valider

Avec une macro, j'aurais :

  • sélectionner la plage
  • taper un raccourci clavier
  • cliquer dans la colonne choisie

C'est presque pareil, mais moins fastidieux de ne pas avoir à choisir la colonne dans une liste déroulante, surtout si le tri est à faire dans la 20ème colonne.

En fait, sur mon poste en 2003, j'ai créé un bouton personnalisé par clé de tri. Pour trier, je fais juste :

  • sélection de la plage
  • clic sur le bon bouton
Sur ce coup-là, 2007 est une régression...

Re,

Bon essai en modifiant le code comme suit

Remplace

col = ActiveCell.Column
Set plage = Application.InputBox(prompt:="Sample", Type:=8)

par

Set plage = ActiveCell.CurrentRegion
col = ActiveCell.Column

A te relire

Merci Dan !

Une fois la manip faite, je reçois un message d'erreur :

Erreur d'exécution '438':

Propriété ou méthode non gérée par cet objet

As-tu (ou quelqu'un d'autre) une idée de résoudre ce problème ?

Pour être sûr qu'on parle de la même chose, je joins le code après la modif que tu m'as proposée :

Sub tri()
'Macro Dan
Dim col As Byte
Dim plage As Range
Set plage = ActiveCell.CurrentRegion
col = ActiveCell.Column
With ThisWorkbook.ActiveSheet.Sort
    .SortFields.Clear
    .SortFields.Add Key:=Cells(, col), SortOn:=xlSortOnValues, Order:=xlAscending
    .SetRange plage
    .Header = xlNo
    On Error Resume Next
    .Apply
End With
End Sub

Merci !

Re

Le message apparait quand ?

As-tu une ligne du code qui se met en couleur Jaune (ou autre) et soui, laquelle ?

Quelle est ta version excel ? si 2007, je suppose que l'extension de ton fichier est bien en *.xlsm

A te relire

Merci de persévérer à m'aider !

Testé chez moi sur 2003 :

La ligne qui beugue c'est :

With ThisWorkbook.ActiveSheet.Sort

Testé à mon bureau sur 2007 :

La macro ne beugue pas.

En revanche, elle déclenche un tri sans que je puisse maîtriser la plage triée.

Par ailleurs, pour répondre à ta question : du fait que je travaille sur les mêmes fichiers au bureau (sur Excel 2007) et chez moi (Excel 2003) je n’utilise que des fichiers .xls, jamais des .xlsm, sans souci jusqu’ici.

Re

En revanche, elle déclenche un tri sans que je puisse maîtriser la plage triée.

Ce qu'il faut faire :

  • Sélection de la plage
  • Sélection de la colonne (ou d'une cellule dans la colonne)--> tu peux le faire apuyant la touche CTRL de ton clavier puis en cliquant dans une des cellules de la colonne sur laquelle se fera le tri
  • puis exécution de la macro

NB : faire une liste déroulante avec le choix de la colonne oblige à passer par USF. C'est beaucoup plus compliqué

Pour Excel 2003, le code est à adapter

A te relire pour excel 2007 d'abord

Je n'avais pas compris l'ergonomie (sélection de la plage + "sursélection" de la colonne) et du coup ça marche sur 2007 !!!

En revanche, pour ce qui est de 2003, où ça beugue, je ne sais pas ce qu'il faut faire pour adapter le code...

Merci beaucoup en tous cas.

PS : pour ce qui est du choix de la colonne par liste déroulante, c'est justement ça que je trouve pénible dans la fonction trier, donc ça ne me manque pas du tout

PPS : est-ce compliqué de modifier le code pour sélectionner la clé de tri après sélection de la plage et lancement de la macro, plutôt qu'en "sursélectionnant" ?

re

Pour excel 2003, le système que tu veux ne fonctionnera pas car le fait de sélectionner une plage puis la colonne, n'est pas autorisé.

Je te propose plutot une solution plus simple. Dans la plage à trier, tu sélectionnes une cellule dans une colonne que tu veux trier puis tu exécutes la macro en question.

Cela change un peu de ce que tu voulais mais c'est la seule solution pour pouvoir effectuer un tri sous les deux versions.

Dis moi si ok pour toi sur cette proposition.

A te relire

Merci pour ta réponse.

En fait mon post vient de la frustration que j'ai éprouvée en passant à 2007.

Avec 2003, j'avais ma jolie collection de 20 (!) boutons personnalisés, qui correspondait parfaitement à mes besoins.

S'il n'est pas possible de créer une macro qui fonctionne à la fois sur 2003 et 2007, je vais conserver mon fonctionnement avec boutons sur 2003, et adopter ta macro pour 2007.

Merci beaucoup pour ton aide !!!

re

S'il n'est pas possible de créer une macro qui fonctionne à la fois sur 2003 et 2007,

J'ai jamais dit cela ....

Si tu veux qu'elle soit active sur les deux versions, essaie avec ce code

Sub tri()
'Macro Dan
Dim col As Byte
Dim plage As Range
Set plage = ActiveCell.CurrentRegion
col = ActiveCell.Column
If Val(Application.Version) <= 11 Then
plage.Sort Key1:=Cells(, col), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Else: With ThisWorkbook.ActiveSheet.Sort
    .SortFields.Clear
    .SortFields.Add Key:=Cells(, col), SortOn:=xlSortOnValues, Order:=xlAscending
    .SetRange plage
    .Header = xlNo
    On Error Resume Next
    .Apply
End With

End If
End Sub

Oublie pas toutefois, clique dans une cellule de la colonne sur base de laquelle sera effectué le tri, puis exécutes le code

Amicalement

Rechercher des sujets similaires à "creer macro simplifier commande trier"