Il faut faire les 2 en même temps, inutile de reboucler sur le 1er :
Dim dict1, dict2, lig As Long, pl() As Variant
Set dict1 = CreateObject("Scripting.Dictionary")
Set dict2 = CreateObject("Scripting.Dictionary")
pl = [A2:B2].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
For lig = 1 To UBound(pl)
dict1(pl(lig, 1)) = pl(lig, 2)
If dict2.exists(pl(lig, 2)) Then dict2(pl(lig, 2)) = dict2(pl(lig, 2)) & "," & pl(lig, 1) Else dict2(pl(lig, 2)) = pl(lig, 1)
Next lig
Un dictionnaire ne contenant qu'une valeur tu es obligé de les concaténer dans le 2nd dictionary.
A l'utilisation, si tu ne trouves pas dans le 1er dict, c'est que c'est dans le 2nd :
' recherche
clé = 8
If dict1.exists(clé) Then item = dict1(clé) Else item = dict2(clé)
valeur multiple que tu peux ensuite éclater en tableau si besoin :
If InStr(item, ",") > 0 Then item = Split(item, ",")
eric