XL 2013 Masquer colonnes en VBA

Fabien62

XLDnaute Occasionnel
Bonjour à tous,

Je cherche à masquer des colonnes ne contenant pas de jours dans certains mois comme en févier ou lorsqu'il y a 30 jours dans l'onglet planning CP.

Avec la formule, le jour n'apparaît pas mais la colonne est tout de même vide, même si les cases jours contiennent une formule.

J'étais partis de ce code en VBA :

Sub Masq()
For Each n In [B4:AF4]
If n = "" Then
n.Columns.Hidden = True
Else
n.Columns.Hidden = False
End If
Next
End Sub

La colonne disparaît bien si je supprime la formule en AF4 par exemple mais c'est une chose que je ne peux pas réaliser, je cherche à trouver une solution pour régler ce problème et également à avoir une rafraîchissement de l'affichage si je change de mois.

Je suis débutant en VBA et essaye de progresser.

Merci pour votre aide

Cordialement
 

Pièces jointes

  • Planning Congés V1-DEV.xls
    101 KB · Affichages: 79

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Dans le module de la feuille :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$2" Then
        For Each n In [B4:AF4]
            If n = 0 Then
                n.Columns.Hidden = True
            Else
                n.Columns.Hidden = False
            End If
        Next
    End If
End Sub

A+ à tous
 

Fabien62

XLDnaute Occasionnel
Bonsoir,

Fonctionne parfaitement merci infiniment, cependant, j'ai remarqué que parfois le rafraîchissement d'écran se fait avec un décalage lorsque l'on change de mois ou d'année rapidement.

Merci pour votre aide
 

Pièces jointes

  • Planning Congés V1-DEV.xls
    112.5 KB · Affichages: 63

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Nouveau code :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpDating = False
    If Target.Address = "$B$2" Then
        For Each n In [B4:AF4]
            If n = 0 Then
                n.Columns.Hidden = True
            Else
                n.Columns.Hidden = False
            End If
        Next
    End If
End Sub

A+ à tous
 

cathodique

XLDnaute Barbatruc
Bonsoir, Bloque le rafrichissement de l'écran en début de procédure et tu le remets à la fin.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    If Target.Address = "$B$2" Then
        For Each n In [B4:AF4]
            If n = 0 Then
                n.Columns.Hidden = True
            Else
                n.Columns.Hidden = False
            End If
        Next
    End If
    Application.ScreenUpdating = True
End Sub
:):D JCGM, bonsoir on a évité une collusion
 

Discussions similaires

Réponses
2
Affichages
113
Réponses
2
Affichages
402

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof