Bonjour,
Il me semble difficile d'introduire une valeur en B4 à partir du moment où l'on aura masqué la colonne 2 
Pour masquer une colonne on utilise l'indice de la collection qui est soit numérique, soit alphanumérique
Exemple pour masquer ou afficher la colonne 3
1 2 3 4 5
| Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B4")) Is Nothing Then Exit Sub
If Target.Value <> 0 Then Columns(3).Hidden = False
If Target.Value = 0 Then Columns(3).Hidden = True
End Sub |
Comme la valeur de la propriété Hidden est de type booléen, profitons en
1 2 3 4
| Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B4")) Is Nothing Then Exit Sub
Columns(3).Hidden = Target.Value = 0
End Sub |
et pour effacer plusieurs colonne, on peut utiliser une structure répétitive telle que For ... To ... Next
Exemple pour masque les colonnes de 3 à 5
1 2 3 4 5 6 7
| Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Integer
If Intersect(Target, Range("B4")) Is Nothing Then Exit Sub
For c = 3 To 5
Columns(c).Hidden = Target.Value = 0
Next
End Sub |
Il y a bien entendu d'autres solutions
[EDIT]
Une coquille s'est glissée dans mon code.
Même si cela fonctionnait le test est plus compréhensible comme ci-dessous
Columns(c).Hidden = Target.Value = 0
Au lieu de
Columns(c).Hidden = False = Target.Value
Partager