RECHERCHEV (repérer une suite de caractères)
Résolu
identifiant-comment
Messages postés
351
Statut
Membre
-
identifiant-comment Messages postés 351 Statut Membre -
identifiant-comment Messages postés 351 Statut Membre -
Bonjour,
Je souhaite appliquer une fonction RECHERCHEV à une plage de cellules : au sein de cette plage, ma formule doit permettre de repérer une suite de caractères au sein des cellules, et non le contenu exhaustif des cellules.
Je vous joins la formule telle qu'elle existe actuellement :
=SI(ESTERREUR(GAUCHE(RECHERCHEV(A4;'$F$19:$AE$868;6;FAUX);3));0;GAUCHE(RECHERCHEV(A4;$F$19:$AE$868;6;FAUX);3))
Elle permet pour l'instant de renvoyer les trois premiers caractères de la sixième colonne de la matrice lorsqu'elle trouve dans la même ligne le contenu de la cellule A4.
Si elle ne le trouve pas, elle renvoie 0.
Or, le contenu de la cellule A4 est une suite de caractères qui peut se trouver plusieurs fois dans une même cellules de la plage concernée : en l'état actuel des choses, ma formule de repère pas ces occurrences et renvoie 0.
Y a-t'il des caractères, comme * par exemple qui pourraient m'aider ?
Est-ce que je peux réutiliser la fonction GAUCHE au sein de la fonction RECHERCHEV ? (ce ne serait cependant pas une solution optimum, car à terme toutes les occurrences doivent être relevées)
N'hésitez pas à me demander plus d'explications si je ne suis pas assez claire.
Merci d'avance pour votre aide !
Je souhaite appliquer une fonction RECHERCHEV à une plage de cellules : au sein de cette plage, ma formule doit permettre de repérer une suite de caractères au sein des cellules, et non le contenu exhaustif des cellules.
Je vous joins la formule telle qu'elle existe actuellement :
=SI(ESTERREUR(GAUCHE(RECHERCHEV(A4;'$F$19:$AE$868;6;FAUX);3));0;GAUCHE(RECHERCHEV(A4;$F$19:$AE$868;6;FAUX);3))
Elle permet pour l'instant de renvoyer les trois premiers caractères de la sixième colonne de la matrice lorsqu'elle trouve dans la même ligne le contenu de la cellule A4.
Si elle ne le trouve pas, elle renvoie 0.
Or, le contenu de la cellule A4 est une suite de caractères qui peut se trouver plusieurs fois dans une même cellules de la plage concernée : en l'état actuel des choses, ma formule de repère pas ces occurrences et renvoie 0.
Y a-t'il des caractères, comme * par exemple qui pourraient m'aider ?
Est-ce que je peux réutiliser la fonction GAUCHE au sein de la fonction RECHERCHEV ? (ce ne serait cependant pas une solution optimum, car à terme toutes les occurrences doivent être relevées)
N'hésitez pas à me demander plus d'explications si je ne suis pas assez claire.
Merci d'avance pour votre aide !
A voir également:
- Recherchev chaine de caractère
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Caractere vide - Guide
- Chaine tnt gratuite sur mobile - Guide
38 réponses
Bonjour,
pour moi www.cijoint.fr fonctionne, sinon tu as aussi www.cjoint.com
ne pas oublier de coller le lien ici
eric
pour moi www.cijoint.fr fonctionne, sinon tu as aussi www.cjoint.com
ne pas oublier de coller le lien ici
eric
essaie en B3 :
=INDEX([Tableau1.xls]GGG!$A$1:$A$32;MAX(NON(ESTERREUR(CHERCHE(A4;[Tableau1.xls]GGG!$D$19:$D$32)))*LIGNE($D$19:$D$32)))
formule matricielle à valider par shift+ctrl+entrée, si ok s'entoure de { }
Attention il y a un piège, bien lire $A$1:$A$32 dans le 1er paramètre et ça doit rester $A$1:
S'il y a plusieurs réponses c'est la dernière qui est ramenée pour simplifier la formule
=INDEX([Tableau1.xls]GGG!$A$1:$A$32;MAX(NON(ESTERREUR(CHERCHE(A4;[Tableau1.xls]GGG!$D$19:$D$32)))*LIGNE($D$19:$D$32)))
formule matricielle à valider par shift+ctrl+entrée, si ok s'entoure de { }
Attention il y a un piège, bien lire $A$1:$A$32 dans le 1er paramètre et ça doit rester $A$1:
S'il y a plusieurs réponses c'est la dernière qui est ramenée pour simplifier la formule
Allons-y, tu as mangé léger j'espère...
Le but est de trouver le n° de ligne où est ta donnée pour ramener ta valeur avec index(A1:A32,n°ligne)
(au passage voilà l'explication du A1)
Pour chercher une chaine dans une autre c'est cherche().
Si tu saisis =CHERCHE($A4;[Tableau1.xls]GGG!$D$19:$D$32) dans une cellule tu obtiens #valeur!.
Si tu met ton curseur dans la zone d'édition de la formule tu t'apercois en faisant F9 que la vraie réponse est une matrice des réponses de cherche() sur la plage $D$19:$D$32 soit {1;#VALEUR!;#VALEUR!;...;#VALEUR!}
Retiens bien F9, c'est très pratique pour les formules complexes. Tu sélectionnes la partie de la formule qui t'interesse et avec F9 tu vois si ça te ramène bien ce que tu attends.
Il faut se débarrasser des valeurs d'erreur qui remontent toujours d'où :
NON(ESTERREUR({1;#VALEUR!;#VALEUR!;...;#VALEUR!})) => {VRAI;FAUX;FAUX;...;FAUX}
qu'on multiplie par le n° ligne avec *LIGNE($D$19:$D$32) ce qui donne :
{VRAI;FAUX;FAUX;...;FAUX} * {19;20;...;32} => {19;0;0;...;0} car VRAI=1 et FAUX=0
On y est, les valeurs qui subsistent sont les n° de ligne où la chaine était présente, sur les autres on a 0.
Pour n'avoir plus qu'une valeur > 0 si elle existe au lieu d'une matrice on utilise
MAX({19;0;0;...;0}) => 19
C'est pour ça qu'on a le dernier n° de ligne où a été trouvé la valeur. Ca rallongerait la formule de ramener la plus petite valeur >0
Il ne reste plus qu'a ramener A19 avec index(A1:A32,19)
That's good ?
Je te laisse trouver avec F9 ou 'evaluation de formule' pourquoi le test marche ;-)
Le but est de trouver le n° de ligne où est ta donnée pour ramener ta valeur avec index(A1:A32,n°ligne)
(au passage voilà l'explication du A1)
Pour chercher une chaine dans une autre c'est cherche().
Si tu saisis =CHERCHE($A4;[Tableau1.xls]GGG!$D$19:$D$32) dans une cellule tu obtiens #valeur!.
Si tu met ton curseur dans la zone d'édition de la formule tu t'apercois en faisant F9 que la vraie réponse est une matrice des réponses de cherche() sur la plage $D$19:$D$32 soit {1;#VALEUR!;#VALEUR!;...;#VALEUR!}
Retiens bien F9, c'est très pratique pour les formules complexes. Tu sélectionnes la partie de la formule qui t'interesse et avec F9 tu vois si ça te ramène bien ce que tu attends.
Il faut se débarrasser des valeurs d'erreur qui remontent toujours d'où :
NON(ESTERREUR({1;#VALEUR!;#VALEUR!;...;#VALEUR!})) => {VRAI;FAUX;FAUX;...;FAUX}
qu'on multiplie par le n° ligne avec *LIGNE($D$19:$D$32) ce qui donne :
{VRAI;FAUX;FAUX;...;FAUX} * {19;20;...;32} => {19;0;0;...;0} car VRAI=1 et FAUX=0
On y est, les valeurs qui subsistent sont les n° de ligne où la chaine était présente, sur les autres on a 0.
Pour n'avoir plus qu'une valeur > 0 si elle existe au lieu d'une matrice on utilise
MAX({19;0;0;...;0}) => 19
C'est pour ça qu'on a le dernier n° de ligne où a été trouvé la valeur. Ca rallongerait la formule de ramener la plus petite valeur >0
Il ne reste plus qu'a ramener A19 avec index(A1:A32,19)
That's good ?
Je te laisse trouver avec F9 ou 'evaluation de formule' pourquoi le test marche ;-)
bonjour,
tu me dis si c'est ce que tu veux
dans une colonne , on recherche une cellule contenant 1 ou plusieurs occurrences de la valeur contenue dans A4
par exemple A4="aaa"
dans la colonne on a en dexcendant 1/="dd 2/= "fgaa1é" 3/ ="ppaaaffaaa" 4/= "a3a4a5"
c'est gagné pour le cas n°3 ?
tu me dis si c'est ce que tu veux
dans une colonne , on recherche une cellule contenant 1 ou plusieurs occurrences de la valeur contenue dans A4
par exemple A4="aaa"
dans la colonne on a en dexcendant 1/="dd 2/= "fgaa1é" 3/ ="ppaaaffaaa" 4/= "a3a4a5"
c'est gagné pour le cas n°3 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
C'est ça !
Pour être plus précise, la cellule A4 comprend un identifiant (ex: RG-DOV-DOU1) et dans la colonne de recherche, les cellules comprennent chacune un ou plusieurs identifiants. Par exemple :
RG-DOV-DOU1
RG-VRE-BUI6
RG-TRA-DOU5
J'ai besoin que la formule repère à chaque fois que l'une des cellules de la colonne comprend le bon identifiant.
C'est bien ce que tu avais compris ?
Pour être plus précise, la cellule A4 comprend un identifiant (ex: RG-DOV-DOU1) et dans la colonne de recherche, les cellules comprennent chacune un ou plusieurs identifiants. Par exemple :
RG-DOV-DOU1
RG-VRE-BUI6
RG-TRA-DOU5
J'ai besoin que la formule repère à chaque fois que l'une des cellules de la colonne comprend le bon identifiant.
C'est bien ce que tu avais compris ?
DONC,
Si dans ta colonne de recherche, il y a RG OU DOV OU DOU c'est OK et on cherche la valeur dans même ligne colonne 6 ?
Si dans ta colonne de recherche, il y a RG OU DOV OU DOU c'est OK et on cherche la valeur dans même ligne colonne 6 ?
Je ne suis pas très douée avec les ET et OU logiques, mais il me semble plutôt que ce que je cherche c'est l'identifiant RG ET DOV ET DOU ET 1 ?
Il faut noter aussi que les formats d'identifiants risquent de changer, ce qui risque de faire planter du même coup toutes les formules.
Mais bon, ça, je m'adapterai : une fois que j'aurais compris le truc, il ne restera plus qu'à reproduire et ça m'intéresse de voir à quoi tu penses. :)
Tout de même, il n'existe pas un truc comme en sql (mais je ne sais même plus quel signe c'est en sql) qui permet de chercher une suite de caractères, quels que soient ceux qui précèdent et ceux qui suivent ?
Il faut noter aussi que les formats d'identifiants risquent de changer, ce qui risque de faire planter du même coup toutes les formules.
Mais bon, ça, je m'adapterai : une fois que j'aurais compris le truc, il ne restera plus qu'à reproduire et ça m'intéresse de voir à quoi tu penses. :)
Tout de même, il n'existe pas un truc comme en sql (mais je ne sais même plus quel signe c'est en sql) qui permet de chercher une suite de caractères, quels que soient ceux qui précèdent et ceux qui suivent ?
Bonsoir tout le monde,
Il faudrait que tu sois plus précises.
Veux-tu savoir seulement s'il est présent ?
Veux-tu savoir sa position (cellule) ?
Veux-tu savoir toutes les positions s'il est présent dans plusieurs cellules ?
Si c'est le 3ème cas ça serait plus simple d'ajouter une colonne E et mettre en E19 :
=EQUIV(FAUX;ESTERREUR(CHERCHE($A$4;F19:AE19));0)
(formule matricielle à valider avec shift+ctrl+entrée)
Si A4 est absent de la ligne tu as #N/A.
S'il est présent tu as le n° de colonne
Il faudrait que tu sois plus précises.
Veux-tu savoir seulement s'il est présent ?
Veux-tu savoir sa position (cellule) ?
Veux-tu savoir toutes les positions s'il est présent dans plusieurs cellules ?
Si c'est le 3ème cas ça serait plus simple d'ajouter une colonne E et mettre en E19 :
=EQUIV(FAUX;ESTERREUR(CHERCHE($A$4;F19:AE19));0)
(formule matricielle à valider avec shift+ctrl+entrée)
Si A4 est absent de la ligne tu as #N/A.
S'il est présent tu as le n° de colonne
Bonsoir Eriiiic !
Je vais essayer d'être plus précise, mais je dois avouer que j'ai tellement cherché que cela commence à s'embrouiller dans ma tête.
Ce que je veux c'est qu'une formule dans la colonne B(tableau2) dme renvoie des informations en fonction de l'identifiant présent en colonne A(tableau2) : ex. RG-DOV-DOU1.
Or il se trouve que la colonne de mon tableau 1 (la matrice de ma formule) comprend plusieurs de ces identifiants par cellule.
Est-ce que je suis plus claire comme ça ?
Merci d'avance !
Je vais essayer d'être plus précise, mais je dois avouer que j'ai tellement cherché que cela commence à s'embrouiller dans ma tête.
Ce que je veux c'est qu'une formule dans la colonne B(tableau2) dme renvoie des informations en fonction de l'identifiant présent en colonne A(tableau2) : ex. RG-DOV-DOU1.
Or il se trouve que la colonne de mon tableau 1 (la matrice de ma formule) comprend plusieurs de ces identifiants par cellule.
Est-ce que je suis plus claire comme ça ?
Merci d'avance !
Est-ce que je suis plus claire comme ça ?
non
me renvoie des informations tu trouves ça précis toi ?
Dépose un fichier exemple sur cijoint.fr et colle ici le lien fourni.
Et n'aies pas peur de mettre le maximum d'infos
eric
non
me renvoie des informations tu trouves ça précis toi ?
Dépose un fichier exemple sur cijoint.fr et colle ici le lien fourni.
Et n'aies pas peur de mettre le maximum d'infos
eric
Brouf, t'as raison, ce que j'ai écris ne veut rien dire. Je devrais pas m'y remettre après avoir quitté le boulot :)
Je regarde ça demain matin et j'essaie de t'envoyer le fichier.
Je regarde ça demain matin et j'essaie de t'envoyer le fichier.
Re...
On va essayer de faire ça de façon basique.
Je veux que ma formule dise :
1. récupère la valeur dans la colonne Tableau1A
2. recherche cette valeur dans la colonne Tableau2D
3. lorsque tu trouves cette valeur dans la colonne Tableau2D, récupère le trigramme correspondant dans la colonne Tableau2A
4. affiche ce trigramme dans la colonne qui contient la formule (Tableau2B)
Le problème est que, si la colonne Tableau1A ne contient qu'une valeur (de type identifiant RG-DOV-DOU1) par cellule, la colonne Tableau2D, elle peut en contenir plusieurs.
Exemple de contenu d'un cellule de la colonne Tableau2D :
RG-DOV-DOU1
RG-VRE-BUI6
RG-TRA-DOU5
J'ai donc besoin que, dans l'étape 2, la formule soit capable de dire plus précisément : recherche dans la colonne Tableau2D les cellules qui contiennent entre autres cet identifiant.
Je ne peux malheureusement pas t'envoyer les tableaux tels quels, clause de confidentialité oblige. Je te fais parvenir des modèles simplifiés.
Je suis de moins en moins sûre de pouvoir y parvenir avec des formules Excel. S'il faut passer par le VBA, ma foi, je ferai ce qu'il faut :)
On va essayer de faire ça de façon basique.
Je veux que ma formule dise :
1. récupère la valeur dans la colonne Tableau1A
2. recherche cette valeur dans la colonne Tableau2D
3. lorsque tu trouves cette valeur dans la colonne Tableau2D, récupère le trigramme correspondant dans la colonne Tableau2A
4. affiche ce trigramme dans la colonne qui contient la formule (Tableau2B)
Le problème est que, si la colonne Tableau1A ne contient qu'une valeur (de type identifiant RG-DOV-DOU1) par cellule, la colonne Tableau2D, elle peut en contenir plusieurs.
Exemple de contenu d'un cellule de la colonne Tableau2D :
RG-DOV-DOU1
RG-VRE-BUI6
RG-TRA-DOU5
J'ai donc besoin que, dans l'étape 2, la formule soit capable de dire plus précisément : recherche dans la colonne Tableau2D les cellules qui contiennent entre autres cet identifiant.
Je ne peux malheureusement pas t'envoyer les tableaux tels quels, clause de confidentialité oblige. Je te fais parvenir des modèles simplifiés.
Je suis de moins en moins sûre de pouvoir y parvenir avec des formules Excel. S'il faut passer par le VBA, ma foi, je ferai ce qu'il faut :)
C'est fait, voici les liens !
http://www.cijoint.fr/cjlink.php?file=cj200904/cijqVT7V8J.xls
http://www.cijoint.fr/cjlink.php?file=cj200904/cijMzGkXnG.xls
http://www.cijoint.fr/cjlink.php?file=cj200904/cijqVT7V8J.xls
http://www.cijoint.fr/cjlink.php?file=cj200904/cijMzGkXnG.xls
J'y crois pas, j'ai fait ça ? Mais arrêtez moi !!
...Tu as raison, c'est bien ça, faut inverser les noms des fichiers.
...Tu as raison, c'est bien ça, faut inverser les noms des fichiers.
Mon vieux, j'ai pas encore compris comment t'as fait, et pour l'instant je ne suis pas encore sûre que ce soit exactement ce que je cherche, mais j'ai déjà réussi à le faire fonctionner dans une des cellules de l'un des fichiers que je t'avais envoyés et rien que pour ça t'es un génie.
Je te fais signe dès que j'ai fini de voir comment je peux déployer ta formule.
Merci !
Je te fais signe dès que j'ai fini de voir comment je peux déployer ta formule.
Merci !
Pour comprendre la formule fais 'outils / audit de formules / evaluation de formule' et clique sur 'evaluer'
Elle s'execute pas à pas et te souligne la partie qui sera évaluée au prochain pas
Elle s'execute pas à pas et te souligne la partie qui sera évaluée au prochain pas
Putain, ça marche. You're my hero.
Mais c'est frustrant, ça marche, mais je ne comprends pas comment. Tu veux bien m'expliquer ce que fait ta formule exactement, stp ?
J'ai fait quelques tests : c'est la dernière valeur trouvée (dans l'ordre des lignes auxquelles les cellules appartiennent) qui est retenue, c'est ça ?
Et pourquoi $A$1?
Il ne me reste plus qu'à faire apparaître un message d'erreur quand aucune valeur n'est trouvée, et je suis ok !
Merci, sincèrement, tu m'as rendu un grand service.
Mais c'est frustrant, ça marche, mais je ne comprends pas comment. Tu veux bien m'expliquer ce que fait ta formule exactement, stp ?
J'ai fait quelques tests : c'est la dernière valeur trouvée (dans l'ordre des lignes auxquelles les cellules appartiennent) qui est retenue, c'est ça ?
Et pourquoi $A$1?
Il ne me reste plus qu'à faire apparaître un message d'erreur quand aucune valeur n'est trouvée, et je suis ok !
Merci, sincèrement, tu m'as rendu un grand service.