Rechercher une valeur dans une matrice
Annie
-
Annie -
Annie -
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.
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:
- Excel rechercher une valeur dans une chaine de caractère
- Déplacer une colonne excel - Guide
- Liste déroulante excel - Guide
- Caractère spéciaux - Guide
- Rechercher ou saisir une url - Guide
- Caractère ascii - Guide
4 réponses
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
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
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?
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?
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
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
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
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
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
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
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.
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.
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
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
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.
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.
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 :
les formules deviennent :
=voie(C12;1)
et
=voie(C12;2)
https://www.cjoint.com/?BGrjMUeOpO5
eric
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
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!!
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.
oui le blanc sera toujours la. Merci beaucoup!
bonne soirée!