Option Explicit
Dim InChange As Boolean
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Pas_Prot As String
Pas_Prot = 'toto'
'
' Si cette procédure n'est pas en train de s'exécuter
If Not InChange Then
'
' on place un 'drapeau' pour signifier qu'elle est en cours
' d'exécution
InChange = True
'
' Si la modification concerne la colonne 10 ( col J )
If Not Intersect(Target, Columns(10)) Is Nothing Then
ActiveSheet.Unprotect (Pas_Prot)
'
' alors si une date a été saisie
If IsDate(Target) Then
'
' on inscrit 5 une cellule à droite de Target ( Col C)
Target.Offset(0, -7) = 5
' on inscrit 'soldé' deux cellules à droite de Target (Col L)
Target.Offset(0, 2) = 'soldé'
'
' si la saisie n'est pas une date ...'
Else
'
' message à l'utilisateur = effacement saisie + re-sélection
MsgBox 'la saisie ne correspond pas à une date...', vbOKOnly + vbCritical
Target = ''
Target.Select
End If
ActiveSheet.Protect Password:=Pas_Prot, DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
'
' on indique que l'on sort de la procédure
InChange = False
End If
End Sub