Rechercher Un ID dans un deuxième tableau où il apparait plusieurs fois

Bonjour à tous,

J'ai deux tableaux, avec une colonne ID qui me permet de les lier.

Dans le tableau 1, les ID n'apparaissent qu'une seule fois, dans le tableau 2, le même ID peut apparaitre de nombreuses fois, associé à une activité différente dans une colonne B.

Je souhaite rechercher, pour chaque ID présent dans le tableau 1, quelles activités l'individu fait (via la colonne B). Ca ne devrait pas être compliqué mais je but sur cet exercice depuis un certain temps, j'ai des connaissances très limités en excel et je ne m'en sors pas avec une simple rechercheV qui ne va chercher l'ID qu'une seule fois alors qu'il se répète.

Merci d'avance pour votre aide, je joins un excel anonymisé qui formalise mon problème.

Bonjour Bilewell et bienvenu, bonjour le forum,

Je ne comprends à quoi sert le tableau 1 ?

Une solution VBA (j'ai supprimé la première lignes au préalable) :

Sub Macro1()
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)

Set O = Worksheets("Sheet1") 'définit l'nglet O
O.Range("L1").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes données
TV = O.Range("H1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le ditionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 1)) = D(TV(I, 1)) + 1 'alimente le dictionnaire D
Next I 'prochaine ligne de la boucle
O.Range("L2").Resize(D.Count, 1).Value = Application.Transpose(D.Keys) 'renvoie dans L2 redimensionnée les clés du dictionnaire D
O.Range("M2").Resize(D.Count, 1).Value = Application.Transpose(D.Items) 'renvoie dans M2 redimensionnée les items du dictionnaire D
For I = 2 To D.Count + 1 'boucle sur toutes les ligne éditées de la colomme M (en partant de la seconde)
    'rajoute "activité" ou "activités" en fonction du nombre
    O.Cells(I, "M") = IIf(O.Cells(I, "M") = 1, O.Cells(I, "M") & " activité", O.Cells(I, "M") & " activités")
Next I 'prochaine ligne de la boucle
End Sub

Merci pour ta réponse Thauthème.

L'utilité du tableau 1 est de limiter les ID à rechercher, imaginons qu'il regroupe les élèves d'une seule ville alors que le tableau 2 regroupe les id des élèves de toute une région.

Re,

C'est couillon que tu ne l'aies pas imaginé dans ton exemple. Je me re penche sur ton problème...

Re,

le code adapté :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim T1 As Variant 'déclare la variable T1 (Tableau 1)
Dim T2 As Variant 'déclare la variable T2 (Tableau 2)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)

Set O = Worksheets("Sheet1") 'définit l'nglet O
O.Range("L1").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes données
T1 = O.Range("C1").CurrentRegion 'définit le tableau des valeurs T2
T2 = O.Range("H1").CurrentRegion 'définit le tableau des valeurs T2
Set D = CreateObject("Scripting.Dictionary") 'définit le ditionnaire D
For I = 2 To UBound(T2, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs T2 (en partant de la seconde)
    For J = 2 To UBound(T1, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs T1 (en partant de la seconde)
        If T1(J, 1) = T2(I, 1) Then 'condition : si les deux données correspondent
            D(T2(I, 1)) = D(T2(I, 1)) + 1 'alimente le dictionnaire D
        End If 'fin de la condition
    Next J
Next I 'prochaine ligne de la boucle
O.Range("L2").Resize(D.Count, 1).Value = Application.Transpose(D.Keys) 'renvoie dans L2 redimensionnée les clés du dictionnaire D
O.Range("M2").Resize(D.Count, 1).Value = Application.Transpose(D.Items) 'renvoie dans M2 redimensionnée les items du dictionnaire D
For I = 2 To D.Count + 1 'boucle sur toutes les ligne éditées de la colomme M (en partant de la seconde)
    'rajoute "activité" ou "activités" en fonction du nombre
    O.Cells(I, "M") = IIf(O.Cells(I, "M") = 1, O.Cells(I, "M") & " activité", O.Cells(I, "M") & " activités")
Next I 'prochaine ligne de la boucle
End Sub

Bonjour à tous,

Avec un tcd ou une formule

Merci bcp à vous deux

Rechercher des sujets similaires à "rechercher deuxieme tableau apparait fois"