Sub Macro1()
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim dico As Object 'déclare la variable dido (DICtiOnnaire)
Dim temp As Variant 'déclare la variable temp (tableau TEMPoraire)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim li As Long 'déclare la variable li (LIgne)
Application.ScreenUpdating = False 'masque les changement à l'écran
Application.Calculation = xlCalculationManual 'calcul manuel
Sheets("feuil1").Visible = True 'affiche l'onglet "Feuil1"
With Sheets("feuil1") 'prend en compte l'onglet "Feuil1"
dl = .Range("A" & Rows.Count).End(xlUp).Row 'définit la dernière ligne dl
.Columns("A:H").Interior.ColorIndex = xlNone 'enlève les couleurs aux colonne A à H
Set pl = .Range("A2:A" & dl) 'définit la plage pl
Set dico = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico
'***************************************
'récupération des codes PTF sans doublon
'***************************************
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
dico(cel.Value) = "" 'alimente le dictionnaire dico
Next cel 'prochaine cellule de la boucle
temp = dico.keys 'récupère les valeurs sans doublon
'********************
'Filtage par code PTF
'********************
For x = LBound(temp) To UBound(temp) 'boucle de la première à la dernière valeur du tableau temp
.Range("A1").AutoFilter Field:=1, Criteria1:=temp(x) 'filtre par rapport à la valeur
'****************
'Doublons sur ISN
'****************
For Each cel In pl.Offset(0, 2).SpecialCells(xlCellTypeVisible) 'boucle sur toutes les cellules filtrées de la colonne C
pa = cel.Address 'définit la première adresse pa
Set r = pl.Offset(0, 2).SpecialCells(xlCellTypeVisible).Find(Left(cel.Value, 9), cel, xlValues, xlPart) 'définit la recherche r
If Not r Is Nothing And r.Address <> cel.Address Then 'condition : si il existe une occurrence ailleurs qu'en pa
Do 'exécute
li = r.Row 'définit la ligne li
.Cells(li, 1).Interior.ColorIndex = 50 'couleur verte colonne A
.Cells(li, 3).Interior.ColorIndex = 50 'couleur verte colonne C
.Cells(li, 4).Interior.ColorIndex = 50 'couleur verte colonne D
.Cells(li, 5).Interior.ColorIndex = 50 'couleur verte colonne E
Set r = pl.Offset(0, 2).SpecialCells(xlCellTypeVisible).FindNext(r) 'redéfinit la recherche r (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
Next cel 'prochaine cellule de la boucle
Set r = Nothing 'initialise r
pa = "" 'initialise pa
'********************
'Doublons sur Libellé
'********************
For Each cel In pl.Offset(0, 3).SpecialCells(xlCellTypeVisible) 'boucle sur toutes les cellules filtrées de la colonne D
'Condition : si le nombre d'occurrence de la valeur de la cellule est supérieur à 1 et si la cellule n'est pas colorée de vert
If Application.WorksheetFunction.CountIf(pl.Offset(0, 3).SpecialCells(xlCellTypeVisible), cel.Value) > 1 And cel.Interior.ColorIndex <> 55 Then
Set r = pl.Offset(0, 3).SpecialCells(xlCellTypeVisible).Find(Left(cel.Value, 9), , xlValues, xlPart) 'définit la recherche r
pa = r.Address 'définit la première adressse pa
Do 'exécute
li = r.Row 'définit la ligne li
.Cells(li, 1).Interior.ColorIndex = 50 'couleur verte colonne A
.Cells(li, 3).Interior.ColorIndex = 50 'couleur verte colonne C
.Cells(li, 4).Interior.ColorIndex = 50 'couleur verte colonne D
.Cells(li, 5).Interior.ColorIndex = 50 'couleur verte colonne E
Set r = pl.Offset(0, 3).SpecialCells(xlCellTypeVisible).FindNext(r) 'redéfinit la recherche r (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
Next cel 'prochaine cellule de la boucle
Next x 'prochaine valeur du tableau temp
.Range("A1").AutoFilter 'supprime le filtre automatique
End With 'fin de la prise en compte de l'onglet "Feuil1"
Application.ScreenUpdating = True 'affiche les changements à l'écran
Application.Calculation = xlAutomatic 'calcul automatique
End Sub