Private Temoin As BooleanSub 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)
Dim rao As Range 'décalre la variable rao (Recherche Autre Onglet)
Dim pa As String 'déclare la variable pa (Première Adresse)
'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
If l < 10 And l > 5 Then
Set rao = Sheets("M1").Rows("6:9").Find(Target.Value, , xlValues, xlWhole)
If Not rao Is Nothing Then 'condition : si il existe au moins un doublon dans M2
'si "Non" au message, la cellule editée est effacée
If MsgBox("Doublon dans l'onglet M1 avec : " & rao.Address(0, 0) & Chr$(10) & "Voulez-vous le garder ?", vbYesNo + vbInformation, _
"Détection doublon") = vbNo Then Target.ClearContents:: Temoin = False: Exit Sub
End If 'fin de la condition
End If
pa = Target.Address 'définit la première adresse pa
Set r = Rows(l).Find(Target.Value, Target, xlValues, xlWhole) 'définit la recherche
If Not r Is Nothing And r.Address <> pa Then 'condition : si il existe au moins un doublon
'si "Non" au message, la cellule editée est effacée
If MsgBox("Doublon dans cet onglet avec : " & r.Address(0, 0) & 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