Fonction Index avec plusieurs résultats dans la même cellule
Bonjour à tous,
j'utilise pour mon stage une fonction INDEX(EQUIV) qui me permet d'aller chercher certaines valeurs situées sur une feuille 2 afin de les remettre dans un tableau en feuille 1. Le souci étant que pour une recherche je peux avoir plusieurs résultats, je me retrouve embêté car excel ne m'indique dans ce cas que la première valeur qu'il trouve. Je vous mets mon fichier (simplifié, j'ai tout mis sur la même feuille, je m'arrangerais après).
Après avoir pas mal tourné sur le web j'ai trouvé une réponse qui me satisfait partiellement. Dans mon entreprise, certaines tâches sont effectuées lors de semaines précises. Je dois faire un planning qui affiche les tâches à effectuer chaque semaine jusqu'à la fin de l'année. Or, pour certaines semaines, il y a plusieurs tâches à faire. J'utilisais un INDEX+EQUIV pour ce genre de choses d'habitude mais là ça ne suffit pas. Lorsque vous regardez mon fichier, j'ai utilisé en E2 la formule :
=SI(COLONNES($A:A)<=NB.SI($B$2:$B$4;$D2);INDEX($A$2:$A$4;PETITE.VALEUR(SI($B$2:$B$4=$D2;LIGNE(INDIRECT("1:"&LIGNES($B$2:$B$4))));COLONNES($A:A)));"")
après avoir appuyé sur ctrl+shift+enter. ça me met ici les deux tâches à effectuer lors de la semaine 33, mais dans deux cellules séparées. J'utilise alors un CONCATENER dans une autre cellule pour avoir les différentes tâches dans une seule et même cellule, mais c'est contraignant surtout que le vrai fichier est beaucoup plus complexe et rempli.
J'aimerais donc savoir si il existe une formule permettant de mettre directement toutes les valeurs recherchées dans la même cellule..
Merci de votre temps
EDIT : j'ai aussi tenté la solution proposée par Amadéus dans plusieurs topics, la macro RechercheMultiples, sans succès chez moi, peut être dû à une mauvaise compréhension, j'en sais rien...
Bon j'ai trouvé finalement, je poste la réponse si ça intéresse quelqu'un un jour.
Dans un nouveau module mettre le code suivant :
Function RechTous(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
RechTous = Left(temp, Len(temp) - 1)
End Function
Puis dans la cellule de votre choix inscrire
=RechTous(AQ2;SEMAINES;ABREVIATIONS)) (penser à nommer ses listes de données)
ou bien
=SI(ESTERREUR(RechTous(AQ2;SEMAINES;ABREVIATIONS));"";RechTous(AQ2;SEMAINES;ABREVIATIONS))
pour avoir une cellule vide au lieu d'un message d'erreur.