Sub TrouveCode()
Dim Tab1, TabFin, Plage As Range, Cel As Range, x As Long
Dim Dico
Set Dico = CreateObject("Scripting.Dictionary") ' création d'un dictionnaire
With Worksheets("Feuil3")
Set Plage = .Range("A2:B" & .Range("A" & Rows.Count).End(xlUp).Row) 'plage contenant les codes à mettre à jour
End With
With Worksheets("Feuil1")
Tab1 = .Range("A2:E" & .Range("A" & Rows.Count).End(xlUp).Row) 'tableau des données feuille1, pour aller plus vite
End With
With Worksheets("Feuil2")
.Range(.Cells(1, 3), .Cells(.Range("A" & Rows.Count).End(xlUp).Row, .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column)).ClearContents ' effacements des données variables feuil2
TabFin = .Range(.Cells(2, 1), .Cells(.Range("A" & Rows.Count).End(xlUp).Row, Plage.Count + 2)) 'tableau feuille2
x = 2
For Each Cel In Plage ' pour chaque valeur de la plage, donc pour chaque code
x = x + 1 'N° de colonne : 3 pour le 1er code, 4 pour le 2ème ...
.Cells(1, x) = Cel 'écriture du code en t^te de colonne
For i = LBound(Tab1) To UBound(Tab1) 'pour chaque ligne du tabeau feuil1
If Tab1(i, 5) = Cel Then Dico(Tab1(i, 1)) = 1 'si la colonne 5 = code on crée un enregistrement dans le dictionnaire
' avec pour clé le code client(colonne 1 du tableau)
Next
For j = LBound(TabFin) To UBound(TabFin) ' pour ligne du tableau feuil2
If Dico.exists(TabFin(j, 1)) Then TabFin(j, x) = Dico(TabFin(j, 1)) 'si dans le dictionnaire il existe une ligne pour
le code client(colonne 1 du tableau) on écrit dans la
colonne x du tableau
Next
Dico.RemoveAll ' on efface tous les enregistrements du dictionnaire
Next
.Cells(2, 1).Resize(UBound(TabFin, 1), UBound(TabFin, 2)) = TabFin ' on copie le tableau sur la feuille
End With
End Sub