Sub test()
With ThisWorkbook.Sheets("Feuil1")
For i = .Cells(1, .Columns.Count).End(xlToLeft).Column To 1 Step -1
If .Cells(1, i).Text = "1" Then .Columns(i).Hidden = True
Next i
End With
End Sub
Non, il est plus simple et plus pratique de masquer/démasquer des colonnes (car lors du démasquage, elles retrouvent automatiquement et sans opération supplémentaire leurs largeurs d'avant le masquage!
MERLIN à dit:
Si je décide de vouloir les démasquer ? c'est-à-dire dans le cas présent démasquer toutes les colonnes avec en ligne 1 la valeur ="1".
Pour cela, il te suffit de remplacer "True" par "False" :
Code:
If .Cells(1, i).Text = "1" Then .Columns(i).Hidden = [COLOR="Red"][B]True[/B][/COLOR]
devient :
Code:
If .Cells(1, i).Text = "1" Then .Columns(i).Hidden = [COLOR="Blue"][B]False[/B][/COLOR]
Ou mille fois plus rapide : déselectionner d'un coup TOUTES les colonnes!
Ta macro :
Code:
Sub test()
With ThisWorkbook.Sheets("Feuil1")
For i = .Cells(1, .Columns.Count).End(xlToLeft).Column To 1 Step -1
If .Cells(1, i).Text = "1" Then .Columns(i).Hidden = [COLOR="Blue"][B]False[/B][/COLOR]
Next i
End With
End Sub
Devient tout simplement :
Code:
Sub test()
Cells.EntireColumn.Hidden = False
End Sub
Cette macro placé dans "module" agit sur la feuille active du moment
C'est pas plus court et plus rapide? Mais après, cela dépend de tes impératifs!
Bonjour,
J'avais déjà essayé de remplacer True par False et ce sans succès.
Je souhaite pouvoir démasquer au cas par cas... c'est-à-dire si j'ai un certain nombre de colonne avec en ligne 2 la valeur = "1" ... plutôt que celles avec la valeur = "2"... c pour cela qu'en jouant avec la taille de la colonne je pensais que cela pourrait être plus simple.
Sub Taille0()
Dim Cel As Range
Application.ScreenUpdating = False
With Sheets("INITIAL")
.Cells.EntireColumn.Hidden = False
DerCol = .[IV2].End(xlToLeft).Column
For Each Cel In .Range(.Cells(2, 6), .Cells(2, DerCol))
If Cel.Value = 1 Then activeCel.EntireColumn.Select
selection.Cel.ColumnWidth = 0
Next Cel
End With
End Sub