Rechercher une valeur dans une matrice

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.

4 réponses

  1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
    1. Annie
       
      Merci ta formule marche. Tu es vraiment un champion!
      0
    2. Annie
       
      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
    3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
       
      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
    4. Annie
       
      Bonjour Vaucluse,
      oui le blanc sera toujours la. Merci beaucoup!
      0
    5. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
       
      Alors je vous en reparle demain matin, je ferme pour aujourd'hui.
      bonne soirée!
      0
  2. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
    1. Annie
       
      Merci beaucoup. Je vais le tester au couran t d ela journée et je te reviens là-dessus. Merci encore
      0
    2. Annie
       
      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
    3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
       
      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
    4. Annie
       
      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
  3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
    1. tontong Messages postés 2575 Date d'inscription   Statut Membre Dernière intervention   1 064
       
      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
    2. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
       
      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
    3. tontong Messages postés 2575 Date d'inscription   Statut Membre Dernière intervention   1 064
       
      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
    4. Annie
       
      Merci Vaucluse. Je vais le regarder, s il y a quoi que ce soit je te reviens. Dans tous les cas, merci infiniment!!
      0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. Annie
       
      Merci Eric pour ta belle formule!!
      0