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