Private Sub UserForm_Initialize() 'à l'intialisation de l'UserForm
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim r As Range 'déclare la variable r (Recherche)
Application.ScreenUpdating = False 'masque les changements àl'écran
With Sheets("Feuil1") 'prned en compte l'onglet "Feuil1"
dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'de'finit la dernière ligne édité dl de la colonne A
Set pl = .Range("A2:A" & dl) 'définit la plage pl (colonne A)
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
'concatene en colonne D les 3 cellules des colonne A, B et C
cel.Offset(0, 3).Value = cel.Value & cel.Offset(0, 1).Value & cel.Offset(0, 2).Value
Next cel 'prochaine cellule de la plage pl
Set pl = pl.Offset(0, 3) 'redéfinit la plage pl (colonne D)
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
If cel.Interior.ColorIndex <> 3 Then 'condition : si la cellule n'est pas colorée de rouge
pa = cel.Address 'définit l'adresse de la première occurrence trouvée pa
Set r = pl.Find(cel.Value, cel, xlValues, xlWhole) 'définit la recherche r
If Not r Is Nothing And r.Address < pa Then 'condition 2 : si il existe d'autre accurrences ailleurs qu'en pa
Do 'exécute
r.Interior.ColorIndex = 3 'colore la cellule de rouge
Set r = pl.FindNext(r) 'redéfinit la recherche (occurrence suivante)
Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrences ailleurs qu'en pa
End If 'fin de la condition 2
End If 'fin de la condition 1
Next cel 'prochaine cellule de la boucle
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
If cel.Interior.ColorIndex <> 3 Then 'condition : si la cellule n'est pas colorée de rouge
With Me.ListBox1 'prend en compte la ListBox1
.AddItem cel.Offset(0, -3).Value 'ajoute la valeur de la colonne A
.Column(1, .ListCount - 1) = cel.Offset(0, -2).Value 'ajoute la valeur de la colonne B
.Column(2, .ListCount - 1) = cel.Offset(0, -1).Value 'ajoute la valeur de la colonne C
End With 'fin de la prise en compte de la ListBox1
End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
.Columns(4).Clear 'efface la colonne D
End With 'fin de la prise en compte de l'onglet "Feuil1"
Application.ScreenUpdating = True 'affiche les changements àl'écran
End Sub