Masquer les colonnes si la valeur dans une cellule est 0

Bonjour,

Dans un fichier qui comporte environ 100 colonnes et 10 lignes (voir pièce jointe), je souhaiterais savoir s'il est possible de masquer automatiquement par un bouton ou par une formule les colonnes dont la valeur de ligne n°9 est "0".

Mon objectif est de pouvoir imprimer le tableau uniquement avec les colonnes dont le quantitatif est renseigné, et ne pas avoir à masquer les colonnes non remplies en les sélectionnant manuellement.

Merci pour votre aide.

Bonne journée

Cyril

Bonjour

Un essai de macro à mettre dans le module "ThisWorkbook" de l'éditeur VBA (accessible via ALT + F11) :

Private Sub Workbook_BeforePrint(Cancel As Boolean)

With Sheets("SCENARIO")
    ColMax = .Cells(9, .Columns.Count).End(xlToLeft).Column 'Détermine la dernière colonne
    For Col = 1 To ColMax 'Parcourir les colonnes
        If .Cells(9, Col) = 0 And .Columns(Col).Hidden = False Then .Columns(Col).Hidden = True 'Masque si valeur nulle
    Next Col
End With

End Sub

Le code se déclenche automatiquement avant impression et masque toutes les colonnes dont la valeur en ligne 9 est nulle. Le fichier est à enregistrer au format ".xlsm".

Wahoo une réponse ultra-rapide!

Je teste dès demain et vous fait un retour.

Merci d'avance et bonne soirée

Cyril

Bonjour,

J'ai affecté cette macro à un bouton contrôle ActiveX, mais il ne veut pas enregistrer la macro et m'affiche le message suivant:

"Nom ambigu détecté : Workbook_BeforePrint"...

Ai-je fait une erreur de process d'affectation de la macro?

Ai-je fait une erreur de process d'affectation de la macro?

OUI !

Le code se déclenche automatiquement avant impression...

Workbook.BeforePrint est une macro événementielle, elle se déclenche donc avec un événement particulier et pas un bouton.

Pour en savoir plus : https://www.excel-pratique.com/fr/vba/evenements_classeur.php

Pedro22,

Tout d'abord merci pour votre aide, votre réactivité.

Pour mon problème et vos réponses, j'ai maintenant compris pour le format de macro (événementielle et non pas liée à un bouton), mais j'ai du l'adapter à mon fichier, que j'ai un peu étoffé ce matin.

Vous le trouverez en pièce jointe.

La 1ère modif que est qu'il y a maintenant 19 lignes, et c'est la valeur de la 19ème ligne qui, lorsqu'elle est à 0, ne devrait pas apparaitre à l'impression. J'ai donc modifié les valeurs "9" de votre code en valeur "19".

La 2nde modif, c'est qu'il y a plusieurs onglets.

Alors j'ai passé la matinée à me torturer le cerveau, à essayer plusieurs solutions, mais même en changeant le nom du sheet par celui de l'onglet, et les valeurs 9 en 19, cela ne fonctionne pas : à l'impression (en tout cas en aperçu impression), toutes les colonnes sont affichées.

Je vous joins le fichier définitif, je ne sais pas comment adapter votre code à celui-çi (peut-être à cause des onglets multiples, du nom du sheet, ...?)

Encore merci d'avance pour votre retour et bon après-midi

11scenarios.zip (33.16 Ko)

Bonjour,

Avez-vous pu avancer sur ma problématique?

Merci d'avance

Bonjour,

Je me permets de relancer, je n'arrive toujours pas à solutionner mon problème ... merci d'avance de m'aider !!!

Bonne soirée

Bonjour,

Désolé j'étais passé à côté de ton nouveau message !

J'ai testé, le code fonctionne bien à l'impression (et pas à l'aperçu avant impression), à condition que tu modifies mes boulettes dans le code !

J'ai bêtement fait référence à des lignes ("rows") au lieu des colonnes ("columns"). Voilà donc le code corrigé :

Private Sub Workbook_BeforePrint(Cancel As Boolean)

With Sheets("SCENARIO AMAX")
    ColMax = .Cells(19, .Columns.Count).End(xlToLeft).Column 'Détermine la dernière colonne
    For Col = 1 To ColMax 'Parcourir les colonnes
        If .Cells(19, Col) = 0 And .Columns(Col).Hidden = False Then .Columns(Col).Hidden = True 'Masque si valeur nulle
    Next Col
End With

End Sub

GÉNIAL !!! Ca fonctionne d'enfer, j'suis sauvé.

Bravo, et MERCI !

Rechercher des sujets similaires à "masquer colonnes valeur"