XL 2016 RechercheV avec plusieurs résultats

Ethlios

XLDnaute Junior
Bonjour à tous,

Je suis à la recherche d'une formule similaire à rechercheV. Mon but est de partir d'un critère, dans mon exemple une voiture, et d'afficher toutes les possibilités de couleur liée. Dans mon tableau de donnée on trouvera donc l'information de 3 couleurs associée au critère voiture, je veux donc essayer d'avoir une formule ou une macro pouvant me sortir cette information.

Merci d'avance pour votre aide !

Ethlios.
 

Pièces jointes

  • Exemple forum.xlsx
    9.6 KB · Affichages: 21
Solution
Bonjour à tous
Même si @Ethlios est sous 2016 et donc n'as pas accès aux nouvelles formules, il faut dire que 365 est quand même plus maniable pour ce genre de demande :
VB:
=JOINDRE.TEXTE("/";1;UNIQUE(FILTRE(Tableau1[Couleur];Tableau1[Type]=F9;"")))

Avec une autre version (toujours 365) dans le classeur : choix du véhicule en F9
Cordialement

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Ethlios,
Un essai en PJ avec une fonction perso :
VB:
Function RechercheMultiples(Choix$, Plage As Range)
    For i = 1 To UBound(Plage.Value2)
        If Plage.Value2(i, 1) = Choix Then RechercheMultiples = RechercheMultiples & "/" & Plage.Value2(i, 4)
    Next i
    RechercheMultiples = Mid(RechercheMultiples, 2)
End Function
La syntaxe est : =RechercheMultiples(Type;Plage) par exemple :
=RechercheMultiples(F7;$A$1:$D$14)
 

Pièces jointes

  • Exemple forum (2).xlsm
    15.2 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En beaucoup plus rapide, en passant par un array :
VB:
Function RechercheMultiple(Choix$, Plage As Range)
    T = Plage
    For i = 1 To UBound(T)
        If T(i, 1) = Choix Then RechercheMultiple = RechercheMultiple & "/" & T(i, 4)
    Next i
    RechercheMultiple = Mid(RechercheMultiple, 2)
End Function
Avec une base de 5000 références, sur mon PC, la première fonction prend 1.31s alors que la seconde prend 7.8ms.
 

Pièces jointes

  • Exemple forum (3).xlsm
    115.1 KB · Affichages: 16

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Ethlios, Phil,
Quelques explications :
Function RechercheMultiple(Choix$, Plage As Range)
Déclaration de la fonction et de ses deux paramètres. Choix est le type désiré, Plage est la plage du tableau d'entrée.
T = Plage
Pour être plus rapide on transfert le tableau de cellules dans un tableau VBA ( nommé array )
For i = 1 To UBound(T)
On parcourt tout le tableau de 1 à la fin ( la fin est donnée par Ubound(T) )
If T(i, 1) = Choix Then RechercheMultiple = RechercheMultiple & "/" & T(i, 4)
Si la première cellule est égale au choix demandé, on concatène le résultat avec la cellule de la 4eme colonne soit la couleur, avec le séparateur "/"
RechercheMultiple = Mid(RechercheMultiple, 2)
Par construction la chaine à la fin commence toujours par "/" qu'il faut supprimer, donc le MID remplit la fonction. Cela correspond en XL à STXT(Chaine;2;1000)
C'est cette valeur qui est remontée dans XL car le résultat est contenu dans le nom de la fonction.
 

Phil69970

XLDnaute Barbatruc
Bonjour @Ethlios , sylvain

J'ai mis le commentaire dans la macro et le fichier joint

VB:
If Not Intersect(Target, Range("F7")) Is Nothing Then   'Sur changement cellule F7
Derlig = Feuil1.Range("A" & Rows.Count).End(xlUp).Row   'Derniere ligne colonne A
For i = 2 To Derlig                                     'Boucle sur les lignes 2 à la derniere ligne
    If Range("F7") = Range("A" & i).Value Then          'Verif si condition cellule F7 = cellule Ax
        Mem = Range("D" & i)                            'Mets dans une variable le resultat
        Mem1 = Mem1 & "/" & Mem                         'Ajoute les valeurs à la suites des autres
    End If                                              'Fin de condiion
Next i                                                  'Boucle sur la ligne suivante
[G7] = Right(Mem1, Len(Mem1) - 1)                       'Supprime le premier "/" et mets le résultat en G7

*Merci de ton retour

@Phil69970
 

Pièces jointes

  • Groupe de couleur V2.xlsm
    17.4 KB · Affichages: 7

Efgé

XLDnaute Barbatruc
Bonjour à tous
Même si @Ethlios est sous 2016 et donc n'as pas accès aux nouvelles formules, il faut dire que 365 est quand même plus maniable pour ce genre de demande :
VB:
=JOINDRE.TEXTE("/";1;UNIQUE(FILTRE(Tableau1[Couleur];Tableau1[Type]=F9;"")))

Avec une autre version (toujours 365) dans le classeur : choix du véhicule en F9
Cordialement
 

Pièces jointes

  • Exemple forum_3.xlsx
    12.7 KB · Affichages: 11

Ethlios

XLDnaute Junior
Bonjour,

Désolé pour ma réponse tardive, je n'ai pas encore eu le temps de me plonger dans vos formules, pour l'instant les 3 ne me donne aucun résultat dans mon fichier, cependant, à l'instant, je viens de sortir ma liste dans un autre Excel est la formule de @Efgé fonctionne 🤯

Ethlios
 

Ethlios

XLDnaute Junior
Bonjour tout le monde,
@Ethlios,
Avez vous autoriser les macros dans votre fichier ?
Car les Pj de Phil et moi utilisent des macros, alors que celle d' Efgé n'utilise que des formules.
Oui bien sûr, j'ai déjà plusieurs macro sur mon fichier initial, je pense qu'il y a une coquille quelque part dans mon fichier, je ne vois que ça. Je vais essayer d'utiliser vos macros dans un nouveau fichier pour vérifier ma théorie.
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@Ethlios
Déjà tu peux voir avec les fichiers mis à ta disposition par Sylvain et moi si cela fonctionnent chose perso que je ne doute pas car en principe quand on poste un fichier on l'a testé avant.

Donc si nos fichiers fonctionnent j'en conclu que c'est ta transposition qui pose problème.
D’où l’intérêt quand tu mets un fichier il faut qu'il soit représentatif de ton problème.
Si on demande un fichier représentatif c'est pour que la transposition soit facile et avec le moins de manipulation par le demandeur.
Exemple :
Souvent je vois un/des codes dans une feuille et retranscrit dans un module ou vice/versa par l'utilisateur.
Si on met le code dans une sub de la feuille ce n'est pas pour que l'utilisateur mette le code dans un module ou vice/versa.....

Maintenant si tu n'arrives pas à transposer le/les fichiers mis à ta disposition post un fichier "plus raccord" avec ton fichier réel.

@Phil69970
 

Englobe

XLDnaute Nouveau
Re,
En beaucoup plus rapide, en passant par un array :
VB:
Function RechercheMultiple(Choix$, Plage As Range)
    T = Plage
    For i = 1 To UBound(T)
        If T(i, 1) = Choix Then RechercheMultiple = RechercheMultiple & "/" & T(i, 4)
    Next i
    RechercheMultiple = Mid(RechercheMultiple, 2)
End Function
Avec une base de 5000 références, sur mon PC, la première fonction prend 1.31s alors que la seconde prend 7.8ms.
Bonjour,
Peut-on utilisé ce code pour une recherche plutôt par couleur.
J'ai tenté avec cette modification mais le résultat renvoyé est #VALEUR.

VB:
Function RenvoiResultat(Choix As Range, Plage As Range)
    t = Plage
    c = Choix.Interior.ColorIndex
    For i = 13 To UBound(t)
        If t(i, 1).Interior.ColorIndex = c Then RenvoiResultat = RenvoiResultat & Chr(10) & t(i, 2)
    Next i
    RenvoiResultat = Mid(RenvoiResultat, 2)
End Function

Merci
 

Pièces jointes

  • test1.xlsm
    19 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Englobe,
Un array ne peut contenir que les valeurs des cellules, pas les couleurs.
Donc il faut repasser par une analyse par cellule, par ex comme :
VB:
Function RenvoiResultat(Choix As Variant, Plage As Variant)
    c = Choix.Interior.ColorIndex
    For Each cell In Plage
        If Range(cell.Address).Interior.ColorIndex = c Then RenvoiResultat = RenvoiResultat & Chr(10) & Range(cell.Address)
    Next cell
    RenvoiResultat = Mid(RenvoiResultat, 2)
End Function
 

Pièces jointes

  • test1.xlsm
    18.5 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
315 127
Messages
2 116 534
Membres
112 771
dernier inscrit
mikadu49