chercher une référence dans une chaine de caractères (suites)

Le
Orsu
Bonsoir le forum

Je reviens sur une question précédemment posée à laquelle je pensais avoir
eu une réponse (merci à Lsteph en particulier) mais qui à l'usage se
révèle en partie inadaptée.

Je rappelle rapidement le sujet : dans un tableau, j'ai une colonne
contenant des valeurs (chaines de caractères) ; pour chaque cellule de cette
colonne , j'ai besoin de tester si une partie du contenu de la cellule a une
correspondance avec une liste de noms de référence et, dans l'affirmative,
de renvoyer dans une (nouvelle) cellule du tableau, le nom de référence
trouvé.

La solution proposée par LSteph était la suivante :
=index(Références!$A$2:$A$30;EQUIV(GAUCHE(B2;CHERCHE("
";B2;1)-1);Références!$A$2:$A$30;0))

Elle marche. sous réserve que la recherche se fasse toujours à partir du
même point de la chaine de caractère concernée (c'était le cas dans le
classeur que j'avais mis sur cjoint pour illustrer la question) .


Dans la "vraie vie", ce n'est pas le cas : selon la cellule concernée, le
nom de référence cherché peut se trouver positionné différemment dans la
chaîne de caractère.

Bon, j'arrête car je ne suis pas sur que plus de détails rendront les choses
plus claires

Merci d'avance aux pros des soluces !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Orsu
Le #17268081
Pour illustrer la question ci-joint un classeur :
http://cjoint.com/?jswsEKagZE

"Orsu" a écrit :

Bonsoir le forum

Je reviens sur une question précédemment posée à laquelle je pensais avoir
eu une réponse (merci à Lsteph en particulier) ...mais qui à l'usage se
révèle en partie inadaptée.

Je rappelle rapidement le sujet : dans un tableau, j'ai une colonne
contenant des valeurs (chaines de caractères) ; pour chaque cellule de cette
colonne , j'ai besoin de tester si une partie du contenu de la cellule a une
correspondance avec une liste de noms de référence et, dans l'affirmative,
de renvoyer dans une (nouvelle) cellule du tableau, le nom de référence
trouvé.

La solution proposée par LSteph était la suivante :
=index(Références!$A$2:$A$30;EQUIV(GAUCHE(B2;CHERCHE("
";B2;1)-1);Références!$A$2:$A$30;0))

Elle marche.... sous réserve que la recherche se fasse toujours à partir du
même point de la chaine de caractère concernée (c'était le cas dans le
classeur que j'avais mis sur cjoint pour illustrer la question) .


Dans la "vraie vie", ce n'est pas le cas : selon la cellule concernée, le
nom de référence cherché peut se trouver positionné différemment dans la
chaîne de caractère.

Bon, j'arrête car je ne suis pas sur que plus de détails rendront les choses
plus claires............

Merci d'avance aux pros des soluces !



Jacky
Le #17268271
Bonsoir,
Une petite fonction perso et la plage des noms nommée "RefNom"
'--------------
Function ChercheNom(Adresse As Range) As String
For Each c In [RefNom]
If Adresse Like "*" & c & "*" Then
ChercheNom = c
Exit Function
End If
Next
End Function
'----------------
En retour ton exemple modifié
http://cjoint.com/?jswRe8iHsZ

--
Salutations
JJ


"Orsu"
Pour illustrer la question ci-joint un classeur :
http://cjoint.com/?jswsEKagZE

"Orsu" a écrit :

Bonsoir le forum

Je reviens sur une question précédemment posée à laquelle je pensais
avoir
eu une réponse (merci à Lsteph en particulier) ...mais qui à l'usage se
révèle en partie inadaptée.

Je rappelle rapidement le sujet : dans un tableau, j'ai une colonne
contenant des valeurs (chaines de caractères) ; pour chaque cellule de
cette
colonne , j'ai besoin de tester si une partie du contenu de la cellule a
une
correspondance avec une liste de noms de référence et, dans
l'affirmative,
de renvoyer dans une (nouvelle) cellule du tableau, le nom de référence
trouvé.

La solution proposée par LSteph était la suivante :
=index(Références!$A$2:$A$30;EQUIV(GAUCHE(B2;CHERCHE("
";B2;1)-1);Références!$A$2:$A$30;0))

Elle marche.... sous réserve que la recherche se fasse toujours à partir
du
même point de la chaine de caractère concernée (c'était le cas dans le
classeur que j'avais mis sur cjoint pour illustrer la question) .


Dans la "vraie vie", ce n'est pas le cas : selon la cellule concernée, le
nom de référence cherché peut se trouver positionné différemment dans la
chaîne de caractère.

Bon, j'arrête car je ne suis pas sur que plus de détails rendront les
choses
plus claires............

Merci d'avance aux pros des soluces !





LSteph
Le #17268441
Bonsoir,

ceci peut-être:

=SI(NB.SI(Références!$A$2:$A$30;"*"&GAUCHE($B2;CHERCHE("
";$B2;1)-1)&"*");GAUCHE($B2;CHERCHE(" ";$B2;1)-1))

--
lSteph

Orsu a écrit :
Bonsoir le forum

Je reviens sur une question précédemment posée à laquelle je pensais avoir
eu une réponse (merci à Lsteph en particulier) ...mais qui à l'usage se
révèle en partie inadaptée.

Je rappelle rapidement le sujet : dans un tableau, j'ai une colonne
contenant des valeurs (chaines de caractères) ; pour chaque cellule de cette
colonne , j'ai besoin de tester si une partie du contenu de la cellule a une
correspondance avec une liste de noms de référence et, dans l'affirmative,
de renvoyer dans une (nouvelle) cellule du tableau, le nom de référence
trouvé.

La solution proposée par LSteph était la suivante :
=index(Références!$A$2:$A$30;EQUIV(GAUCHE(B2;CHERCHE("
";B2;1)-1);Références!$A$2:$A$30;0))

Elle marche.... sous réserve que la recherche se fasse toujours à partir du
même point de la chaine de caractère concernée (c'était le cas dans le
classeur que j'avais mis sur cjoint pour illustrer la question) .


Dans la "vraie vie", ce n'est pas le cas : selon la cellule concernée, le
nom de référence cherché peut se trouver positionné différemment dans la
chaîne de caractère.

Bon, j'arrête car je ne suis pas sur que plus de détails rendront les choses
plus claires............

Merci d'avance aux pros des soluces !



Jacky
Le #17268681
Bonsoir Stéphane

Tu as quelque chose contre "Valentine" :-((
Ligne 33 ref ligne 29
;o)))
--
Salutations
JJ


"LSteph"
Bonsoir,

ceci peut-être:

=SI(NB.SI(Références!$A$2:$A$30;"*"&GAUCHE($B2;CHERCHE("
";$B2;1)-1)&"*");GAUCHE($B2;CHERCHE(" ";$B2;1)-1))

--
lSteph


LSteph
Le #17268751
Bonsoir Jacky



c'est Valentin et je l'obtiens bien!?


Valentin a bien une correspondance dans la chaine Valentine

C'est ce que pose la question

mais je suis d'accord avec ta remarque

Il faudrait mieux préciser le but et on va probablement envisager une
autre solution si cela peut se traiter, car pour l'instant on peut se
demander la finalité même s'il ne fait nul doute qu'il y en ait une.


Comment arrive laliste des prénoms en feuile2 et même question pour le
tableau en feuille 1
objectif du rapprochement?

Cordialement.

--
lSteph

Jacky a écrit :
Bonsoir Stéphane

Tu as quelque chose contre "Valentine" :-((
Ligne 33 ref ligne 29
;o)))


LSteph
Le #17269591
Bonjour Jacky,

Oui!forcément avec VBA , c'est facile de contourner le pb,
au départ mon idée était de répondre par une formule,
selon le premier fil.

Amitiés.

--
lSteph



Jacky a écrit :
Bonsoir,
Une petite fonction perso et la plage des noms nommée "RefNom"
'--------------
Function ChercheNom(Adresse As Range) As String
For Each c In [RefNom]
If Adresse Like "*" & c & "*" Then
ChercheNom = c
Exit Function
End If
Next
End Function
'----------------
En retour ton exemple modifié
http://cjoint.com/?jswRe8iHsZ



AV
Le #17269871
Pour répondre à ta question
"...je cherchais ici une formule me permettant de tester si il existe dans
chaque cellule de la colonne B une chaine de caractère ayant une équivalence
dans le tableau "Références" et, dans l'affirmative, de renvoyer cette référence
La difficulté est que cette chaine de caractères n'est pas toujours positionnée
au même endroit dans la chaine de caractères.........."

Avec ton classeur et la plage de référence nommée "Liste" :
En G2 et recopie --> G34
Matricielle (valider par ctrl+maj+entrée :)

=INDEX(Liste;EQUIV(VRAI;ESTNUM(TROUVE(Liste;F2));0))

pour gérer une éventuelle erreur (#N/A), soit une MFC soit (matricielle) :

=SI(SOMME(1*ESTNUM(TROUVE(Liste;F2)))>0;INDEX(Liste;EQUIV(VRAI;ESTNUM(TROUVE(Liste;F2));0));"")

AV
LSteph
Le #17269971
Bonjour AV,

(Toujours au top!)

Je me disais bien que c'était possible avec une formule!


Salutations.

--
lSteph




AV a écrit :
Pour répondre à ta question
"...je cherchais ici une formule me permettant de tester si il existe dans
chaque cellule de la colonne B une chaine de caractère ayant une équivalence
dans le tableau "Références" et, dans l'affirmative, de renvoyer cette référence
La difficulté est que cette chaine de caractères n'est pas toujours positionnée
au même endroit dans la chaine de caractères.........."

Avec ton classeur et la plage de référence nommée "Liste" :
En G2 et recopie --> G34
Matricielle (valider par ctrl+maj+entrée :)

=INDEX(Liste;EQUIV(VRAI;ESTNUM(TROUVE(Liste;F2));0))

pour gérer une éventuelle erreur (#N/A), soit une MFC soit (matricielle) :

=SI(SOMME(1*ESTNUM(TROUVE(Liste;F2)))>0;INDEX(Liste;EQUIV(VRAI;ESTNUM(TROUVE(Liste;F2));0));"")

AV




LSteph
Le #17269961
...
oupss :(

à y revenir après deux cafés c'était le contraire,

Valentine n'a pas de correspondance dans Valentin



Amicales salutations.

--
lSteph



Valentin a bien une correspondance dans la chaine Valentine



Jacky
Le #17270151
Re Lsteph ,AV
Quand je disais qu'il faut qu'il revienne, hein !

Tu vois que tu manques Alain, pourquoi tu nous boudes ?

--
Salutations
JJ


"AV"
Pour répondre à ta question
"...je cherchais ici une formule me permettant de tester si il existe dans
chaque cellule de la colonne B une chaine de caractère ayant une
équivalence dans le tableau "Références" et, dans l'affirmative, de
renvoyer cette référence
La difficulté est que cette chaine de caractères n'est pas toujours
positionnée au même endroit dans la chaine de caractères.........."

Avec ton classeur et la plage de référence nommée "Liste" :
En G2 et recopie --> G34
Matricielle (valider par ctrl+maj+entrée :)

=INDEX(Liste;EQUIV(VRAI;ESTNUM(TROUVE(Liste;F2));0))

pour gérer une éventuelle erreur (#N/A), soit une MFC soit (matricielle) :

=SI(SOMME(1*ESTNUM(TROUVE(Liste;F2)))>0;INDEX(Liste;EQUIV(VRAI;ESTNUM(TROUVE(Liste;F2));0));"")

AV



Publicité
Poster une réponse
Anonyme