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 -
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 !
A voir également:

38 réponses

identifiant-comment Messages postés 351 Statut Membre 54
 
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)
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
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 ?
0
identifiant-comment Messages postés 351 Statut Membre 54
 
:)
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 ?
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
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 ;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
identifiant-comment Messages postés 351 Statut Membre 54
 
:) Ca marche. J'ai pas non plus compris comment tu faisais, mais ça marche !
0
identifiant-comment Messages postés 351 Statut Membre 54
 
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 !
0
identifiant-comment Messages postés 351 Statut Membre 54
 
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...
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
Bonjour,

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
0
identifiant-comment Messages postés 351 Statut Membre 54
 
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.
0
identifiant-comment Messages postés 351 Statut Membre 54
 
C'est quoi exactement la plage que tu mets dans EQUIV ? La plage tierce dont je cherche la plus grande valeur, c'est ça ?
0
identifiant-comment Messages postés 351 Statut Membre 54
 
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à...
0
identifiant-comment Messages postés 351 Statut Membre 54
 
Et dans LIGNE(), c'est quelle plage que tu appelles ?
Oui, ça en fait des questions... :)
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
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
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
Re re,

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
0
identifiant-comment Messages postés 351 Statut Membre 54
 
Waw, on ne fait plus dans le touristique là...
Je te remercie et comme d'hab je teste et je te tiens au courant !
0
identifiant-comment Messages postés 351 Statut Membre 54
 
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 !
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
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
0
identifiant-comment Messages postés 351 Statut Membre 54
 
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 !!
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
Non non, c'est bon
heuuuu... Ah ouais ?
rien compris à la réponse moi... :-s
0
identifiant-comment Messages postés 351 Statut Membre 54
 
:)
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 !
0