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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
A_S_rauphil@wanadoo.fr
Retirer A_S_ pour répondre.
XL97 / XL2002
"Eric SIBERT" <courrier@NOericSPAMsibert.com> a écrit dans le message de
news:3fba784f$0$2791$626a54ce@news.free.fr...
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
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
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
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.
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
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
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
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
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
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.