Voilà ton code révisé d'après ce que j'ai compris, et en tenant compte des remarques précédentes :
Sub Recherche()
'Déclaration des variables
Dim p As Worksheet, r As Worksheet, d As Worksheet, s As Worksheet, f As Worksheet, Lig As Long, Resultat As Range
'Données
Set p = Worksheets("Liste Personnel") 'feuilles avec la liste du personnel ("A3:Ax")
Set r = Worksheets("Recap") 'feuilles de gestion des formations (colA: Personnel; colB: Poste; col C: Formation)
Set d = Worksheets("Data") 'feuilles d'extraction des données
Set s = Worksheets("Synthese") 'feuilles avec la liste des poste ("A3:Ax")
Set f = Worksheets("Liste formation") 'feuilles avec la liste des formations ("A3:Ax")
For Lig = 3 To p.Cells(Rows.Count, 1).End(xlUp).Row
'Reporte la liste du personnel sur Formation
r.Range("A" & Lig) = p.Range("A" & Lig)
'Recherche et copie le poste en fonction du nom
Set Resultat = s.Range("B3:B50000").Find(r.Range("A" & Lig), LookIn:=xlValues, LookAt:=xlWhole)
If Not Resultat Is Nothing Then r.Range("B" & Lig) = Resultat.Offset(0, -1)
Next Lig
End Sub