Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Set CS = ThisWorkbook 'définit le classeur source CS
CA = CS.Path & "\" 'définit le chemin d'accès CA
For I = 1 To CS.Sheets.Count 'boucle 1 : sur tous les onglets du classeur source
Select Case CS.Sheets(I).Name 'agit en fonction du nom de l'onglet
'mettre ici la liste de tous les onglets non concernés
Case "Retard TCD", "BDD", "Périmètre", "Data_Retards_Agrégé", "Data_Retards_Détail", "Data_Retards_SAVANCE"
'pour les cas ci-dessus, rien ne se passe
Case Else 'pour tous les autre cas
Select Case Split(CS.Sheets(I).Name, " ")(1) 'agit en fonction du mot après le premier espace du nom de l'onglet
Case "RETARD" 'cas "RETARD"
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CD = Workbooks(Split(CS.Sheets(I).Name, " ")(2) & ".xlsx")
'définit le classeur de destination CD (génère une erreur si ce classeur n'est pas ouvert)
'le nom du classeur correspond au mot après le second espace du nom de l'onglet
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'supprime l'erreur
Workbooks.Add 'ajoute un classeur vierge
Set CD = ActiveWorkbook 'définit la classeur de destination CD
CD.SaveAs (CH & Split(CS.Sheets(I).Name, " ")(2) & ".xlsx")
'enregistreSous le classeur avec le même chemin d'accès et avec le mot après le second espace du nom de l'onglet
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
CS.Sheets(I).Copy Before:=CD.Sheets(1) 'copie l'onglet I du classeur source en premier dans le classeur destination
Case Else 'tous les autres cas
CS.Sheets(I).Copy Before:=CD.Sheets(2) 'copie l'onglet I du classeur source en second dans le classeur destination
Application.DisplayAlerts = False 'empêche les messages d'Excel
For J = CD.Sheets.Count To 3 Step -1 'boucle 2 : sur les derniers onglets à partir du troisième
CD.Sheets(J).Delete 'supprime l'onglet
Next J 'prochain onglet de la boucle 2
Application.DisplayAlerts = True 'permet les messages d'Excel
CD.Close Savechanges:=True 'ferme le classeur destination en enregistrant les modifications
End Select 'fin de l'action en fonction du mot après le premier espace du nom de l'onglet
End Select
Next I 'prochain onglet de la boucle 1
End Sub