XL 2021 Masquer colonne avec macros

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 😎 ,

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.
 
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,)
 
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

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.
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
205
  • Question Question
Microsoft 365 Personal.xlsb
Réponses
4
Affichages
274
  • Question Question
Microsoft 365 Power Query
Réponses
8
Affichages
240
Réponses
17
Affichages
492
Retour