Récupérer plusieurs valeurs avec une référence

rere67

XLDnaute Junior
Bonjour à tous,

Je suis entrain de faire un fichier avec une base de données et dans une seconde feuille une récupération de l'ensemble des données pour visualiser d'une autre manière.

J'ai test" avec des recherchev mais je ne pense pas que se soit la bonne solution.

J'ai mis un fichier en exemple. L'idée est d'avoir un recueil de données dans la Feuil2 et récupérer les Commentaires dans des colonnes en fonction des différentes références.

Je vous remercie par avance pour toute l'aide que vous pourrez m'apporter.

Merci
 

Pièces jointes

  • Essai.xlsx
    14.4 KB · Affichages: 33

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Une solution VBA si ça t'intéresse. À placer dans le composant Feuil2(Feuil2). Ça agira chaque fois que tu sélectionneras (entreras dans) dans cet onglet...

VB:
Private Sub Worksheet_Activate()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'supprime d'éventuelles enciennes données
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeur TV (en partant de la seconde)
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données de la colonne 1 du tableau de valeurs TV
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
    K = 1: Erase TL 'initialise K, vide le tableau des lignes TL
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeur TV (en partant de la seconde)
        If TV(I, 1) = TMP(J) Then 'condition : si la donnée ligne I colonne 1 de TV correspond à lélément J du tableau temporaire TMP
            ReDim Preserve TL(1 To K) 'redimensionne le tableau des ligne TL (K lignes)
            TL(K) = TV(I, 4) 'récupere dans la ligne K de TL le commentaire en colonne 4 de la ligne I de TV
            K = K + 1 'incrémente K (ajoute une ligne à TL)
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
    Cells(2, J + 2).Resize(UBound(TL), 1).Value = Application.Transpose(TL) 'renvoie le tableau TL transposé dans la cellule redimensionnée ligne 2 colonne j+2
Next J 'prochain élément de la boucle 1
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 095
Membres
103 116
dernier inscrit
kutobi87