Private Sub Worksheet_Change(ByVal Target As Range)
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pt As Range 'déclare la variable pt (Plage du Tableau)
Dim pl As Range 'déclare la variable pl (Plage de la Ligne)
Dim che As Byte 'déclare la variable che
Dim chi As Byte 'déclare la variable chi
Dim cc As Byte 'déclare la variable cc (Comptage de Ch)
If Target.Value = "" Then Exit Sub 'si la cellule est effacée, sort de la procédure
dl = Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colone 1 (=A)
Set pt = Range("B4:AF" & dl) 'définit la plage du tableau
If Application.Intersect(Target, pt) Is Nothing Then Exit Sub 'si le changement a lieu en dehors de la plge du tableau, sort de la procédure
Set pl = Cells(Target.Row, 2).Resize(1, 31) 'définit la plage de la ligne éditée
che = Application.WorksheetFunction.CountIf(pl, "CHI") 'définit le nombre de "CHE" dans la ligne éditée
chi = Application.WorksheetFunction.CountIf(pl, "CHE") 'définit le nombre de "CHI" dans la ligne éditée
cc = che + chi 'définit le comptage des "CHE" + "CHI"
If cc > 1 Then Exit Sub 'si le comptage est supérieur à 1, sort de la procédure
MsgBox "Alerte !" 'message
End Sub