Obtenir 1 liste ordre alphab. à partir de 2 listes différentes
Résolu/Fermé
soda127
Messages postés
2
Date d'inscription
lundi 24 décembre 2012
Statut
Membre
Dernière intervention
25 décembre 2012
-
24 déc. 2012 à 18:20
soda127 Messages postés 2 Date d'inscription lundi 24 décembre 2012 Statut Membre Dernière intervention 25 décembre 2012 - 25 déc. 2012 à 21:09
soda127 Messages postés 2 Date d'inscription lundi 24 décembre 2012 Statut Membre Dernière intervention 25 décembre 2012 - 25 déc. 2012 à 21:09
A voir également:
- Obtenir 1 liste ordre alphab. à partir de 2 listes différentes
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste de diffusion whatsapp - Guide
- Word numéro de page 1/2 - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms - Forum LibreOffice / OpenOffice
6 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 777
Modifié par Patrice33740 le 24/12/2012 à 18:49
Modifié par Patrice33740 le 24/12/2012 à 18:49
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
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.
Merci quand même.
Raymond PENTIER
Messages postés
58461
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
30 mai 2024
17 121
24 déc. 2012 à 23:51
24 déc. 2012 à 23:51
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
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 777
25 déc. 2012 à 11:15
25 déc. 2012 à 11:15
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.
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.
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 777
25 déc. 2012 à 12:10
25 déc. 2012 à 12:10
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eriiic
Messages postés
24575
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 mai 2024
7 220
25 déc. 2012 à 15:18
25 déc. 2012 à 15:18
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
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
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
soda127
Messages postés
2
Date d'inscription
lundi 24 décembre 2012
Statut
Membre
Dernière intervention
25 décembre 2012
25 déc. 2012 à 21:09
25 déc. 2012 à 21:09
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
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