Une macro pour trier des plages nommées

Bonjour aux Excelpratiquiens (comment s'appellent les habitants de cet hyperespace ?)

Je gère un classeur qui se compose de feuilles assez répétitives (ce sera peut-être plus clair à l’aide du fichier joint). Dans chaque feuille, j’ai des plages de cellules nommées [nom de la feuille] & [nom de la plage], par exemple « LILLE_LISTE_1 ».

Je souhaite créer une macro unique qui permette de trier des plages de cellules dont la 2è partie du nom est identique, même si la 1ère partie.est propre au nom de la feuille active.

Je bute sur une difficulté : je ne sais pas créer une macro qui trie la plage « PARIS_LISTE_1 » dans la feuille « PARIS » et qui sache aussi trier la plage « LILLE_LISTE_1 » dans la feuille « LILLE ».

Quelqu’un pourrait-il m’aider ?

Merci !

142exemple.xls (17.00 Ko)

Bonjour à tous,

On peut faire sans être obligé de nommer les plages et sans la numérotation,

on trie la colonne "B" alphab. pour chaque liste.

cela t'évitera d'insérer des N°pour les ajouts

ok ?

Amicalement

Claude

Merci pour ta réponse.

En fait, je sais bien qu'on peut trier en direct. Mais, pour exposer mon problème, je l'ai un peu simplifié.

En fait, je veux pouvoir trier selon plusieurs critères (donc sur plusieurs colonnes) : par priorité d'action et/ou par interlocuteur et/ou par date au plus tard et/ou par n° de ligne.

Cette opération, je la refais tellement souvent qu'une macro est bien pratique, car elle permet d'éviter de sélectionner la plage concernée (d'où les plages nommées), puis de choisir les 3 clés de tri.

Jusqu'à présent j'ai créé une macro par feuille et par liste, mais ça prend trop de place et de temps, d'où ma recherche d'une solution unifiée.

J'espère avoir éclairé la lanterne de ceux qui voudront bien m'aider.

Bonjour,

a tester et a adapter a ton fichier

Private Sub Worksheet_Change(ByVal Target As Range)

[a2:a5].Sort key1:=[a2]

End Sub

Merci pour ta réponse.

Malheureusement, je ne sais pas comment la tester : j'ai fait un clic-droit dans l'onglet de la feuille active, puis j'ai collé le code. Mais après je ne sais pas ce qu'il faut faire, et j'ai l'impression que même si ça marchait, je ne saurais pas quoi faire pour adapter le code aux différentes plages nommées...

Help !

Bonsoir,

regarde et dis quoi,on fait un tri alpha sur la colonne B,donc cela se met par ordre alpha automatiquement

A +

394exemple.zip (9.52 Ko)

OK, merci, j'ai compris, mais ce n'est pas le fonctionnement que je recherche.

Pour simplifier, je voudrais pouvoir créer 3 icônes personnalisées, en y affectant une macro qui me permette de trier la liste 1 sur la colonne 1, la colonne 2 ou la colonne 3, quelle que soit la feuille – je ne sais pas si je suis clair ?!

Bonsoir,

je préfère ne pas te répondre car mes connaissances en VBA sont très très limitées .

A +

Bonsoir,

une macro qui me permette de trier la liste 1 sur la colonne 1, la colonne 2 ou la colonne 3, quelle que soit la feuille

tu ne veux pas trier aussi les listes 2 et 3 ?

Claude

@ henri : merci quand même !

@ dubois : merci pour ta réponse.

Je veux pouvoir trier soit la liste 1, soit la liste 2, soit la liste 3.

Comme je veux aussi pouvoir trier suivant plusieurs clés de tri, et dans plusieurs feuilles, ça fait trop de combinaisons pour que je puisse tout gérer par une macro spécifique à chaque fois.

Bonjour à tous,

Certains aiment bien se compliquer la vie ! mais bon,

Petit exercice sur les variables et Goto

code à copier sur chaque feuille VBE

Public Sub Worksheet_Change(ByVal Target As Range)
If Flag Then Exit Sub
    If Not Application.Intersect(Target, Range("d1")) Is Nothing Then
        Call TriListes
    End If
End Sub

Sélectionner la liste à trier en "D1", les InputBox demande les 3 clés de tri

édit: prévu pour 20 colonnes (A:T), tu peux insérer des lignes comme tu veux

les plages ne sont pas nommées !

Bonne journée

Claude

Merci pour ta réponse.

Je suis désolé d’apparaître comme celui qui fait la fine bouche alors qu’on essaie de l’aider, mais ce que tu me propose ne me convient pas.

Je t’explique ce que j’ai mis en place, qui me convient très bien mais qui est très limité, puis ce que je cherche à faire.

Comme j’effectue toujours les 4 mêmes opérations de tri sur une liste donnée (tri sur colonnes 2/5/1 ou 6/5/1, ou 5/6/2, ou colonne 1 seulement), une macro, affectée à un bouton, qui permet de sélectionner puis trier ma liste en 1 clic (sans même me poser du n° des colonnes que je veux trier) puis déselectionner marche très très bien. Je clique parfois sur l’un de ces boutons plusieurs fois en 1 minute pour voir où sont mes priorités du moment.

Problème : si je veux pouvoir faire le même type d’opération ultra-rapide avec n’importe quelle liste, je ne sais plus comment faire.

C’est pourquoi je me suis dit qu’avec des plages de cellules nommées, il serait peut-être possible de standardiser la manip quel que soit le nom de la feuille et sans avoir à spécifier au préalable dans du code la zone sur laquelle le tri s’effectue car ma liste est très évolutive (ajout et suppression de lignes en permanence). De ce point de vue, une plage de cellules nommées marche très bien.

Voilà, il y a peut-être une impossibilité de programmation dans la macro telle que je la rêve (ou plutôt, les macros : une pour le tri 2/5/1 sur liste 1, une pour liste 2, une pour liste 3, et rebelote pour les 3 autres listes, ce qui fait 16 macros et 16 boutons en tout et pour tout –bien sûr, je ne demande pas une aide pour les 16, seulement un principe que je pourrai ensuite décliner).

S’il n’y a pas d’impossibilité, je pense, pour l’avoir mise en pratique de façon limitée mais très efficace et très répétitive, que c’est l’ergonomie la plus appropriée à mon travail.

re,

Ne te butte pas sur ton idée de nommer les plages, çà ne sert à rien pour les clés de tri !

il te faut des variables.

macro de base pour la liste 1

Sub TriListe1() 'clés de tri B;C;D (ou 2;3;4)ici sur 20 colonnes
Dim LG%, L1%, L2%
    LG = Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1
    L1 = WorksheetFunction.Match("LISTE 1", Range("a1:a" & LG), 0)
    L2 = WorksheetFunction.Match("LISTE 2", Range("a1:a" & LG), 0)

    Range(Cells(L1, 1), Cells(L2 - 1, 20)).Sort _
    Key1:=Cells(L1, 2), Order1:=xlAscending, _
    Key2:=Cells(L1, 3), Order2:=xlAscending, _
    Key3:=Cells(L1, 4), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False

    Cells(1, 1).Activate
End Sub

Key1:=Cells(L1, 2) le 2 représente la 2ème colonne (B)

Je t'ai fait pour les 3 listes sur le fichier

Tu pourrais utiliser aussi un filtre pour n'afficher que la liste qui t'intéresse.

Claude

Merci beaucoup d'avoir pris le temps de me répondre.

Ta proposition me va bien.

Il va juste me falloir le temps (que je n'ai pas ces jours-ci) de la bidouiller jusqu'à ce qu'elle fonctionne en situation dans Mon Grand Classeur Des Choses A Faire Au Boulot.

Merci encore.

Rechercher des sujets similaires à "macro trier plages nommees"