Sub Rechercher_Code_id()
Dim tId As New Dictionary, t, i As Long, clef, debut
debut = Timer
'si filtre actif, on affiche tout pour que .CurrentRegion fonctionne correctement
If Sheets("Transco").FilterMode Then Sheets("Transco").ShowAllData
'lecture du tableau TRANSCO
t = Intersect(Sheets("Transco").Range("a1").CurrentRegion, Sheets("Transco").Range("a:d"))
'remplissage du dico correspondant à Transco (clef = Civilité\Ville\Aides et Item = )
For i = UBound(t) To 2 Step -1: tId(Join(Array(t(i, 1), t(i, 2), t(i, 3)), "\")) = t(i, 4): Next i
'si filtre actif, on affiche tout pour que .CurrentRegion fonctionne correctement
If Sheets("base").FilterMode Then Sheets("base").ShowAllData
'lecture BASE dans le tableau t
t = Intersect(Sheets("Base").Range("a1").CurrentRegion, Sheets("Base").Range("a:g"))
'remplissage direct de la colonne Code_id par l'intermédiaire du dictionary tId
For i = 2 To UBound(t)
clef = Join(Array(t(i, 1), t(i, 5), t(i, 6)), "\") 'calcul de la clef
'si la clef existe, on affecte le Code_id du dictionary correspond à la clef dans le tableau T (7 ème colonne)
If tId.Exists(clef) Then t(i, 7) = tId(clef)
Next i
'réécriture de t sur la Base
Sheets("base").Range("a1").Resize(UBound(t), 7) = t
MsgBox Format(Timer - debut, "0.00\ sec.")
End Sub