Sub Macro1()
Dim O As Object 'déclare la variable O (Onglet)
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 Integer 'déclare la variable I (Incrément)
Dim OD As Object 'déclare la variable OD (Onglet de Destination)
Dim PLV As Range 'déclare la variable PLV (PLage Visible)
Dim DEST As Range 'déclare la variable DEST (CEllule de DESTination)
Set O = Sheets("Données") 'définit l'onglet O
DL = O.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 O
Set PL = O.Range("A2:A" & 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) = "" 'aliment ele dictionnaire D
Next CEL 'prochaine cellule de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments uniques de la plage PL (sans doublons)
For I = 0 To UBound(TMP) 'boucle sur tous les élément du tableau TMP
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set OD = Sheets(TMP(I)) 'définit l'onglet de destination OD (génère une erreur si c'est onglet n'existe pas)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'annule l'erreur
Sheets.Add After:=Sheets(Sheets.Count) 'ajoute une onglet
ActiveSheet.Name = TMP(I) 'renomme l'onglet
Set OD = ActiveSheet 'définit l'onglet de destinadtion OD
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
O.Range("A1").AutoFilter Field:=1, Criteria1:=TMP(I) 'filtre la colonne 1 (=A) de l'onglet O avec TMP(I) comme critère
Set PLV = PL.Resize(, 9).SpecialCells(xlCellTypeVisible) 'définit la plage PLV, plage des cellules visibles (non filtrées)
'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet OD)
Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
PLV.Copy DEST 'copie la plge PLV et la colle dans DEST
O.Range("A1").AutoFilter 'supprime le filtre automatique
Next I 'prochaine élément du tableau TMP
End Sub