Masquer colonne selon critère d'une cellule

Bonjour le forum

je désire selon le contenu d'une cellule afficher ou non la colonne.

exemple si une des cellules en C2; D2; E2 etc = 3 les colonnes concernées sont visible les autres non

merci pour votre aide

Bonjour

Code Module

Sub Masque()
'On bloque le rafraichissement de l'écran
Application.ScreenUpdating = False
Dim depart As Long
'On cherche le numéro de la dernière colonne utilisée
depart = Cells(1, Columns.Count).End(xlToLeft).Column
'on parcours les autres colonnes et si la ligne 2 de la colonne
'est différente de 3, on la masque
'Avec Excel 2003, j'ai 256 colonnes. Avec une autre version, il faut changer le 256 par le
'nombre de colonnes ou un nombre de colones suffisant pour couvrir les donées Ex:100 ou 200
   For i = depart To 256
    If Cells(2, i) <> 3 Then Columns(i).Hidden = True
    Next i
End Sub

et pour reafficher

Sub Affiche()
    Cells.Select
    Selection.EntireColumn.Hidden = False
    Range("A1").Select
End Sub

Cordialement

merci pour ce code je vais l'adapter à mon problème , mais visiblement c'est exactement ce que je voulais merci

je reviens vers vous si problème

bonne journée

je reviens vers vous car je ne désire pas prendre en compte la colonne A et B

autrement dit je désire faire la selection qu'a partir de la colonne C

merci

Bonjour

Dans le Code, tu remplaces

For i = depart  To 256

par

For i = depart + 2 To 256

Cordialement

cela ne fonctionne pas sur mon fichier le tien oui , alors je me permet de mettre le mien en pièce jointe

merci

98maquette.xlsm (45.10 Ko)

Bonjour

Mon excel 2003 n'active pas les contrôles sur des xlsm

Peux-tu renvoyer le fichier en faisant un "enregistrer sous" en xls?

Cordialement

voila

63maquette.zip (32.48 Ko)

Bonjour

Private Sub PVP_Click()
Dim Cel As Range
Application.ScreenUpdating = False
'Cette ligne gère jusqu'à la prochaine colonne vide en ligne2
'Pour masquer même les colonnes suivantes, ici 256, tu actives la ligne suivante
'For Each Cel In Range("C2", Range("C2:IV2"))
For Each Cel In Range("C2", Range("C2").End(xlToRight))
    If Cel <> "PVP" Then Cel.Columns.Hidden = True
    Next Cel
Application.ScreenUpdating = True
End Sub

Cordialement

228maquette.zip (29.01 Ko)

merci merci pour tout génial

Bonjour,

Je suis un autodidacte, et votre code m'a été très utile en servant de base pour masquer des colonnes par rapport à 2 critères.

J'ai malgré tout un souci et je sollicite votre aide.

La ligne contenant les valeurs à rechercher est la 6.

La colonne de départ est la colonne Q, soit la 16.

Je demande à arrêter le masquage à la colonne CX, soit la 101.

Cela fonctionne, mais pour une raison qui m'échappe, lorsque l'onglet à plus de 15 lignes, la macro bloque sur la ligne 16.

Pour contourner le problème, je laisse la ligne 16 vide, je la masque, et tout fonctionne de nouveau.

Étrange !!!!

Sub Masque()
'On bloque le rafraichissement de l'écran
Application.ScreenUpdating = False
Dim depart As Long

'On supprime le précédent masquage
Cells.Select
    Selection.EntireColumn.Hidden = False
    Range("a1").Select
'On cherche le numéro de la dernière colonne utilisée
depart = Cells(16, Columns.Count).End(xlToLeft).Column
'on parcours les autres colonnes et si la ligne 2 de la colonne
'est différente de 3, on la masque
'Avec Excel 2003, j'ai 256 colonnes. Avec une autre version, il faut changer le 256 par le
'nombre de colonnes
'depart + 5 permet de décaler le masquage à partir de la 5ème colonne
   For i = depart + 16 To 101
    If Cells(6, i) <> Range("D4").Value And Cells(6, i) <> Range("E4").Value Then Columns(i).Hidden = True
    Next i
End Sub

Au plaisir d'avoir une solution.

Cordialement

Re Bonjour,

Et bien, après avoir cherché, j'ai fini par trouver.

C'était devant mes yeux, le code était en fin de page.

Voici ma version perso......

Sub Masque2()
'On bloque le rafraichissement de l'écran
Application.ScreenUpdating = False
Dim Cel As Range

'On supprime le précédent masquage
Cells.Select
    Selection.EntireColumn.Hidden = False
    Range("a1").Select

For Each Cel In Range("Q6", Range("Q6").End(xlToRight))
    If Cel <> Range("D4").Value And Cel <> Range("E4").Value Then Cel.Columns.Hidden = True
    Next Cel
Application.ScreenUpdating = True

Columns("H:H").Select
    Selection.EntireColumn.Hidden = True

Range("A1").Select

End Sub

Plus de soucis au sujet de la ligne 16.

Merci.

Bonjour

J'essai d'appliquer votre formule sans succès... je suis un novice en macro et votre solution est extra!

En fait dans le fichier en PJ (onglet "TEST", je souhaiterai pouvoir afficher seulement les colonnes dont l'information présente sur la ligne 2 n'est pas égale à zéro. Et également pouvoir afficher toutes les colonnes via macro.

Merci d'avance pour votre aide.

30test-nv.xlsx (160.00 Ko)

Bonjour. bienvenue sur le Forum

Si tu poses ta question sur un sujet coché résolu, tu risques d'attendre longtemps.

Voici le code modifié qui est dans le fichier

Sub Masque()
'On bloque le rafraichissement de l'écran
Application.ScreenUpdating = False
'On met le calcul en manuel pour gagner du temps
Application.Calculation = xlCalculationManual
Dim Fin As Long
'On cherche le numéro de la dernière colonne utilisée
Fin = Cells(1, Columns.Count).End(xlToLeft).Column
'on parcours les autres colonnes et si la ligne 1 de la colonne
'est vide, on la masque
'Avec Excel 2003, j'ai 256 colonnes. Avec une autre version, il faut changer le 256 par le
'nombre de colonnes
'On commence à la colonne 2 avec un pas de 3
 For i = 2 To Fin Step 3
    If Cells(2, i) = 0 Then Columns(i).Select
    Selection.EntireColumn.Hidden = True
    Next i
    'On remet le calcul en Automatique
    Application.Calculation = xlCalculationAutomatic
End Sub
Sub Affiche() ' On affiche tout
    Cells.Select
    Selection.EntireColumn.Hidden = False
    Range("A1").Select
End Sub

Cordialement

57test-nv.zip (101.93 Ko)
Rechercher des sujets similaires à "masquer colonne critere"