XL 2019 Afficher/masquer des colonnes dans plusieurs feuilles selon remplissage d'une cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Theobaldinho

XLDnaute Nouveau
Bonjour,

Dans un premier temps, je vous remercie de lire ma demande.

J'ai un classeur qui contient 6 onglets. Les 5 derniers contiennent chacun un projet qui leur est propre, et tous faits selon le même format.
Le premier onglet sert de tableau de bord.
Je souhaite actualiser le mois (via liste déroulante) en cellule C2 de ce premier onglet (que je nommerais "Global") et qu'en fonction de la valeur de cette cellule, les colonnes ne contenant pas le mois dans la plage F7:AT7 (il y a plusieurs années) dans les onglets 2 à 6 soient masqués.
Bien sûr, l'idée est qu'en changeant la valeur en Global!C2, les autres onglets s'actualisent automatiquement.

J'ai déjà une macro par onglet qui permet de gérer à peu près :


VB:
Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Count > 1 Then Exit Sub


With Sheets("Projet 1").Cells
.EntireColumn.Hidden = False
End With


For Col = 6 To 46


If Cells(6, Col) = "0" Then Columns(Col).Hidden = True
Next


End Sub


mais c'est un bidouillage où la différence entre les mois dans la plage F7:AT7 et la cellule en E4 permet d'attribuer un score de 0 en ligne 6 et la macro masque les colonnes où il y a 0... (je sais, c'est moche)

Est-ce que vous connaîtriez un moyen de simplifier l'utilisation de ce classeur, s'il vous plaît ?

Cdt


Theobaldinho
 
Solution
Bonsoir Theobaldinho,

Placez cette macro dans le code de la 1ère feuille (Global) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$C$2" Or Target(1) = "" Then Exit Sub
Dim n%, i As Variant
For n = 2 To 6 '5 feuilles
    With Sheets(n).Columns("F:AT")
        .Hidden = True 'masque les colonnes
        i = Application.Match(Target, .Rows(7), 0) 'F7:AT7
        If IsNumeric(i) Then .Columns(i).Hidden = False 'affiche la colonne
    End With
Next
End Sub
Si en Global!C2 on a Février il faut que ce texte se retrouve dans les plages F7:AT7 des 5 feuilles suivantes.

A+
Bonsoir Theobaldinho,

Placez cette macro dans le code de la 1ère feuille (Global) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$C$2" Or Target(1) = "" Then Exit Sub
Dim n%, i As Variant
For n = 2 To 6 '5 feuilles
    With Sheets(n).Columns("F:AT")
        .Hidden = True 'masque les colonnes
        i = Application.Match(Target, .Rows(7), 0) 'F7:AT7
        If IsNumeric(i) Then .Columns(i).Hidden = False 'affiche la colonne
    End With
Next
End Sub
Si en Global!C2 on a Février il faut que ce texte se retrouve dans les plages F7:AT7 des 5 feuilles suivantes.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour