Bonjour Nextia, bonjour le forum,
Peut-être comme ça :
Sub Macro1()
Dim OA As Worksheet 'déclare la variable OA (Onglet A)
Dim OB As Worksheet 'déclare la variable OB (Onglet B)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim PCV As Integer 'déclare la variable PCV (Première Colonne Vide)
Set OA = Worksheets("A alimenter") 'définit l'onglet OA
Set OB = Worksheets("Base de données") 'définit l'onglet OB
DL = OB.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne B de l'onglet OB
For I = 2 To DL 'boucle 1 : sur toutes les lignes I de 2 à DL
If OB.Cells(I, "A") <> "" Then 'condition : si la cellule ligne I colonne A de l'onglet OB n'est pas vide
Set R = OA.Columns(1).Find(OB.Cells(I, "A").Value, , xlValues, xlWhole) 'de'finit la recherche R (recherche la valeur entière dans la colonne 1 de l'onglet OA)
If Not R Is Nothing Then 'condition 2 : s'il existe au moins une occurrence trouvée
LI = R.Row 'définit la ligne LI de la première occurrence trouvée
Else 'sinon (aucune occurrence trouvée)
GoTo suite 'va à l'étiquette "suite"
End If 'fin de la condition 2
For J = 1 To 4 'boucle 2 : sur 4 colonnes
PCV = OA.Cells(LI, Application.Columns.Count).End(xlToLeft).Column + 1 'définit la première colonne vide de la ligne LI de l'onglet OA
OA.Cells(LI, PCV).Value = OB.Cells(I, J + 1).Value 'récupère la valeur de la cellule ligne I, colonne J+1 de l'onglet OB
Next J 'prochaine colonne de la boucle 2
Else 'sinon (condition 1)
For J = 1 To 4 'boucle sur 4 colonnes
PCV = OA.Cells(LI, Application.Columns.Count).End(xlToLeft).Column + 1 'définit la première colonne vide de la ligne LI de l'onglet OA
OA.Cells(LI, PCV).Value = OB.Cells(I, J + 1).Value 'récupère la valeur de la cellule ligne I, colonne J+1 de l'onglet OB
Next J 'prochaine colonne de la boucle
End If 'fin de la condition 1
suite: 'étiquette
Next I 'prochaine ligne de la boucle 1
End Sub