Sub Macro1()
Dim OB As Object 'déclare la variable OB (Onglet de Base)
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 R As Range 'déclare la variable R (Recherche)
Set OB = Sheets("Feuil1") 'définit l'onglet OB
DL = OB.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet OB
Set PL = OB.Range("A1:A" & DL) 'définit la plage 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
If CEL.Value <> "" Then D(CEL.Value) = "" 'si la cellule n'est pas vide, alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
TMP = D.keys 'récupère les valeurs uniques (sans doublons) de la colonne A dans le tableau temporaire TMP
For I = 0 To UBound(TMP) 'boucle sur toutes les valeurs (uniques) du tableau TMP
'définit la recherche R (recherche la valeur unique dans la plage PL, en partant de la dernìere ligne de cette plage, valeur entière)
Set R = PL.Find(TMP(I), OB.Cells(DL, 1), xlValues, xlWhole)
Application.Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un nouvel onglet en dernière position
ActiveSheet.Name = TMP(I) 'renomme l'omglet avec le nom de la valeur unique
R.EntireRow.Copy Sheets(TMP(I)).Range("A1") 'copie la ligne de la première occurrence trouvée dans la cellule A1 du nouvel onglet
Next I 'nouvelle valeur unique de la boucle
End Sub