Recherche double liste

Résolu
Apollo -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous !

Soit un tableau comme ceci :

A B
toto momo
toto mimi
toto mumu
toto mama
tutu mama
tata mimi
tata mumu

Ce que j'aimerais obtenir c'est quelque chose de la forme :

C D
toto momo;mimi;mumu;mama
tutu mama
tata mimi;mumu

Soit "en clair": chercher sur la liste des mots de la colonne C (ex: toto) ceux qui apparaissent dans la colonne A (ex: toto est bien au moins 1 fois dans la colonne A), et agréger dans la colonne D les termes (pour le cas où il y a plusieurs fois le même terme dans A) qui apparaissent dans la colonne B sur la même ligne que le mot trouvé (donc ici, écrire en D1 "momo;mimi;mumu;mama", en face de C1="toto").

Avant le vba (oui je sais...) j'aimerais tenter avec RECHERCHEV ou le combo EQUIV+INDEX.
La formule s'écrivant dans les cellules de la colonne D.

Des idées ?

5 réponses

  1. Utilisateur anonyme
     
    J'avais fait quelque chose du genre l'autre jour pour une autre personne. Bon, il y a un petit code VBA, mais je te l'envoie quand même :

    https://www.cjoint.com/c/CGdp5Gz65HJ
    1
    1. Apollo25 Messages postés 5 Statut Membre
       
      C'est parfait merci énormément !!

      J'ai fait quelques modifs (et les accents dans le code...)
      0
  2. Raymond PENTIER Messages postés 58222 Date d'inscription   Statut Contributeur Dernière intervention   17 487
     
    Avec RECHERCHEV, c'est exclu : la recherche s'arrête à la première occurence ...
    0
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Bonjour,

    Pas tout à fait dans ta présentation du moins pour commencer

    Il est possible d'isoler les valeurs de la deuxième colonne avec une formule matricielle qu'il faudra confirmer en clicant en même temps sur les trois touches du clavier Ctrl, Shift et Entrée et si tu fais correctement la formule se placera entre {}

    exemple les mots sont en colonne A et les seconds en colonne B le mot critère exemple toto en G1

    =INDEX($B$1:$B$20;PETITE.VALEUR(SI($A$1:$A$20=$G$1;LIGNE(INDIRECT("1:"&LIGNES($A$1:$A$20))));LIGNES($1:1)))

    une fois confirmée en matricielle, incrémenter vers le bas

    mais je te conseille de nommer tes plages exemple $A$1:$A$20 nommée col_A
    et $B$1:$B$20 nommée col_B
    la formule devient

    =INDEX(col_B;PETITE.VALEUR(SI(col_A=$G$1;LIGNE(INDIRECT("1:"&LIGNES(col_A))));LIGNES($1:1)))

    dans le même genre avec gestion d'erreur

    =SI(LIGNES($1:1)<=NB.SI(col_A;$G$1);INDEX(col_B;PETITE.VALEUR(SI(col_A=$G$1;LIGNE(INDIRECT("1:"&LIGNES(col_A))));LIGNES($1:1)));"")

    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
    1. Apollo25 Messages postés 5 Statut Membre
       
      Voilà ! Je ne me souvenais plus de la commande Ctrl+SHift+Enter

      Je teste ça. Merci !
      0
  4. Apollo25 Messages postés 5 Statut Membre
     
    Parfait à vous deux !

    Merci, merci et encore MERCI !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Pour confirmer une matricielle, soit tu fais un double clic dans la cellule qui contient la formule,
    soit tu clic sur la cellule et clic sur la formule dans la barre des formules

    et ensuite, dans les deux cas tu clic en même temps sur les 3 touches Ctrl, Shift (touche majuscule) et Entrée

    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0