Sub Macro1()
Dim cel As Range 'déclare la variable cel (CELlule)
Dim r As Range 'déclare la variable r (Recherche)
Dim ac As String 'déclare la variable ac (AC)
Dim ru As String 'déclare la variable ru (RU)
Dim li As Byte 'déclare la variable li (LIgne)
Dim col As Byte 'déclare la variable col (COLonne)
For Each cel In Range("C4:E7") 'boucle sur toutes les cellules cel de la plage C4:E7
ac = Cells(cel.Row, 2).Value 'définit la variable ac (valeur de la cellule dans la même ligne que cel, dans la colonne 2 = B)
ru = Cells(3, cel.Column) 'définit la variable ru (valeur de la ligne 3, dans la même colonne que cel)
'définit la recherche r (recherche dans la plage H4:H30 la valeur de ac en entier)
Set r = Range("H4:H30").Find(ac, , xlValues, xlWhole)
'si au moins une occurrence est trouvée, récupère son numéro de ligne dans la variable li, sinon message et sort de la procédure
If Not r Is Nothing Then li = r.Row Else MsgBox "AC non trouvé": Exit Sub
'redéfinit la recherche r (recherche dans la plage I3:O3 la valeur ru en entier)
Set r = Range("I3:O3").Find(ru, , xlValues, xlWhole)
'si a moins une occurrence est trouvée, récupère son numéro de colonne dans la variable col, sinon message et sort de la procédure
If Not r Is Nothing Then col = r.Column Else MsgBox "RU non trouvé": Exit Sub
'envoie dans la cellule cel la valeur de la cellue en ligne li, colonne col
cel.Value = Cells(li, col).Value
Next cel 'prochaine cellule de la boucle
End Sub