XL 2021 Masquer colonne avec macros

KiMi249

XLDnaute Nouveau
Bonjour,

Je souhaite rajouter une macros qui me masque les colonnes de N à CM si N1 à CM1 vide.

Merci pour votre aide.
 

Pièces jointes

KiMi249

XLDnaute Nouveau
Bonjour à tous :),
Essayez :
Pour masquer :
VB:
Dim x
   For Each x In Range("n1:cm1"): x.EntireColumn.Hidden = Len(x) = 0: Next

Pour afficher :
VB:
   Range("n1:cm1").EntireColumn.Hidden = False
Bonjour :cool: ,

Ca fonctionne parfaitement. Comme dit dans un autre commentaire j'ai besoin que cela s'effectue sur les feuilles de lundi à samedi c'est possible d'un seul coup ou je doit lancer la macros par feuille?

Merci.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

nota : si les cellules contiennent une valeur d'erreur (comme chez moi feuille "Mardi" - plage "BX1:CB1"), on les masque aussi. Si vous ne le désirez pas, me le faire savoir.

Essayez ceci :
VB:
Sub DysplayNo()
Dim w, x
   Application.ScreenUpdating = False
   For Each w In Split("lundi,mardi,mercredi,jeudi,vendredi,samedi", ",")
      For Each x In Sheets(w).Range("n1:cm1"): x.EntireColumn.Hidden = Len(IIf(IsError(x), "", x)) = 0: Next
   Next w
End Sub

Sub DysplayYes()
Dim w
   Application.ScreenUpdating = False
   For Each w In Split("lundi,mardi,mercredi,jeudi,vendredi,samedi", ",")
      Sheets(w).Range("n1:cm1").EntireColumn.Hidden = False
   Next w
End Sub

Remarque : si vous voulez afficher les colonnes avec des erreurs en ligne 1:
Utilisez : IIf(IsError(x), 1, x) (l'ancien terme ,"", est devenu ,1,)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour KiMi, MaPomme, Oneida,
Attention, dans votre PJ le Mardi par exemple les cellules BX1 à CB1 contiennet #REF!.

Un essai en PJ avec dans chaque feuille :
VB:
Sub Worksheet_Activate()
    Dim N%
    Application.ScreenUpdating = False
    For N = 14 To 91 ' De N à CM
        On Error Resume Next
        If Cells(1, N) = "" Then
           Cells(1, N).EntireColumn.Hidden = True
        End If
    Next N
End Sub
J'ai pris le parti de masquer les colonnes qui sont en erreur sur la ligne 1.
Le masquage se fait automatiquement lorsqu'on sélectionne une feuille.
 

Pièces jointes

KiMi249

XLDnaute Nouveau
Re,

nota : si les cellules contiennent une valeur d'erreur (comme chez moi feuille "Mardi" - plage "BX1:CB1"), on les masque aussi. Si vous ne le désirez pas, me le faire savoir.

Essayez ceci :
VB:
Sub DysplayNo()
Dim w, x
   Application.ScreenUpdating = False
   For Each w In Split("lundi,mardi,mercredi,jeudi,vendredi,samedi", ",")
      For Each x In Sheets(w).Range("n1:cm1"): x.EntireColumn.Hidden = Len(IIf(IsError(x), "", x)) = 0: Next
   Next w
End Sub

Sub DysplayYes()
Dim w
   Application.ScreenUpdating = False
   For Each w In Split("lundi,mardi,mercredi,jeudi,vendredi,samedi", ",")
      Sheets(w).Range("n1:cm1").EntireColumn.Hidden = False
   Next w
End Sub

Remarque : si vous voulez afficher les colonnes avec des erreurs en ligne 1:
Utilisez : IIf(IsError(x), 1, x) (l'ancien terme ,"", est devenu ,1,)
Du coup avec la bonne mise en forme... ca marche impeccable.
J'ai une autre question,
Comment rajouter à cette macro, que je veux que ça ce fasse du lundi au samedi aussi?

Sub AfficherEmballages()
Dim i As Integer
Application.ScreenUpdating = True
For i = 3 To 133
If Range("B" & i) > 1 Then Rows(i).Hidden = False
Next i
End Sub
Merci beaucoup pour vos retours.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
je veux que ça ce fasse du lundi au samedi aussi
Une possibilité :
VB:
Sub AfficherEmballages()
Dim i As Integer, Tablo(), Jour%
Application.ScreenUpdating = False
Tablo = Array("lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi")
For Jour = 0 To 5
    For i = 3 To 133
        With Sheets(Tablo(Jour))
            If .Range("B" & i) > 1 Then .Rows(i).Hidden = False
        End With
    Next i
Next Jour
End Sub
ou encore , à mettre dans ThisWorkbbok, il sera exécuté à chaque ouverture du fichier :
Code:
Private Sub Workbook_Open()
Dim i As Integer, Tablo(), Jour%
Application.ScreenUpdating = False
Tablo = Array("lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi")
For Jour = 0 To 5
    For i = 3 To 133
        With Sheets(Tablo(Jour))
            If .Range("B" & i) > 1 Then .Rows(i).Hidden = False
        End With
    Next i
Next Jour
End Sub
 

KiMi249

XLDnaute Nouveau
Une possibilité :
VB:
Sub AfficherEmballages()
Dim i As Integer, Tablo(), Jour%
Application.ScreenUpdating = False
Tablo = Array("lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi")
For Jour = 0 To 5
    For i = 3 To 133
        With Sheets(Tablo(Jour))
            If .Range("B" & i) > 1 Then .Rows(i).Hidden = False
        End With
    Next i
Next Jour
End Sub
ou encore , à mettre dans ThisWorkbbok, il sera exécuté à chaque ouverture du fichier :
Code:
Private Sub Workbook_Open()
Dim i As Integer, Tablo(), Jour%
Application.ScreenUpdating = False
Tablo = Array("lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi")
For Jour = 0 To 5
    For i = 3 To 133
        With Sheets(Tablo(Jour))
            If .Range("B" & i) > 1 Then .Rows(i).Hidden = False
        End With
    Next i
Next Jour
End Sub
J'utilise ces deux macros là, alors si on peut les assembler pour que ça fasse l'afficher/masquer en un seul clique sur chaque feuilles je prend :)
J'ai pas besoin que ca s'exécute à chaque ouverture du fichier car il sera en partagé.

Sub AfficherEmballages()
Dim i As Integer
Application.ScreenUpdating = True
For i = 3 To 133
If Range("B" & i) > 1 Then Rows(i).Hidden = False
Next i
End Sub

Sub MasquerEmballages()
Dim i As Integer
Application.ScreenUpdating = False
For i = 3 To 133
If Range("B" & i) = "" Then Rows(i).Hidden = True
Next i
End Sub
 

Discussions similaires

Réponses
12
Affichages
525
Réponses
3
Affichages
155
Réponses
10
Affichages
245
Réponses
5
Affichages
300

Membres actuellement en ligne

Statistiques des forums

Discussions
315 283
Messages
2 118 013
Membres
113 408
dernier inscrit
lausablk