Private Temoin As Boolean
Sub Worksheet_Change(ByVal Target As Range)
Dim l As Integer 'déclare la variable l (Ligne)
Dim r As Range 'déclare la variable r (Recherche)
'si le changement a lieu ailleurs que dans la plage D6:R100 ou si plusieurs cellules sélectionnées, sort de la procédure
If Intersect(Range("D6:R100"), Target) Is Nothing Or Selection.Rows.Count > 1 Then Exit Sub
'si la cellule est effacée ou si témoin est vraie, sort de la procédure
If Target.Value = "" Or Temoin = True Then Exit Sub
l = Target.Row 'définit la ligne l
Temoin = True 'attribue la valeur "vrai" à la variable Temoin
Set r = Rows(l).Find(Target.Value, , xlValues, xlWhole) 'définit la recherche
If Not r Is Nothing Then 'condition : si il existe au moins un doublon
'si "Non" au message, la cellule editée est effacée
If MsgBox("Doublon avec : " & r.Address & Chr$(10) & "Voulez-vous le garder ?", vbYesNo + vbInformation, _
"Détection doublon") = vbNo Then Target.ClearContents
End If 'fin de la condition
Temoin = False 'reinitialise la variable Temoin
End Sub