OVH Cloud OVH Cloud

Recherche à résultats multiples

4 réponses
Avatar
Eric SIBERT
Bonjour,

Le problème :
Sur une page, j'ai une liste de noms/prénoms sur deux colonnes.
Sur une seconde page, je veux que quand je saisis un nom dans une case
donnée, ça me mette à côté en colonne la liste des prénoms ayant ce nom
en commun.

Je recherche une solution par une formule. S'il n'y avait qu'un résultat
possible, j'utiliserais la fonction RECHERCHE. Mais comme il y a
plusieurs résultats possibles et que je les veux tous ...

Si on peut éviter un script VBA.

Des idées?
--
Eric SIBERT
http://www.ericsibert.com

4 réponses

Avatar
Philippe.R
Bonsoir Eric,
Un truc qui pourrait fonctionner pour le cas de homonymes :
Soit en G3 le nom, en H3 la formule :
=SI(ESTERREUR(INDEX(prenoms;EQUIV(G$3;noms;0)));"";INDEX(prenoms;EQUIV(G$3;noms;0)))
et en H4 celle ci
=SI(ESTERREUR(INDEX(prenoms;EQUIV(G$3;noms;1)));"";INDEX(prenoms;EQUIV(G$3;noms;1)))
ceci dit histoire d'amorcer l'ombre du début d'une piste.
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002

"Eric SIBERT" a écrit dans le message de
news:3fba784f$0$2791$
Bonjour,

Le problème :
Sur une page, j'ai une liste de noms/prénoms sur deux colonnes.
Sur une seconde page, je veux que quand je saisis un nom dans une case
donnée, ça me mette à côté en colonne la liste des prénoms ayant ce nom
en commun.

Je recherche une solution par une formule. S'il n'y avait qu'un résultat
possible, j'utiliserais la fonction RECHERCHE. Mais comme il y a
plusieurs résultats possibles et que je les veux tous ...

Si on peut éviter un script VBA.

Des idées?
--
Eric SIBERT
http://www.ericsibert.com



Avatar
Eric SIBERT
Je crois qu'une macro ira plus vite :

Dim I, Nb_Piece As Integer
Nb_Piece = 0
For I = 3 To 1000
If Worksheets(1).Cells(I, "D") = Worksheets(4).Cells(3, 1) Then
Nb_Piece = Nb_Piece + 1
Worksheets(4).Cells(Nb_Piece + 2, 2) =
Worksheets(1).Cells(I, "C")
End If
Next

Plus que quelques améliorations à faire comme l'effacement des résultats
des précédentes recherches et faire en sorte que la boucle s'arrête de
balayer quand il n'y a plus que des cellules vides.

--
Eric SIBERT
http://www.ericsibert.com
Avatar
AV
Bcp plus rapide qu'une boucle, un filtre pourrait très bien convenir à ta
demande :
Avec en "Feuil1" :
- la plage des noms en A2:Ax (étiquette en A1) et plage nommée "Noms"
- la plage des prénoms en B2:Bx (étiquette en B1) et plage nommée "Prénoms"
Ces 2 plages pourraient être avantageusement nommées de façon dynamique à l'aide
de la fonction DECALER

Pour qu'une saisie d'un nom en A1 de "Feuil2" renvoie, en colonnes (B1; C1.F1),
tous les prénoms correspondants aux noms :
Dans le module de "Feuil2" :
Private Sub Worksheet_Change(ByVal zz As Range)
If zz.Address <> "$A$1" Then Exit Sub
Application.ScreenUpdating = False
'efface précédents
[B1:IV1].Clear
'teste existence nom saisi
If [isnumber(Match(A1, Noms, 0))] = False Then Exit Sub
'filtrage
Sheets("Feuil1").[A:A].AutoFilter Field:=1, Criteria1:=[zz]
'copie/colle
[Prénoms].SpecialCells(xlCellTypeVisible).Copy
Sheets("Feuil2").[B1].PasteSpecial Transpose:=True
Sheets("Feuil1").[A1].AutoFilter
[A1].Select
End Sub

AV
Avatar
Eric SIBERT
La vitesse n'est pas un critère important, ayant relativement peu de
données. Mais je vais quand même essayer de comprendre ta solution.

Merci


Eric