Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
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 Integer 'déclare la variable J (incrément)
Dim NUM As Integer 'déclare la variable NUM (Numéro)
Dim R As Range 'déclare la variable R (Recherche)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim TEST As Boolean 'déclare la variable TEST
Set OS = Worksheets("Feuil1") 'définit l'onglet source OS
DL = OS.Cells(Application.Rows.Count, "D").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne D de l'onglet source
For I = 4 To DL 'boucle sur toutes les lignes I de 4 à DL
If OS.Cells(I, "G").Value <> "X" Then 'condition 1 : si la cellule ligne I colonne G est différente de "X"
NUM = Split(OS.Cells(I, "C").Value, " ")(1) 'récupère le numéro de l'objet (numéro après l'espace)
For J = 2 To Sheets.Count 'boucle sur tous les onglets J du second au dernier
Set R = Worksheets(J).Rows(5).Find(NUM, , xlValues, xlWhole) 'définit la recherche R (recherche la valeur entière du numéro NUM dans la ligne 5 de l'onglet J de la boucle)
If Not R Is Nothing Then 'condition : s'il existe au moins un occurrence trouvée
Set OD = Worksheets(J) 'définit l'onglet destination OD de la première occurrence trouvée
COL = R.Column - 1 'définit la colonne COL
TEST = True 'définit la variable TEST
Exit For 'sort de la boucle
End If 'fin de la condition
Next J 'prochain onglet de la boucle
If TEST = False Then 'condition 2 : si TEST est [Faux]
MsgBox Cells(I, "C").Value & " est introuvable !" 'message
Else 'sinon
OS.Cells(I, "G").Value = "X" 'ecrit "X" dans la cellule ligne I colonne G
LI = OD.Cells(Application.Rows.Count, COL).End(xlUp).Row + 1 'définit la première ligne vide LI de la colonne COL de l'onglet OD
OD.Cells(LI, COL).Value = OS.Cells(I, "D") 'renvoie la valeur de la cellule de la boucle en colonne D dans la cellule ligne LI colonne COL de l'onglet OD
OD.Cells(LI + 1, COL).Value = OS.Cells(I, "E") 'renvoie la valeur de la cellule de la boucle en colonne E dans la cellule ligne LI + 1 colonne COL de l'onglet OD
OD.Cells(LI + 1, COL + 1).Value = OS.Cells(I, "F") 'renvoie la valeur de la cellule de la boucle en colonne F dans la cellule ligne LI + 1 colonne COL +1 de l'onglet OD
End If 'fin de la condition 2
End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle
End Sub