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
j'ai trouvééé !
S'il te reste deux secondes, ça m'intéresse toujours que tu me décortiques la formule...
(eh non, en fait il reste un bug :(. J'y retourne)
S'il te reste deux secondes, ça m'intéresse toujours que tu me décortiques la formule...
(eh non, en fait il reste un bug :(. J'y retourne)
Je veux bien t'expliquer mais avant rassure moi un peu...
Le trigramme de regroupement ce n'est pas systématiquement les caractères entre les 2 - hein ?
Le trigramme de regroupement ce n'est pas systématiquement les caractères entre les 2 - hein ?
:)
Non non, c'est plus compliqué que ça. Les identifiants peuvent parfaitement changer complètement d'un projet à l'autre et ne plus contenir le trigramme. Ceux-là ne s'affichent comme ça que pour le document modèle. Et comme le but c'est de faire un doc qui convienne à tous les projets...
En tout cas, une formule de type =GAUCHE(STXT(A4;4;NBCAR(A4));3) n'aurait pas suffit.
Je suis toujours en train de galérer sur le fait que lorsqu'aucune valeur n'est remontée, il y a "Recensement des cas de test pour le lot XX" qui s'affiche. C'est bizarre, avec une formule de type SI(ESTERREUR(formule);"message d'erreur";(formule)), je n'y arrive pas non plus.
J'ai même essayé de mettre le message d'erreur dans la cellule A1 de l'autre tableau pour voir. :)
Et j'ai modifié dans mon fichier le texte "Recensement des cas de test pour le lot XX", ça n'a rien changé à celui que me remonte ma formule !
Je suppose qu'il doit y avoir une histoire du genre que l'on ne peut pas imbriquer n'importe comment une formule matricielle ?
Non non, c'est plus compliqué que ça. Les identifiants peuvent parfaitement changer complètement d'un projet à l'autre et ne plus contenir le trigramme. Ceux-là ne s'affichent comme ça que pour le document modèle. Et comme le but c'est de faire un doc qui convienne à tous les projets...
En tout cas, une formule de type =GAUCHE(STXT(A4;4;NBCAR(A4));3) n'aurait pas suffit.
Je suis toujours en train de galérer sur le fait que lorsqu'aucune valeur n'est remontée, il y a "Recensement des cas de test pour le lot XX" qui s'affiche. C'est bizarre, avec une formule de type SI(ESTERREUR(formule);"message d'erreur";(formule)), je n'y arrive pas non plus.
J'ai même essayé de mettre le message d'erreur dans la cellule A1 de l'autre tableau pour voir. :)
Et j'ai modifié dans mon fichier le texte "Recensement des cas de test pour le lot XX", ça n'a rien changé à celui que me remonte ma formule !
Je suppose qu'il doit y avoir une histoire du genre que l'on ne peut pas imbriquer n'importe comment une formule matricielle ?
Chez moi j'ai 0 qui s'affiche si pas trouvé.
Pour simplifier ton test tu peux mettre :
=si(SOMME(NON(ESTERREUR(CHERCHE(A4;[Tableau1.xls]GGG!$D$19:$D$32)))*1);ta formule;"pas trouvé")
tjs en matriciel
L'explication après manger pour ménager le suspense ;-)
Pour simplifier ton test tu peux mettre :
=si(SOMME(NON(ESTERREUR(CHERCHE(A4;[Tableau1.xls]GGG!$D$19:$D$32)))*1);ta formule;"pas trouvé")
tjs en matriciel
L'explication après manger pour ménager le suspense ;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pffiou ! heureusement que j'ai mangé léger... Ca va me prendre l'aprem pour assimiler tout ça et j'aurais pas perdu ma journée !
Je mets ma question en Résolu et je te remercie !
Je mets ma question en Résolu et je te remercie !
Bonjour eriiic !
j'espère que tu auras ce message...
Il faut que je complique un peu la formule de l'autre jour.
Je ne dois plus remonter la dernière occurrence (MAX) mais celles qui correspondent à la plus grande valeur dans une tierce colonne.
Voici la formule telle qu'elle existe actuellement.
SI(SOMME(NON(ESTERREUR(CHERCHE(D12;MatFJ)))*1);INDEX(MatM;MAX(NON(ESTERREUR(CHERCHE(D12;MatFJ)))*LIGNE(MatFJ)));Params!$D$19
Crois-tu qu'il est possible de remplacer le MAX par un RECHERCHEV ?
Je ne vois pas très bien comment mettre ça en place...
j'espère que tu auras ce message...
Il faut que je complique un peu la formule de l'autre jour.
Je ne dois plus remonter la dernière occurrence (MAX) mais celles qui correspondent à la plus grande valeur dans une tierce colonne.
Voici la formule telle qu'elle existe actuellement.
SI(SOMME(NON(ESTERREUR(CHERCHE(D12;MatFJ)))*1);INDEX(MatM;MAX(NON(ESTERREUR(CHERCHE(D12;MatFJ)))*LIGNE(MatFJ)));Params!$D$19
Crois-tu qu'il est possible de remplacer le MAX par un RECHERCHEV ?
Je ne vois pas très bien comment mettre ça en place...
Bonjour,
Ben oui, soyons fou, compliquons un peu...
Je n'ai pas repris tes plages nommées car n'ayant pas le fichier je risquais d'ajouter des erreurs et de chercher pour rien.
Et je t'avoue ne pas avoir eu le courage de faire des tests exhaustifs, je te laisse le soin de me dire si c'est ok ;-)
Et une tite leçon de morale au passage : mefie toi des formules un peu complexes, très difficiles à maintenir en cas d'évolution 6 mois plus tard...
eric
Ben oui, soyons fou, compliquons un peu...
=INDEX([Tableau1.xls]GGG!$A$1:$A$32;INDEX((NON(ESTERREUR(CHERCHE(A4;[Tableau1.xls]GGG!$D$19:$D$32)))*LIGNE($D$19:$D$32));EQUIV(MAX([Tableau1.xls]GGG!$E$19:$E$32);[Tableau1.xls]GGG!$E$19:$E$32)))
Je n'ai pas repris tes plages nommées car n'ayant pas le fichier je risquais d'ajouter des erreurs et de chercher pour rien.
Et je t'avoue ne pas avoir eu le courage de faire des tests exhaustifs, je te laisse le soin de me dire si c'est ok ;-)
Et une tite leçon de morale au passage : mefie toi des formules un peu complexes, très difficiles à maintenir en cas d'évolution 6 mois plus tard...
eric
Merci pour ta réponse eriiic...
Et tu as raison, c'est galère à mettre en place.
D'ailleurs je tombe toujours sur un résultat à "pas de cluster associé" (je ne sais toujours pas d'où il sort celui-là...
Je retente avec en mêlant la formule avec ta solution du post 23.
Et tu as raison, c'est galère à mettre en place.
D'ailleurs je tombe toujours sur un résultat à "pas de cluster associé" (je ne sais toujours pas d'où il sort celui-là...
Je retente avec en mêlant la formule avec ta solution du post 23.
C'est quoi exactement la plage que tu mets dans EQUIV ? La plage tierce dont je cherche la plus grande valeur, c'est ça ?
Re...
Cette formule, soit :
- elle me donne toujours le même résultat quelle que soit la cellule que j'appelle
- elle me renvoie un résultat à 0
- elle m'indique "pas de cluster associé"...
Et j'arrive même pas à établir de règle pour voir ce qui ne va pas.
Le plus beau c'est que la même formule, à deux emplacements différents donne deux résultat différents.
Je nage un peu là...
Cette formule, soit :
- elle me donne toujours le même résultat quelle que soit la cellule que j'appelle
- elle me renvoie un résultat à 0
- elle m'indique "pas de cluster associé"...
Et j'arrive même pas à établir de règle pour voir ce qui ne va pas.
Le plus beau c'est que la même formule, à deux emplacements différents donne deux résultat différents.
Je nage un peu là...
Re,
oui effectivement, si je met plus de valeurs en colonne E (là où on cherche le maxi) ça ne marche plus.
Je regarderai d'un peu plus près plus tard.
C'est le genre de pb qui mériterait une fonction personnalisée pour simplifier...
A+
eric
oui effectivement, si je met plus de valeurs en colonne E (là où on cherche le maxi) ça ne marche plus.
Je regarderai d'un peu plus près plus tard.
C'est le genre de pb qui mériterait une fonction personnalisée pour simplifier...
A+
eric
Re re,
A mettre dans un module :
et la formule devient :
=Trigramme(A4;[Tableau1.xls]GGG!$D$19:$D$21;1;-3)
Function Trigramme(ID, PlageReglesGest, OffsetPoids, OffsetTrigramme)
ID : l'ID recherché
PlageReglesGest : la plage des N° Règle de gestion générale
OffsetPoids : l'offset en colonnes où est le poids par rapport à la colonne PlageReglesGest
OffsetTrigramme : l'offset en colonnes où est le trigramme par rapport à la colonne PlageReglesGest
Je ne fais aucun contrôle sur les parametres saisis. PlageReglesGest doit faire 1 colonne de large bien sûr.
Avec 'inserer / fonctions / fonctions personnalisées' tu peux désigner les plages et cellules à la souris
Comme d'hab je te laisse tester...
eric
A mettre dans un module :
Function Trigramme(ID As String, PlageReglesGest As Range, OffsetPoids As Long, OffsetTrigramme As Long)
Dim i As Long, p As Long, poids As Variant, rep As String, c As Range
Application.Volatile
rep = "non trouvé"
For Each c In PlageReglesGest
p = InStr(c.Value, ID)
If p > 0 And c.Offset(0, OffsetPoids).Value > poids Then
poids = c.Offset(0, OffsetPoids).Value
rep = c.Offset(0, OffsetTrigramme).Value
End If
Next c
Trigramme = rep
End Function
et la formule devient :
=Trigramme(A4;[Tableau1.xls]GGG!$D$19:$D$21;1;-3)
Function Trigramme(ID, PlageReglesGest, OffsetPoids, OffsetTrigramme)
ID : l'ID recherché
PlageReglesGest : la plage des N° Règle de gestion générale
OffsetPoids : l'offset en colonnes où est le poids par rapport à la colonne PlageReglesGest
OffsetTrigramme : l'offset en colonnes où est le trigramme par rapport à la colonne PlageReglesGest
Je ne fais aucun contrôle sur les parametres saisis. PlageReglesGest doit faire 1 colonne de large bien sûr.
Avec 'inserer / fonctions / fonctions personnalisées' tu peux désigner les plages et cellules à la souris
Comme d'hab je te laisse tester...
eric
Waw, on ne fait plus dans le touristique là...
Je te remercie et comme d'hab je teste et je te tiens au courant !
Je te remercie et comme d'hab je teste et je te tiens au courant !
Arf...
Effectivement, c'est moins lourd, ça réagit plus vite, mais ça me remonte toujours le premier résultat trouvé... Je continue de chercher !
Effectivement, c'est moins lourd, ça réagit plus vite, mais ça me remonte toujours le premier résultat trouvé... Je continue de chercher !
A 'poids' égal oui, sinon il doit ramener le 'poids' le plus élevé.
J'appelle 'poids' ce que tu as décris comme ça "Je ne dois plus remonter la dernière occurrence (MAX) mais celles qui correspondent à la plus grande valeur dans une tierce colonne.".
Cette tierce colonne est attendue à l'offset OffsetPoids, mais peut-être que j'avais mal compris ta demande...
- si offset x >1 => x colonnes à droite de gestion...jenesaisplusquoi
- si offset x <1 => x colonne à gauche de gestion...jenesaisplusquoi
OffsetPoids=1 dans mon exemple, donc 1 colonne à droite de la colonne gestion...jenesaisplusquoi (de mémoire là où on recherche tes ID) il faut qu'il y ait des valeurs différentes, le trigramme de la plus élevée doit être ramené. Si c'est bien le test que tu a fais il faudrait déposer tes fichiers que je regarde sur un exemple plus complet.
eric
J'appelle 'poids' ce que tu as décris comme ça "Je ne dois plus remonter la dernière occurrence (MAX) mais celles qui correspondent à la plus grande valeur dans une tierce colonne.".
Cette tierce colonne est attendue à l'offset OffsetPoids, mais peut-être que j'avais mal compris ta demande...
- si offset x >1 => x colonnes à droite de gestion...jenesaisplusquoi
- si offset x <1 => x colonne à gauche de gestion...jenesaisplusquoi
OffsetPoids=1 dans mon exemple, donc 1 colonne à droite de la colonne gestion...jenesaisplusquoi (de mémoire là où on recherche tes ID) il faut qu'il y ait des valeurs différentes, le trigramme de la plus élevée doit être ramené. Si c'est bien le test que tu a fais il faudrait déposer tes fichiers que je regarde sur un exemple plus complet.
eric
Non non, c'est bon, je comprends mieux.
Je pense que je vais pouvoir y arriver.
Et puis, j'ai trouvé une solution temporaire pour contourner le problème, donc ici, il y a moins de stress.
Merci beaucoup !!
Je pense que je vais pouvoir y arriver.
Et puis, j'ai trouvé une solution temporaire pour contourner le problème, donc ici, il y a moins de stress.
Merci beaucoup !!
:)
Normal, c'est une réponse de juste-avant-le-WE...
Je n'en peux plus, je raccroche, sinon je vais continuer à raconter n'importe quoi.
je voulais dire qu'effectivement, la solution devait être dans
"- si offset x >1 => x colonnes à droite de gestion...jenesaisplusquoi
- si offset x <1 => x colonne à gauche de gestion...jenesaisplusquoi "
parce que ce n'était pas exactement ce que j'avais compris, et que toi en revanche, tu avais bien compris ma demande.
Je te souhaite un très bon WE et see you lundi matin !
Normal, c'est une réponse de juste-avant-le-WE...
Je n'en peux plus, je raccroche, sinon je vais continuer à raconter n'importe quoi.
je voulais dire qu'effectivement, la solution devait être dans
"- si offset x >1 => x colonnes à droite de gestion...jenesaisplusquoi
- si offset x <1 => x colonne à gauche de gestion...jenesaisplusquoi "
parce que ce n'était pas exactement ce que j'avais compris, et que toi en revanche, tu avais bien compris ma demande.
Je te souhaite un très bon WE et see you lundi matin !