Colonnes cachées (VBA)

Bradvid

XLDnaute Occasionnel
Bonjour à Tous,

Je voudrais pouvoir cacher des colonnes en sachant que celles que je veux cacher contiennent une cellule avec la valeur 1 et uniquement celle là.

Je sais comment cacher des colonnes en langage VBA mais je ne sais pas comment indiquer une condition pour que seulement celle qui contienne un 1 soient cachées.

Merci pour votre aide.
 

pierrejean

XLDnaute Barbatruc
Re : Colonnes cachées (VBA)

bonjour Bradvid

A adapter eventuellement pour le nombre de colonnes

Code:
Sub test()
For n = 1 To 256
 If Application.WorksheetFunction.CountIf(ActiveSheet.Columns(n), 1) > 0 Then
   Columns(n).Hidden = True
 End If
Next n
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Colonnes cachées (VBA)

Re Bradvid

je pense que ce sont les cellules qui peuvent être testées, regarde le code ci dessous si tu peux t'en inspirer :

Code:
If Range("I1").Value = 1 Then Columns("I:I").EntireColumn.Hidden = True

il faut peut être boucler sur toutes les cellules de la colonne.

bonne journée
@+
 

Catrice

XLDnaute Barbatruc
Re : Colonnes cachées (VBA)

Bonjour,

Ci-joint un exemple avec Find.

Sub test()
Set c = ActiveSheet.Cells.Find(1)
While Not c Is Nothing
c.EntireColumn.Hidden = True
Set c = ActiveSheet.Cells.FindNext(c)
Wend
End Sub

Sub Afficher()
Cells.EntireColumn.Hidden = False
End Sub

EDIT : Bonjour PierreJean et Pierrot.
 

Pièces jointes

  • Classeur1.xls
    24.5 KB · Affichages: 104
  • Classeur1.xls
    24.5 KB · Affichages: 109
  • Classeur1.xls
    24.5 KB · Affichages: 111

Bradvid

XLDnaute Occasionnel
Re : Colonnes cachées (VBA)

Bonjour PierreJean, Re Pierrot,

En utilisant la macro de PierreJean (Qui semble plus adaptée), il semblerait qu'elle balaye toutes les cellule des colonnes alors que je voudrais qu'elle aille regarder sur la ligne 3 d'un certain nombre de colonne.

J'ai essayé d'adapter le code mais sans succès.

Merci en tout cas à Pierrot qui m'aide beaucoup en ce moment! :eek:))
 

Catrice

XLDnaute Barbatruc
Re : Colonnes cachées (VBA)

Re,

Avec la restriction des colonnes :

Sub test3()
Mescolonnes = Array("D", "G", "K")
For i = 0 To UBound(Mescolonnes)
Range(Mescolonnes(i) & "3").EntireColumn.Hidden = True
Next
End Sub

Le mieux serait de nommer les cellules de façon discontinue et de boucler dessus ...
 

Bradvid

XLDnaute Occasionnel
Re : Colonnes cachées (VBA)

Re,

Avec la restriction des colonnes :

Sub test3()
Mescolonnes = Array("D", "G", "K")
For i = 0 To UBound(Mescolonnes)
Range(Mescolonnes(i) & "3").EntireColumn.Hidden = True
Next
End Sub

Le mieux serait de nommer les cellules de façon discontinue et de boucler dessus ...

Bonsoir Catrice,

J'ai un petit soucis avec ma macro, voilà le code :
Code:
Sub Macro1()
Application.ScreenUpdating = False
Set c = ActiveSheet.Rows("156:156").Find(1)
MonAddresse = c.Address
    While Not c Is Nothing
        c.EntireColumn.Hidden = True
        Set c = ActiveSheet.Rows("156:156").FindNext(c)
        If c.Address = MonAddresse Then Exit Sub
    Wend
Application.ScreenUpdating = True
End Sub

Le pb est que là où il y a la valeur 1 il s'agit d'un calcul et non une valeur.
Je pense que la macro ne fonctionne pas à cause de cela.
Que dois-je rajouter pour que la macro prenne en compte la valeur 1?

Merci pour ton aide.
 

Spitnolan08

XLDnaute Barbatruc
Re : Colonnes cachées (VBA)

Bonsoir,

N'ayant pas vu Catrice depuis un moment, je te propose :
Code:
Sub Macro2()
Application.ScreenUpdating = False
Set c = ActiveSheet.Rows("15:15").Find(1, LookIn:=xlValues)
MonAddresse = c.Address
    While Not c Is Nothing
        c.EntireColumn.Hidden = True
        Set c = ActiveSheet.Rows("15:15").FindNext(c)
        If c.Address = MonAddresse Then Exit Sub
    Wend
Application.ScreenUpdating = True
End Sub
Cordialement
 

Bradvid

XLDnaute Occasionnel
Re : Colonnes cachées (VBA)

Bonsoir Spitnolan08,

Tout d'abord merci pour ta réponse.

La macro coince au niveau de If cAddress=Monaddresse then Exit Sub.

As tu une solution? En + je ne sais pas à quoi sert cette ligne de code.....

Merci pour ton aide.
 

Spitnolan08

XLDnaute Barbatruc
Re : Colonnes cachées (VBA)

Re,

Oui, je pense avoir une solution :
Code:
Sub Macro2()
Application.ScreenUpdating = False

Set c = ActiveSheet.Rows("15:15").Find(1, LookIn:=xlValues)
If Not c Is Nothing Then
    MonAddresse = c.Address
    Do
        c.EntireColumn.Hidden = True
        Set c = ActiveSheet.Rows("15:15").FindNext(c)
        If c Is Nothing Then Exit Sub
    Loop
End If
    
Application.ScreenUpdating = True
End Sub
Cordialement
 

Spitnolan08

XLDnaute Barbatruc
Re : Colonnes cachées (VBA)

Re,

J'ai oublié de répondre à ta question :
La macro coince au niveau de If cAddress=Monaddresse then Exit Sub.
As tu une solution? En + je ne sais pas à quoi sert cette ligne de code.....
En fait, cette instruction devrait permettre à la macro de s'arrêter lorsqu'elle a trouvé toutes les valeurs 1 et qu'elle revient sur la 1ère cellule concernée. Mais ici, le fait de cacher les colonnes masque les valeurs 1 et la macro ne trouve plus de correspondance : c n'ayant plus d'existence tu ne peux obtenir son adresse d'ou bug...
Avec
Code:
If c Is Nothing Then Exit Sub
tu testes si la cellule existe et si elle n'existe pas tu sors... et tu évites le bug...:)

Cordialement
 

Statistiques des forums

Discussions
312 779
Messages
2 092 045
Membres
105 164
dernier inscrit
publd2