Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim S1 As Workbook 'déclare la variable S1 (classeur Service 1)
Dim S2 As Workbook 'déclare la variable S2 (classeur Service 2)
Dim I As Byte 'déclare la variable I (Incrément)
Dim OS As Object 'déclare la variable OS (Onglet Source)
Dim OD As Object 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set CD = ThisWorkbook 'définit la classeur destination CD
CH = CD.Path & "\" 'définit le chemin CH
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set S1 = Workbooks("Service 1.xls") 'définit le classeur S1 (génère une erreur si le classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'efface l'erreur
Workbooks.Open (CH & "Service 1.xls") 'ouvre le classeur "Service 1.xls"
Set S1 = ActiveWorkbook 'définit la classeur S1
End If 'fin de la condition
Set S2 = Workbooks("Service 2.xls") 'définit le classeur S2 (génère une erreur si le classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'efface l'erreur
Workbooks.Open (CH & "Service 2.xls") 'ouvre le classeur "Service 2.xls"
Set S2 = ActiveWorkbook 'définit la classeur S2
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
For I = 1 To 12 'boucle sur les 12 mois
Set OD = CD.Sheets(I) 'définit l'onglet destination OD
Set OS = S1.Sheets(I) 'définit l'onglet source OS
'*****************************
'suppression anciennes données
'*****************************
OD.Rows(6 & ":" & Application.Rows.Count).Delete 'supprime toutes les lignes de l'onglet destination à partir de la ligne 6
OD.Rows(6 & ":" & Application.Rows.Count).RowHeight = 24 'définit la [hauteur de ligne] de toutes les lignes à partir de la ligne 6
'*********
'service 1
'*********
DL = OS.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet source OS
Set PL = OS.Range("A4:AF" & DL) 'définit la plage PL (onglet source OS)
PL.Copy OD.Range("A6") 'copie la plage PL et la colle dans la cellule A6 de l'onglet destination OD
'*********
'service 2
'*********
LI = OD.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la ligne Li (première ligne vide de la colonne A de l'onglet destination OD
OD.Range("B5:AF5").Copy OD.Cells(LI, 2).Resize(1, 31) 'copie la ligne fusionnée du "Service n°1" et la colle
OD.Range(OD.Cells(LI, 2), OD.Cells(LI, 32))(1).Value = "Service n°2" 'définit la valeur de la ligne collée
OD.Rows(LI).RowHeight = 30 'définit la [hauteur de ligne] de la ligne copiée
Set OS = S2.Sheets(I) 'redéfinit l'onglet source OS
DL = OS.Cells(Application.Rows.Count, 1).End(xlUp).Row 'redéfinit la dernière ligne éditée de la colonne 1 (=A) de l'onglet source OS
Set PL = OS.Range("A4:AF" & DL) 'redéfinit la plage PL (onglet source OS)
PL.Copy OD.Cells(LI + 1, 1) 'copie la plage PL et la colle dans la cellule ligne = Li + 1, colonne = 1 de l'onglet destination OD
'*******************
'légendes et formats
'*******************
Set DEST = OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(2, 1) 'définit la cellule de destination DEST
DEST.Offset(-1, 0).RowHeight = 15 'hauteur de ligne de la ligne intermédiare entre le tableau et les légendes
DEST.Resize(4, 1).HorizontalAlignment = xlCenter 'définit l'alignement horizontalement
DEST.Resize(4, 2).VerticalAlignment = xlCenter 'définit l'alignement Verticalement
'placement des légendes
DEST.Value = "P"
DEST.Offset(0, 1).Value = "Présent"
DEST.Offset(1, 0).Value = "A"
DEST.Offset(1, 1).Value = "Astreinte"
DEST.Offset(2, 0).Value = "R"
DEST.Offset(2, 1).Value = "Repos"
DEST.Offset(3, 0).Value = "V"
DEST.Offset(3, 1).Value = "Vacances"
OD.Rows(DEST.Row + 4 & ":" & Application.Rows.Count).RowHeight = 15 'définit la [hauteur de ligne] des lignes après les légendes
Next I 'prochain mois de la boucle
End Sub