Recherche plusieurs valeurs dans un tableau

Osaka

XLDnaute Nouveau
Bonjour à tous,

Pourriez-vous m'aider à trouver la formule excel/vba adéquate ?

En tapant le chiffre désiré dans une cellule A1, il faudrait indiquer en B1 toutes les couleurs relatives au chiffre encodé en A1. Si possible, les couleurs doivent être en majuscules et séparées d'un ' - '

Mille mercis pour votre précieuse aide
Vincent

1 blanc
1 bleu
2 noir
3 blanc
4 vert
4 noir
5 noir
5 rouge
6 vert
7 jaune
8 gris
9 orange
9 bleu
9 noir
10 gris

exemple :
valeur recherchée en A1 = 9
résultat en B1 = ORANGE - BLEU - NOIR
 

Modeste

XLDnaute Barbatruc
Re : Recherche plusieurs valeurs dans un tableau

Re,

je souhaiterais pouvoir adapter ce code sur une plus grande plage
Pour autant que ce soit bien en colonne A et à partir de la ligne 2 de la feuille "S16" qu'on inscrit un CMD, il n'y a pas de limite à l'étendue.
Je peux commenter le code, si c'est ce que tu souhaites, mais il faudrait expliquer ce que tu entends par adapter sur une plus grande plage?
 

Osaka

XLDnaute Nouveau
Re : Recherche plusieurs valeurs dans un tableau

Cela aurait plus simple de vous envoyer le "gros" fichier original mais trop complexe à épurer afin de ne pas envoyer
des données confidentielles :)

En commentant le code, j'éviterais ainsi de faire à nouvau appel à vos services ^^

Voici la disposition du fichier original

onglet GAT -> à partir de la ligne 1 : CMD en A et couleurs en L
onglet S16 -> à partir de la ligne 10 : CMD en G et couleurs en M

Merci d'avance
 

Modeste

XLDnaute Barbatruc
Re : Recherche plusieurs valeurs dans un tableau

Voici le code commenté ... je te laisse le soin de voir si tu t'y retrouves ... reviens nous dire si tu as des questions.
VB:
Private Sub Worksheet_Change(ByVal Target As Range) ' Procédure événementielle
'(le code s'exécutera chaque fois que le contenu d'une cellule de la feuille S16 est modifié)
'cette cellule modifiée correspond à la variable Target

    'si la modif a lieu ailleurs qu'en colonne A ou sur la ligne 1, le code n'est pas exécuté
    If Target.Column > 1 Or Target.Row < 2 Then Exit Sub
    'si le contenu de la cellule modifiée a été effacé, on efface le contenu de la cellule à sa droite et on "sort"
    If Target = "" Then Target.Offset(0, 1) = "": Exit Sub
    'on crée une instance d'un objet dictionary
    Set liste = CreateObject("scripting.dictionary")
    With Sheets("GAT")
        'on copie dans un tableau en mémoire, le contenu de la zone "autour" de la cellule A1 en feuille GAT
        tablo = .[A1].CurrentRegion
        'on parcourt ce tableau, de son premier élément au dernier
        For i = 1 To UBound(tablo)
            'on crée une entrée (key) dans le dico pour chaque CMD la valeur associée (item) est la concaténation
            'de chaque "couleur" trouvée en colonne B pour le même CMD
            liste(tablo(i, 1)) = liste(tablo(i, 1)) & " - " & tablo(i, 2)
        Next i
    End With
    'si le dico ne contient pas la clé encodée en feuille S16, dans la cellule modifiée,
    'une erreur serait générée par le Mid ci-dessous (équivalent de STXT)
    On Error Resume Next
    'l'item du dico, identifié par cette clé (Target) contient une chaîne de caractères qui se commence par
    'la séquence espace-tiret-espace; on supprime donc les 3 premiers caractères et on inscrit le résultat
    'dans la cellule à droite
    Target.Offset(0, 1) = Mid(liste(Target.Value), 4, Len(liste(Target.Value)) - 3)
End Sub
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87