Autres (RESOLU)Masquer / afficher des colonnes sous condition d'une ligne

chaelie2015

XLDnaute Accro
Bonsoir FORUM
Je souhaite afficher ou masquer des colonne de A a X via un bouton selon les valeurs de la ligne A (A1-X1)
exemple : si la valeur des cellules de la ligne A= 2 afficher la colonne et si = 0 ou 1 alors masquer la colonne
si D1= 2 donc afficher la colonne D
F1= 2 donc afficher la colonne F
etc..
Merci par avance
 

Pièces jointes

  • charlie ecole.xlsx
    9.5 KB · Affichages: 35

Rouge

XLDnaute Impliqué
Bonjour,

Ceci:
VB:
Sub Masquer_Afficher()
    Dim i As Long, DerCol As Long
    Application.ScreenUpdating = False
    DerCol = Range("XFD1").End(xlToLeft).Column
    For i = DerCol To 1 Step -1
        If Cells(1, i) <> 2 Then Columns(i).Hidden = True Else: Columns(i).Hidden = False
    Next i
End Sub

Cdlt
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Une variante de syntaxe
VB:
Sub Masquer_Bis()
    Dim i As Long, DerCol As Long
    Application.ScreenUpdating = False
    DerCol = Cells(1, Columns.Count).End(xlToLeft).Column
    For i = DerCol To 1 Step -1
        Columns(i).Hidden = Cells(1, i) <> 2
    Next i
End Sub
Sub Afficher()
Cells.EntireColumn.Hidden = False
End Sub
=>Rouge
OK la 1ère exécution masque mais la seconde ne démasque pas.
(Que ce soit avec ta syntaxe ou la mienne)
Ou alors j'ai loupé un truc ?
D'où l'ajout de la macro Afficher
 

Rouge

XLDnaute Impliqué
Bonjour Staple1600,

Oui effectivement, j'aurai dû mettre 2 macros distinctes, merci pour cette remarque.
VB:
Sub Masquer()
    Dim i As Long, DerCol As Long
    Application.ScreenUpdating = False
    DerCol = Range("XFD1").End(xlToLeft).Column
    For i = DerCol To 1 Step -1
        If Cells(1, i) <> 2 Then Columns(i).Hidden = True
    Next i
End Sub

Sub Demasquer()
    Dim i As Long, DerCol As Long
    Application.ScreenUpdating = False
    DerCol = Range("XFD1").End(xlToLeft).Column
    For i = DerCol To 1 Step -1
        Columns(i).Hidden = False
    Next i
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

=>Rouge
Et pour les nostalgiques d'Excel 97, tu n'as pas de pitié? ;)
XFD1 c'est la modernité
Mais nous ne sommes pas tous modernes ;)
(Moi le premier, qui suit encore sous Excel 2013 ;))

PS: je n'ai pas compris le 'Et pour reprendre la votre"
Dans le sens réemploi ou amendement de code?
(Car je ne vois de différence de syntaxe entre nos deux lignes)
Mais c'est vrai qu'il n'est que 07:56 et que je n'ai pas encore bu mon café ;)
EDITION: Tu as édité ton message pendant que j'écrivais celui-ci, donc OK j'ai compris le
"Reprendre la votre"
 

Staple1600

XLDnaute Barbatruc
Bonjour mapomme

mapomme
Puisque je ne suis pas moderne
Qu'est-ce donc qu'une zany face?
Et qu'est-elle censée exprimer?
;)

NB: Sauf erreur, ton code a le même "problème" les précédents
1ière exécution=>masque
2ième exécution=< ne démasque pas

Ou alors j'ai de nouveau loupé quelque chose?
 

dysorthographie

XLDnaute Accro
Bonjour,
Pour compléter la proposition de mapomme je préciserais qu'il est inutile de tester un booléen si l'idée est d'appliquer la même valeur à un autre booléen !

Code:
'if (true =true)=true then true else  false
Columnsden = Cells(1, i) <> 2 'true/false
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

mapomme
Mon test était le suivant
(et en me basant sur le nom de macro de Rouge)
1) On lance la macro
Les colonnes sont masquées
2) On relance la macro
Les colonnes précédemment masquées sont de nouveau affichées.

Or ce n'est pas le cas, non?
(Et ce avec ton code, celui de rouge ou le mien)

Je pensais qu'on cherchait à faire une macro deux en un (type bascule)
 

Staple1600

XLDnaute Barbatruc
Re

Voici sur quoi j'ai testé mon code et les propositions du fil
VB:
Sub CréerTest()
Range("A1:X1") = "=MOD(COLUMN(),18)"
Range("A1:X1") = Range("A1:X1").Value
End Sub
Je viens de refaire le test
1ière exécution: masquage [OK]
On relance la macro
Les colonnes restent masquées

Ai-je été plus clair?
 

Staple1600

XLDnaute Barbatruc

Discussions similaires

Réponses
8
Affichages
323

Statistiques des forums

Discussions
312 115
Messages
2 085 453
Membres
102 890
dernier inscrit
selkis