EXCEL: RecherchV et renvoie de plusieur valeur

DiiDii -  
via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un tableau (TABLEAU1) qui ressemble a ceci:
1 a A
2 a A
2 b B
3 d A
4 c A
5 b A
5 c B
5 d C
6 a A

J'ai un tableau (TABLEAU2) avec ceci:
1
2
3
4
5
6

J'aimerai créer une formule en colonne 2 du tableau TABLEAU2 pour qui me permetrais d'afficher ceci:
1 A
2 A B
3 A
4 A
5 A B C
6 A

J'ai essayé avec EQUIV et INDEX en formule matricielle mais cela n'a pas foncitonné.
J'ai aussi essayé avec des recherchV mais sans succes.

Merci par avance de votre aide
DiiDii

1 réponse

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonsoir

    1° Nommer la plage de la 1ere colonne du 1er tableau codes et nommer la plage de la 3eme colonne du même tableau valeurs

    2° En supposant le 2eme tableau commençant par exemple en E2 (le nombre 1 est en E2), en F2 mettre la formule suivante :
    =SI(COLONNES($F:F)<=NB.SI(codes;$E2);INDEX(valeurs;PETITE.VALEUR(SI(codes=$E2;LIGNE(INDIRECT("1:"&LIGNES(codes))));COLONNES($F:F)));"")
    Formule matricielle à valider par CTRL + MAJ +ENTREE (elle se met alors automatiquement entre [ ] )

    Etirer la formule vers la droite et vers le bas

    Si par contre tu veux tous les résultats dans la même cellule il faut passer par une fonction personnalisée telle celle donnée par Jacques Boisgontier :

    ALT + F11 pour ouvrie Editeur VBA
    Insertion puis Module
    Copier coller le code suivant dans la page

    Function Tous(v, champRech As Range, ChampRetour As Range)
      a = champRech
      temp = ""
      For i = 1 To champRech.Count
        If a(i, 1) = v Then
            temp = temp & ChampRetour(i) & " "
        End If
      Next i
      Tous = Left(temp, Len(temp) - 1)
    End Function


    Fermer l'éditeur

    La fonction est maintenant accessible dans n'importe quelle cellule comme toute focntion Excell avec la syntaxe = Tous(code recherché,plage de recherche, plage des valeurs à renvoyer)
    Donc en ayant nommé les plages du 1er tableau comme précédemment, en F2 du 2eme tableau la formule sera = Tous(E2;codes;valeurs)
    A étirer au bas de la colonne

    Cdlmnt
    0