Rechercher une valeur dans une matrice

Fermé
Annie - 12 juil. 2012 à 18:21
 Annie - 17 juil. 2012 à 22:11
Bonjour,

Voici mon problème, j'ai une matrice contenant du texte et je veux y rechercher une valeur et récupérer une chaine de caractère dans la ligne où se trouve la valeur rechercher. Exemple :

15:Montréal&Laval
16: Longueil &Toronto
17:Lavall&Québec

d'abord j'ai écris une formule qui permet d'extraire les nom se trouvant entre les signes : et &, la voici : (STXT(STXT(A2:A5;1;TROUVE("&";A2:A4;1)-1);TROUVE(":";STXT(A2:A4;1;TROUVE("&";A2:A4;1)-1))+1;NBCAR(STXT(A2:A4;1;TROUVE("&";A2:A4;1)-1)))).
Problème : la formule marche uniquement pour la première ligne, comment faire pour avoir les autres nom comme Longueil ou Laval avec une recherchev, en recherchant les chiffres 15,16 ou 17..?? MERCI!!!

Si vous voulez je vous envoie le fichier.

A voir également:

4 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
12 juil. 2012 à 18:59
Bonsoir
essayez comme ça:
=STXT(RECHERCHEV("*"&A1&"*";A2:A4;1;0);TROUVE(":";RECHERCHEV("*"&A1&"*";A2:A4;1;0);1)+1;TROUVE("&";RECHERCHEV("*"&A1&"*";A2:A4;1;0);1)-4)

avec le nombre cherché en A1

ne fonctionne que si l'entête est toujours composée de deux chiffres et les deux points (3 caractères)
sinon recomposer la formule que vous avez mise en place en remplaçant le A2:A4 par l'ensemble RECHERCHEV de celle ci

ou si vous voulez directement le nombre remplacer l'ensemble: "*"&A1&"*" par "*15*"

bien sur si vous copier le formule dans une colonne, bloquer les champs qui ne doivent pas bouger.

crdlmnt
0
Merci ta formule marche. Tu es vraiment un champion!
0
Bonjour j'aimerais ton aide pour compléter le truc que tu m,a montré hier. Voici le texte où je dois chercher mes mots :

2306: St-Denis & René-Lévesque Performance by movement

Avec ta formule j'ai réussi à extraire le mot "St-Denis" se trouvant entre les signes : et &, mais j'essaie de faire pour le deuxième mot "René Lévesque se toruvant entre le signe & et le mot perfformance by movement..comment faire?? Merci beaucoup!!
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
14 juil. 2012 à 18:08
Bonjour Annie
Ca, c'est beaucoup plus difficile, sauf peut être si vous pouvez garantir dans tous les cas que le blanc qui suit le mot cherché et le deuxième après le signe &
soit dans tous les cas:
texte............... & (blanc) texte (blanc) Etc.....
A vous lire?
crdlmnt.
0
Bonjour Vaucluse,
oui le blanc sera toujours la. Merci beaucoup!
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
14 juil. 2012 à 20:30
Alors je vous en reparle demain matin, je ferme pour aujourd'hui.
bonne soirée!
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
Modifié par Vaucluse le 15/07/2012 à 07:22
Bonjour
voila la formule complète qui donne le résultat que vous cherchez pour le texte de votre message.
Elle ne fonctionne que si le texte est formé de

code num/deux points/blanc/nom/blanc/&/blanc/texte cherché/ blanc
En résumé:
le signe &+ blanc se trouve devant le nom cherché
le blanc derière le nom cherché est le 4° du texte.

vous pouvez simplifier la formule en utilisant deux cellules:
une pour placer la recherche qui extraira du tableau le texte correspondant au N° en A1
une avec la formule ci dessous en remplaçant l'ensemble
RECHERCHEV("*"&A1&"*";A2:A4;1;0)
par l'adresse de la cellule qui contient le texte

=STXT(RECHERCHEV("*"&A1&"*";A2:A4;1;0);TROUVE("&";RECHERCHEV("*"&A1&"*";A2:A4;1;0);1)+2;TROUVE("/";SUBSTITUE(RECHERCHEV("*"&A1&"*";A2:A4;1;0);" ";"/";4);1)-TROUVE("&";RECHERCHEV("*"&A1&"*";A2:A4;1;0);1)-2)

Revenez si ne convient pas à tout vos cas de figure

un petit exemple pour être plus clair
https://www.cjoint.com/?BGphvTtTC3V

crdlmnt

ne sommes nous pas seuls à comprendre ce que l'on explique?
0
Merci beaucoup. Je vais le tester au couran t d ela journée et je te reviens là-dessus. Merci encore
0
Salut est ce que je peux t envoyer mon fichier car j ai copié la formule mais ca ne marche pas, je pense qu il y a un petit erreur qui sait glissée et que je ne sait pas ...
Merci!
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
16 juil. 2012 à 18:37
Re
bien sur , me mettre à disposition sur:
https://www.cjoint.com/
et revenir placez ici le lien donné par me site.
Si vous voulez passer en privé, il faut vous inscrire comme membre et cliquer dans un message sur mon pseudo.
à vous lire
crdlmt
0
J'ai essayé la forumle mais elle ne marche pas tout le temps. Y a t il un moyen de la faire marcher quelque soit le numéro de l'intersection (1,2, 3 ou 4 chiffres) ?
Le deuxième onglet du fichier contient les noms à chercher. Ces noms proviennent d'un fichier texte importés d'un logiciel et changent selon le contexte mais la structure du fichier ne change pas..

NB : la formule sur la cellule horizontale donne le premier nom dans le deuxième onglet, alors que celle sur lea cellule verticale donne le deuxième nom. Pour les noms horizontales la formule d onne parfvois des lettres de trop ou de moins, dépendamment de la taille de l'intersection. ESt ce qu'il y a un moyen d'arranger ça?

Ci-joint le fichier. Merci beaucoup!

http://cjoint.com/?BGqtCFnym2Z
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
17 juil. 2012 à 08:44
Bonjour
une solution ici.
Il n'st pas certain que la seconde extraction fonctionne dans tous les cas, voir les commentaires.
Revenez si besoin:
https://www.cjoint.com/?BGriRSYyXZK

crdlmnt
0
tontong Messages postés 2549 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 23 avril 2024 1 054
17 juil. 2012 à 15:26
Bonjour,
Mon commentaire sera timide parce que je ne suis pas sûr d'avoir tout suivi.
Pourquoi faire ......RECHERCHEV("*"&C12&"*";Champ;1;0)....qui valide tous les nombres qui se terminent comme C12?
RECHERCHEV(C12&"*";Champ;1;0) serait plus sélectif si la valeur commence toujours par un nombre suivi de deux points.
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
17 juil. 2012 à 18:51
Bonsoir Tontong
Tu as partiellement raison
en réalité, c'est ce que j'avais proposé dans mes message, mais ce n'est pas ce qui est dans la fichier modèle que j"'ai renvoyé au vu des exemples à traiter.

Si tu écris (C12$"*", la recherche va s'arrêter sur le premier texte qui commence par C12 et donc en trouvant le 5 ne trouvera jamais le 5000 qui est plus bas.

D'ou le code dans la formule finale, voir le fichier:

(C12&":*" avec les deux points dans les guillemets pour bien spécifier le code à trouver

crdlmnt
0
tontong Messages postés 2549 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 23 avril 2024 1 054
17 juil. 2012 à 19:26
Merci beaucoup pour l'explication mais aussi merci pour la formule: j'ai apprécié et noté la combinaison STXT(RechercheV(.....
J'ai commis une erreur dans les formules de mon commentaire en zappant les ":" ce qui dénature le sens de ma remarque.
Mon observation portait sur le caractère de remplacement "*" qui précède la reférence C12.
Il pourrait y avoir ambigüité entre un texte " 5: Henri-Bourassa &...." et un texte qui commencerait par "15: ..." ou " 205:"
Merci encore et bonne soirée.
0
Merci Vaucluse. Je vais le regarder, s il y a quoi que ce soit je te reviens. Dans tous les cas, merci infiniment!!
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
17 juil. 2012 à 09:40
Bonjour à tous,

Oula, ça c'est de la formule ;-)

Comme je vois qu'il y a déjà des macros, une proposition de fonction personnalisée à mettre dans un module standard :
Function voie(référence As Long, num_Voie) As String
    Dim c As Range
    If num_Voie < 1 And num_Voie > 2 Then
        voie = "num_voie incorrect"
        Exit Function
    End If
    Set c = Sheets("SimTrafficMvmt").[A:A].Find(what:=référence & ":", LookIn:=xlValues, LookAt:=xlPart)
    If c Is Nothing Then
        voie = "référence non trouvée"
    Else
        voie = Replace(c.Value, référence & ": ", "")
        voie = Replace(voie, " Performance by movement ", "")
        voie = Trim(Split(voie, "&")(num_Voie - 1))
    End If
End Function

les formules deviennent :
=voie(C12;1)
et
=voie(C12;2)
https://www.cjoint.com/?BGrjMUeOpO5

eric
0
Merci Eric pour ta belle formule!!
0