Macro masquer colonnes - valeur cellule [Résolu/Fermé]

Signaler
Messages postés
42
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
22 février 2012
-
Messages postés
17160
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
11 août 2020
-
Bonjour à tous,

J'aimerais que quelqu'un me réfère une macro qui me permettrait de masquer des colonnes en fonction de la valeur d'une cellule de la feuille.

Par exemple, j'ai une feuille qui possède un tableau de 30 colonnes représentant des années, l'année 1 débutant à la colonne Q.

Je voudrais que les colonnes des années supérieures à la valeur de la cellule H13 soient masquées. Donc si la valeur de H13 est de 8, je voudrais que les colonnes Y à AT soient cachées.

Merci de bien vouloir m'aider

Gilles


7 réponses

Messages postés
17160
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
11 août 2020
4 168
Salut,

Colles ce code dans un module et associe le à un bouton

Sub colonne ()
'MasquerColonnes
Dim i As Variant
Application.ScreenUpdating = False
[Q1:AT1].EntireColumn.Hidden = False
For col = 17 To 47
With Feuil1.Cells(1, col)
If .Value > [H13] Then Columns(col).Hidden = True
End With
Next col
Application.ScreenUpdating = True
End Sub
Messages postés
42
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
22 février 2012
1
Merci Mike-31,

mais ça ne fonctionne pas. Je n'ai peut-être pas été assez précis !

Mon fichier contient 40 onglets et je voudrais que chacun des onglets soit indépendant un de l'autre, de telle sorte que la cellule H13 d'un onglet déclenche le masquage des colonnes de cet onglet.

Donc je crois que je ne peux pas mettre la macro dans un module et je ne veux pas associer celle-ci à un bouton mais plutôt au contenu de cellule H13.

J'espère être compréhensible

Gilles
Messages postés
17160
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
11 août 2020
4 168
Re,

non, le code que je t'ai donné est applicable dans toutes les feuilles, il suffit de le coller dans un module (Alt et touche F11) ou clic droit sur l'onglet de feuille concernée/Visualiser le code, Insérer un module et coller le code

Sub colon()
'MasquerColonnes
Dim i As Variant
Application.ScreenUpdating = False
[Q1:AT1].EntireColumn.Hidden = False
For col = 17 To 47
With Feuil1.Cells(1, col)
If .Value > [H13] Then Columns(col).Hidden = True
End With
Next col
Application.ScreenUpdating = True
End Sub

ensuite à partir de la barre d'outils formulaire (affichage/Barre d'outils/Formulaire) créer un bouton et Associer à la macro
ou encore avec la barre contrôle du Visual Basic créer un commanButton
dans ce cas le contrôle du bouton sera dans les propriétés de la feuille, coller le nom de la macro "colon" exemple

Private Sub CommandButton1_Click()
colon
End Sub

ou tu optes pour un déclenchement automatique lorsque la valeur de la cellule H13 change, dans ce cas , dans la propriété de la feuille tu colles ce code qui fait référence à la macro colon

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$H$13" Then
colon
End If
End Sub

tu répètes l'option retenue dans la propriété de tes feuilles, qui utiliseront le même code "colon"

si tu as besoin d'un exemple on verra ça demain
Messages postés
42
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
22 février 2012
1
Merci de t'occuper de moi Mike-31

Je crois avoir suivi ta procédure mais j'ai probablement mal fait quelque chose puisque ça ne fonctionne pas.

J'aimerais t'envoyer mon fichier mais je ne sais pas comment joindre un fichier à un "post"
Messages postés
17160
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
11 août 2020
4 168
Re,

Pour joindre un fichier, s'il ne contient pas de note confidentielles soit dans un post ou dans un message perso en cliquant sur le pseudo du membre à qui tu souhaites l'envoyer
clic sur ce lien/Parcourir pour sélectionner le fichier/Créer le lien/Autoriser l'accès et colle le lien généré en haut de la feuille
Messages postés
42
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
22 février 2012
1
Excuses mon ignorance mais lorsque je clique sur ton pseudo (Mike-31), je suis dirigé sur ton profil d'où je ne vois pas où je peux faire "clic sur ce lien/Parcourir pour sélectionner le fichier/Créer le lien/Autoriser l'accès et colle le lien généré en haut de la feuille "

Bye

Gilles
Messages postés
17160
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
11 août 2020
4 168
Re,

Excuse, j'ai oublié de mettre le lien.
Donc clic sur ce lien

https://www.cjoint.com/

et /Parcourir pour sélectionner le fichier/Créer le lien/Autoriser l'accès et colle le lien généré en haut de la feuille
soit sur un post ou sur un message privé, dans ce cas clic sur le pseudo du membre à qui tu souhaites l'envoyer et message privé
Messages postés
42
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
22 février 2012
1
Bonjour

Voici la partie de mon fichier pour lequel je voudrais cette macro.

https://www.cjoint.com/?fedXuTa5h1

(J'espère que le lien fonctionnera !)

Gilles
Messages postés
17160
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
11 août 2020
4 168
Re,

Remplace le code sur le module par celui ci

Sub colon()
'MasquerColonnes
Dim i As Variant
Application.ScreenUpdating = False
[Q1:AT1].EntireColumn.Hidden = False
For col = 17 To 47
With Cells(8, col)
If .Value > [H13] Then Columns(col).Hidden = True
End With
Next col
Application.ScreenUpdating = True
End Sub

Par contre si tu souhaites afficher les colonnes, il y a un problème avec la Validation que tu as limité à 20, ce qui limite l'utilisation de la macro à 20

le code si dessus masque toute le colonnes de Q à At si en H13 il n'y a aucune valeur, si tu saisis 20 s'affichent les colonnes dont la valeur est inférieure ou égale à 20 et le colonnes avec valeur supérieure à 20 reste masquées et ne peuvent et inaccessible du à la validation

ou on ajoute une ligne par exemple si H13 est vide on affiche toute les lignes, avec ce code

Sub colon()
'MasquerColonnes
Dim i As Variant
Application.ScreenUpdating = False
[Q1:AT1].EntireColumn.Hidden = False
For col = 17 To 47
With Cells(8, col)
If .Value > [H13] Then Columns(col).Hidden = True
If [H13] = "" Then Columns(col).Hidden = False
End With
Next col
Application.ScreenUpdating = True
End Sub

ou tu modifies la Validation et tu sélectionnes Avertissement à la place d'Arrêt sur l'onglet Alerte d'erreur

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
Messages postés
42
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
22 février 2012
1
Merci mille fois, pour tous tes bons conseils.

Tout fonctionne à merveille, encore merci

Gilles
Messages postés
17160
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
11 août 2020
4 168
Re,

Content de t'avoir rendu service.

J'y pense dans la cellule H13, à la place de mettre une restriction limitant la saisie à 20, tu peux faire une liste de validation dans source saisis
=$Q$8:$AJ$8