Private test As Boolean 'déclare la variable TEST
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pl As Range 'declare la variable PL (PLage)
If test = True Then Exit Sub 'condition : si TEST est [vrai], sort de la procédure
ScrollArea = "" 'autorise le déplacement dans tout l'onglet
'définit la plage PL (à adapter à ton cas)
Set pl = Application.Union(Range("B5"), Range("C4"), Range("D7"), Range("E8"))
'condition : si l'édition a lieu dans une des cellues de la plage PL
If Not Application.Intersect(Target, pl) Is Nothing Then
test = True 'redéfinit la variable TEST
'si valeur non mumérique, message, bloque le déplacement à la cellule éditée
If IsNumeric(Target.Value) = False Then MsgBox "Valeur numérique uniquement !": ScrollArea = Target.Address: GoTo FIN
'si cellule effacée, message, bloque le déplacement à la cellule éditée
If Target.Value = "" Then MsgBox "La cellule ne peut être vide !": ScrollArea = Target.Address: GoTo FIN
'si valeur égale à zéro, message, bloque le déplacement à la cellule éditée
If Target.Value = 0 Then MsgBox "La valeur ne peut pas être égale à zéro !": ScrollArea = Target.Address: GoTo FIN
End If
FIN: 'étiquette
test = False 'réinitialise la variable TEST
End Sub