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

  • STOCK 2K24.xlsm
    638.3 KB · Affichages: 4

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

  • STOCK 2K24 (1).xlsm
    653.9 KB · Affichages: 1

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

Statistiques des forums

Discussions
312 211
Messages
2 086 298
Membres
103 171
dernier inscrit
clemm