Sub Macro1()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim OS As Object 'déclare la variable OS (Onglet Source)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim I As Long 'déclare la variable I (Incrément)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Object 'déclare la variable OD (Onglet Destination)
Dim PLV As Range 'déclare la variable PLV (PLage Visible)
Dim DEST As Range 'déclare la variable DEST (cellule DESTination)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CS = ThisWorkbook 'définit le classeur source CS
CH = CS.Path & "/" 'définit le chemin d'accès
Set OS = CS.Sheets("Feuil1") 'définit l'onglet source OS
DL = OS.Cells(Application.Rows.Count, 6).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 6 (=F) de l'onglet OS
Set PL = OS.Range("F6:F" & DL) 'définit la palge PL
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
D(CEL.Value) = "" 'alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
TMP = D.keys 'récupère dans la tableau temporaire TMP les éléments uniques (sans doublon) du dictionnaire D
For I = 0 To UBound(TMP) 'boucle sur tous les éléments uniques du tableau temporaire TMP
Application.DisplayAlerts = False 'masque les messages Excel
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Workbooks.Open (CH & TMP(I) & ".xlsx") 'ouvre le classeur TMP(I) (génère une erreur si ce classeur n'existe pas)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'efface l'erreur
Workbooks.Add 'ouvre un classeur vierge
ActiveWorkbook.SaveAs (CH & TMP(I) & ".xlsx") 'enregistre le fichier avec TMP(I) comme nom
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set CD = ActiveWorkbook 'définit le classeur destination CD
CD.Sheets("Feuil1").Delete 'efface l'onglet "Feuil1" du classeur destination CD
Application.DisplayAlerts = True 'affiche les messages Excel
OS.Copy Before:=CD.Sheets(1) 'copy l'onglet Feuil1 du classeur source dans le classeur destination
Set OD = CD.Sheets("Feuil1") 'définit l'onglet destination OD
OD.Range("F1").AutoFilter Field:=6, Criteria1:="<>" & TMP(I) 'filtre la colonne 4 (=D) de l'onglet OS avec TMP(I) comme critère
DL = OD.Cells(Application.Rows.Count, 6).End(xlUp).Row 'redéfinit la dernière ligne éditée DL de la colonne 6 (=F) de l'onglet OD
Set PL = OD.Range("F6:F" & DL) 'redéfinit la palge PL
OD.Range("F1").AutoFilter Field:=6, Criteria1:="<>" & TMP(I) 'filtre la colonne 6 (=F) de l'onglet OD avec "différnt de TMP(I)" comme critère
Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit la plage PLV (cellules visibles, non filtrées, de la plage PL)
PLV.EntireRow.Delete 'efface les lignes entières de la plage PLV
OD.Range("F1").AutoFilter 'supprime le filtre automatique
CD.Close SaveChanges:=True 'ferme le classeur destination en enregistrant les changements
Next I 'prochain élément de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub