Dim x
For Each x In Range("n1:cm1"): x.EntireColumn.Hidden = Len(x) = 0: Next
Range("n1:cm1").EntireColumn.Hidden = False
Bonjour,Bonjour,
Certes, certes mais de quelle feuille?
Bonjour ,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
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
IIf(IsError(x), 1, x)
(l'ancien terme ,"", est devenu ,1,)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
Du coup avec la bonne mise en forme... ca marche impeccable.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,)
Une possibilité :je veux que ça ce fasse du lundi au samedi aussi
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
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 prendUne possibilité :
ou encore , à mettre dans ThisWorkbbok, il sera exécuté à chaque ouverture du fichier :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
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