Sub Macro1()
Dim E As Worksheet 'déclare la variable E (Onglet Entrée)
Dim D As Worksheet 'déclare la variable D (Onglet Données)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des valeurs)
Dim Dico As Object 'déclare la variable Dico (Dictionnaire)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim I As Long 'déclare la variable I (Incrément)
Set E = Worksheets("ENTREES") 'définit l'onglet E
Set D = Worksheets("DONNEES") 'définit l'onglet D
Set Dico = CreateObject("Scripting.Dictionary") 'définit le dictionnaire Dico
DL = E.Cells(Application.Rows.Count, "I").Row 'définit la dernière ligne éditée DL de la colonne I de l'onglet E
TV = E.Range("I1:I" & DL) 'définit le tableau des valeurs TV
For I = 2 To DL 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
Dico(TV(I, 1)) = "" 'alimente le dictionnaire Dico avec les données de la colonne 1 du tableau des valeurs TV (=> colonne I)
Next I 'prochaine ligne de la boucle
TMP = Dico.Keys 'récupère dans le tableau temporaire TMP la liste du dictionnaire Dico sans doublon
DL = D.Cells(Application.Rows.Count, "I").Row 'définit la dernière ligne éditée DL de la colonne I de l'onglet D
D.Range("I2:I" & DL).Clear 'efface d'éventuelles anciennes données
D.Range("I2").Resize(UBound(TMP) + 1, 1).Value = Application.Transpose(Dico.Keys) 'renvoie la liste sans doublon à partir de I2
D.Range("I1:I" & UBound(TMP) + 1).Sort Key1:=DON.Range("I3"), Header:=xlYes 'tri
lig = D.Range("I" & Rows.Count).End(xlUp).Row 'définit la dernière ligne éditée lig de la colonne I de l'onglet D
For I = 3 To lig * 2
Sheets("DONNEES").Range("I" & I).Insert (xlDown)
I = I + 1
Next I
Application.ScreenUpdating = True
End Sub