Bonsoir,
sur la base de votre fichier :
Option Explicit
' plage des groupes d'options
Const GroupesOptions = "d3:d5 d8:d11 d14:d19"
' évite la saise de donnée de cellule lors du double clic gauche
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim grp
For Each grp In Split(GroupesOptions)
If Not Intersect(Target, Union(Range(grp), Range("D1"))) Is Nothing Then Cancel = True
Next
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim grp, cel As Range
If Target.CountLarge > 1 Then Exit Sub
If Not Intersect(Columns("b:c"), Target) Is Nothing Then Range("d1").Select: Beep
If Target.Column <> Range(Split(GroupesOptions)(0)).Column Then Exit Sub
On Error GoTo err01
Application.EnableEvents = False
For Each grp In Split(GroupesOptions)
If Not Intersect(Target, Range(grp)) Is Nothing Then
For Each cel In Range(grp)
If cel.Address = Target.Address Then
cel.Value = IIf(cel.Value = Chr(254), Chr(111), Chr(254))
Else
cel.Value = Chr(111)
End If
Next
Range("d1").Select
Exit For
End If
Next grp
err01:
Application.EnableEvents = True
End Sub
Et comme il y a le changement de cellule lors de la sélection d'une cellule à cocher et qu'il n'y a pas accès au double clic, le code Change n'est plus utile.
Le MEF non plus...
Le fait de ne pas utiliser Application.ScreenUpdating évite d'avoir quelque fois le clignotement des ascenseurs de la fenêtre...
Une boucle qui switch la valeur de la cellule cliquée (comme cela on peut la désélectionner) et qui passe en non cochée les autres.
@ bientôt
LouReeD