Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
For Each O In Worksheets 'boucle 1 sur tous les onglets O du classeur
Select Case Left(O.Name, 10) 'agit en fonctions des 10 premiers caractères du nom de l'onglet O
Case "EXPEDITION" 'cas "EXPEDITION"
COL = 18 'définit la colonne COL
Set OS = O 'définit l'onglet source OS
GoTo suite 'va à l'étiquette "suite"
Case "PLANNING G" 'cas "PLANNING G"
COL = 19 'définit la colonne COL
Set OS = O 'définit l'onglet source OS
GoTo suite 'va à l'étiquette "suite"
End Select 'fin de l'action en fonctions des 10 premiers caractères du nom de l'onglet O
GoTo prochain 'va à l'étiquette "prochain"
suite: 'étiquette
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeur TV
For I = 4 To UBound(TV, 1) 'boucle 2 : sur toutes les ligne I du tableau des valeurs (en partant de la 4ème)
If TV(I, COL) = "" Then 'condition 1 : si la donnée ligne I colonne COL est vide
If TV(I, 9) <> "" Then 'condition 2 : si la donnée ligne I colonne 9 (=> colonne I) n'est pas vide
Set OD = Worksheets(TV(I, 9)) 'définit l'onglet destinatoion OD
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
DEST.Resize(1, UBound(TV, 2) - 1).Value = Application.Index(TV, I) 'renvoie dans DEST redimensionnée la ligne I du tableau TV
OS.Cells(I, COL).Value = "X" 'écrit "X" dans la colonne COL "Fait"
End If 'fin de la condition 2
End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 2
prochain: 'étiquette
Next O 'prochaine onglet de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub