Sub Macro1()
Dim cl As Workbook 'déclare la variable cl (CLasseur)
Dim cm As Workbook 'déclare la variable cm (Classeur Maître)
Dim ce As Workbook 'déclare la variable ce (Classeur Esclave)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim x As Byte, y As Byte 'définit les variables x et y
Set cm = ThisWorkbook 'définit le classeur maître
For Each cl In Workbooks 'boucles sur tous les classeurs ouverts
If cl.Name <> "PERSO.XLS" Then GoTo suite 'si il existe un classeur "PERSO.XLS", va à l'étiquette "suite"
Next cl 'prochain classeur de la boucle
If Workbooks.Count > 2 Then 'condition : si le nombre de classeurs ouverts est supérieur à 2
MsgBox "Vous devez fermer tous les autres classeurs !": Exit Sub 'message, sort de la procédure
End If 'fin de la condition
For Each cl In Workbooks 'boucles sur tous les classeurs ouverts
If cl.Name <> cm.Name Then 'condition : si ne classeur n'est pas le classeur maître
Set ce = cl 'définit le classeur esclave
Exit For 'sort de la boucle
End If 'fin de la condition
Next cl 'prochain classeur de la boucle
GoTo after 'va à l'étiquette "after"
suite: 'étiquette
If Workbooks.Count > 3 Then 'condition : si le nombre de classeurs ouverts est supérieur à 3
MsgBox "Vous devez fermer tous les autres classeurs !": Exit Sub 'message, sort de la procédure
End If 'fin de la condition
For Each cl In Workbooks 'boucles sur tous les classeurs ouverts
If cl.Name <> "PERSO.XLS" Then 'si le nom du classeur est différent de "PERSO.XLS"
If cl.Name <> cm.Name Then 'condition : si ne classeur n'est pas le classeur maître
Set ce = cl 'définit le classeur esclave
Exit For 'sort de la boucle
End If 'fin de la condition
End If
Next cl
after: 'étiquette
With cm.Sheets("Feuil1") 'prend en compte le classeur maître,onglet "Feuil1"
Set pl = .Range("B2") 'définit la plage pl
y = 2 'définit la variable y
For x = 1 To 4 'boucle sur 4 groupes
Set pl = Application.Union(pl, .Range(.Cells(2, y), .Cells(7, y + 2))) 'redéfinit la plage pl
Set pl = Application.Union(pl, .Range(.Cells(10, y), .Cells(11, y + 2))) 'redéfinit la plage pl
y = y + 4 'redéfinit la variable y
Next x 'prochain groupe
End With 'fin de la prise en compte du classeur maître, onglet "Feuil1"
For Each cel In pl 'boucle sur chaque cellule cel de la plage pl
ce.Sheets("Feuil1").Range(cel.Address).Value = cel.Value 'récupère dans le classeur esclave la valeur de la cellule cel
Next cel 'prochaine cellule de la boucle
ce.Sheets("Feuil1").Calculate'Calcule (pour mettre à jour les formules)
End Sub