Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim pl As Range 'déclare la variable pl (PLage)
Dim ca As Range 'décalre la variable ca (Colonnes à Afficher)
Set pl = Application.Union(Columns(2), Columns(4), Columns(6), Columns(8), Columns(10)) 'définit la plage pl
If Application.Intersect(Target, pl) Is Nothing Then Exit Sub 'si le double-clic a lieu ailleurs que dans la plage pl, sort de la procédure
If Target.Row <> 4 Then Exit Sub 'si le double-clic a lieu ailleurs que dans la ligne 4, sort de la procédure (ligne à supprimer éventuellement)
Cancel = True 'interdit le mode "Édition" lié au double-clic
Target.Value = IIf(UCase(Target.Value) = "X", "", "X") 'édite la cellule double-cliquée ("X" si la cellule est vide, Rien si la cellule contenait déjà un "X")
Select Case Target.Value 'agit en fonction de de la valeur de la cellule éditée
Case "X" 'cas "X"
Set ca = Target.Resize(1, 2) 'de'finit la plage ca
Cells.EntireColumn.Hidden = True 'masque toutes les cellules
ca.EntireColumn.Hidden = False 'affiche les colonnes de ca
Case Else 'autres cas
Cells.EntireColumn.Hidden = False 'affiche toutes les cellules
End Select 'fin de l'action en fonction de la cellule éditée
Target.Select 'sélectionne la cellule éditée
End Sub