Obtenir 1 liste ordre alphab. à partir de 2 listes différentes

[Résolu/Fermé]
Signaler
Messages postés
2
Date d'inscription
lundi 24 décembre 2012
Statut
Membre
Dernière intervention
25 décembre 2012
-
Messages postés
2
Date d'inscription
lundi 24 décembre 2012
Statut
Membre
Dernière intervention
25 décembre 2012
-
Bonjour à tous,
Voici mon souci : sur Excel 2007, à partir de 2 listes de noms et prénoms sur 2 colonnes chacune, j'aimerais obtenir une 3ème colonne reprenant tous les noms/prénoms par ordre alphabétique. Les deux listes initiales étant sur feuilles différentes. J'ai trouvé une formule matricielle sur le net [{=ListeTriée("liste1, liste2")}], mais cela ne marche que sur la feuille exemple du net et encore avec seulement 1 colonne par liste.
Voyez-vous comment m'en sortir ?
Je vous en remercie par avance

6 réponses

Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 703
Deux simples copier / coller devrait faire l'affaire pour mettre les deux listes à la suite l'une de l'autre sur une troisième feuille. Il n'y aura plus qu'a trier.

Patrice
Merci de cette réponse, mais je vois que je me suis mal exprimé. J'aimerais que lorsque j'ajoute un nom dans une des deux listes initiales, cela change automatiquement la liste finale. Voilà où est le problème.
Merci quand même.
Messages postés
54861
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
16 767
Pourquoi as-tu besoin de deux listes sur des feuilles distinctes ?
Bonjour Raymond
Je suis directeur d'école, j'ai des listes d'enfants par classe et je voudrais une liste globale d'école qui change automatiquement si les listes de classes changent. J'ai pris l'exemple de 2 listes pour simplifier. S'il y a une formule, après je l'adapterai au nombre de listes.
Joyeux Noël
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 703
Bonjour,

Dans ce cas il est bien plus simple d'utiliser une seule liste globale avec une colonne "Classe". Un filtre permettra d'avoir la liste de chaque classe.
Bonjour,
Je sais bien que cette solution est possible mais ce n'est pas ça que je recherche car tout mon système est basé sur les listes de classes. Merci quand même
Cordialement.
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 703
Re,

L'un n'empêche pas l'autre, c'est juste un concept de base de données : une seule base et plusieurs requêtes
Messages postés
24200
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
17 octobre 2021
6 933
Bonjour,

par respect des intervenants tu pourrais avoir la politesse de signaler avoir posté à nouveau dans un autre forum...
https://www.excel-downloads.com/threads/generer-une-liste-alphabetique-automatique-a-partir-de-2-listes.198238/

eric
Bonjour Eric,
Nouveau sur les forums, je suis désolé d'avoir négligé cet aspect des choses. Je ne savais pas. Si j'ai choqué quelqu'un, qu'il veuille m'en excuser. Je te remercie de m'avoir appris cette règle de base. J'en profite pour remercier encore ceux qui se sont penchés sur mon problème.
Cordialement
Messages postés
2
Date d'inscription
lundi 24 décembre 2012
Statut
Membre
Dernière intervention
25 décembre 2012

Bonjour à tous,
Suite à ma demande sur votre forum et sur un autre (sic, Eric !!!), voici la réponse obtenue pour mon problème
Noms de champ (par exemple)
noms =Feuil1!$A$2:$A$7;Feuil1!$A$10:$A$15;Feuil1!$A$19:$A$24
prénoms =Feuil1!$B$2:$B$7;Feuil1!$B$10:$B$15;Feuil1!$B$19:$B$24

Dans la colonne H3:H20, noter :{=ListeTriée(noms)}
Dans les cases G:G20, noter : =RechercheMZ(H3; noms; prénoms)
Par contre pour que ça marche, il faut créer un module (Alt+F11) puis Insertion/Module et Copier/Coller du code Suivant :

Code :
Function ListeTriée(champ)
Application.Volatile
Set mondico = CreateObject("Scripting.Dictionary")
n = 0
For i = 1 To champ.Areas.Count ' parcours des zones du champ multi-zones
n = n + champ.Areas(i).Count
For j = 1 To champ.Areas(i).Count ' parcours des éléments d'une zone
If champ.Areas(i)(j) <> "" And champ.Areas(i)(j) <> "." Then
x = champ.Areas(i)(j)
mondico.Item(x) = x ' ajout au dictionnaire (doublons éliminés)
End If
Next j
Next i
temp = mondico.items 'transfert dictionnaire dans une table temp()
Call Tri(temp, LBound(temp), UBound(temp)) ' tri optionnel
Dim d(): ReDim d(n) ' table pour retour
For i = LBound(temp) To UBound(temp): d(i) = temp(i): Next i
ListeTriée = Application.Transpose(d)
End Function

Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
tmp = a(g): a(g) = a(d): a(d) = tmp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub

Function RechercheMZ(valCherchée, champRech As Range, ChampRetour)
Application.Volatile
For i = 1 To champRech.Areas.Count
For j = 1 To champRech.Areas(i).Count
If valCherchée = champRech.Areas(i)(j) Then
RechercheMZ = ChampRetour.Areas(i)(j)
Exit Function
End If
Next j
Next i
RechercheMZ = "pas trouvé"
End Function

Merci à JB qui m'a trouvé la solution.
En espérant que cela pourra aider autant que cela m'a aidé.

Cordialement
Joyeux Noël
Soda127