Private test As Boolean 'déclare la variable test
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
If test = True Then Exit Sub 'si test est vraie, sort de la procédure
If Selection.Cells.Count > 1 Then Exit Sub 'si la sélection contient plus d'une seule cellule, sort de la procédure
If Target.Value = "" Then Exit Sub 'si la cellule est effacée, sort de la procédure
'si le changement a lieu ailleurs que dans la plage A1:A10, sort de la procédure (tu adapteras à ton cas)
If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub
test = True 'définit la variable test
'condition : si "oui" au message
If MsgBox("Validez-vous cette entrée ?", vbYesNo, "Attention !") = vbYes Then
ActiveSheet.Unprotect 'déprotège l'onglet
Target.Locked = True 'verrouille la cellule modifiée
ActiveSheet.Protect 'protège l'onglet
Else 'sinon
Target.Select 'sélectionne la cellule modifié
Target.ClearContents 'supprime le contenu de la cellule modifié (cette action relance la procédure d'où le test...)
End If 'fin de la condition
test = False 'redéfinit la variable test
End Sub