Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

16 réponses
Avatar
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 !

10 réponses

1 2
Avatar
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 !



Avatar
Jacky
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" a écrit dans le message de news:

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 !





Avatar
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

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 !



Avatar
Jacky
Bonsoir Stéphane

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


"LSteph" a écrit dans le message de news:

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


Avatar
LSteph
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)))


Avatar
LSteph
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



Avatar
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
Avatar
LSteph
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




Avatar
LSteph
...
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



Avatar
Jacky
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" a écrit dans le message de news:

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



1 2