Public Sub Macro1()
Dim OS As Object 'déclare la variable OS (Onglet Source)
Dim I As Byte 'déclare la variable I (Incrément)
Dim OD As Object 'déclare la variable OD (Onglet Destination)
Set OS = Sheets("extract") 'définit l'onglet source OS
OS.Range("L10") = OS.Range("H10") 'copie en L10 l'étiquette de la donnée à filter
OS.Range("A10").CurrentRegion.AdvancedFilter xlFilterCopy, , OS.Range("L10"), True 'récupère la liste des villes sans doublon à partir de L11
For I = 11 To OS.Cells(Application.Rows.Count, 12).End(xlUp).Row 'boucle sur tous les élément uniques de la colonne L
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set OD = Sheets(OS.Cells(I, 12).Value) 'définit l'onglet de destination OD (génère une erreur si cet onglet n'existe pas)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'efface l'erreur
Sheets("Template").Copy after:=Sheets(Sheets.Count) 'copy l'onglet "Template"
ActiveSheet.Name = OS.Cells(I, 12).Value 'renomme la copie de l'onglet
Set OD = ActiveSheet 'définit l'onglet de destination OD
End If 'fin de la condition
On Error GoTo 0 'supprime la gestion des erreurs
OD.Range("C1").Value = OS.Range("H10") 'copie en C1 l'étiquette de la donnée à filter
OD.Range("C2").Value = OS.Cells(I, 12).Value 'copie en C2 la valeur du critère du filtre
OS.Range("A10").CurrentRegion.AdvancedFilter xlFilterCopy, OD.Range("C1:C2"), OD.Range("A6:I6"), False 'Copy les données filtrée dans l'onglet OD
OD.Range("C1:C2").Clear 'efface la plage C1:C2 de l'onglet OD ayant servi au filtreavancé
Next I 'prochain élément de la boucle
OS.Range("L10:L" & OS.Cells(Application.Rows.Count, 12).End(xlUp).Row).Clear 'supprime la liste des éléments uniques de l'onglet OS ayant servi au filter avancée
End Sub