Sub Macro1()
Dim D As Object 'déclare la variable D (DONNEES)
Dim C As Object 'déclare la variable C (CATEGORIES)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)
Set D = Sheets("DONNEES") 'définit l'onglet D
Set C = Sheets("CATEGORIES") 'définit l'onglet C
DL = C.Cells(Application.Rows.Count, 3).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 3 (=C) de l'onglet C
Set PL = C.Range("C2:C" & DL) 'définit la palge PL
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
Set R = D.Columns(2).Find(CEL.Value, , xlValues, xlPart) 'définit la recherche R (Recherche le mot clé dans la colonne 2 (=B) de l'onglet D)
If Not R Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
PA = R.Address 'définit l'adresse de la première occurrence trouvée
Do 'exécute
R.Offset(0, -1).Value = CEL.Offset(0, 1).Value 'récupère la catégorie
Set R = D.Columns(2).FindNext(R) 'redéfinit la recherche R (occurrence suivante)
Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle
End Sub