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

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+

job75

XLDnaute Barbatruc
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+
 

Discussions similaires

Statistiques des forums

Discussions
311 730
Messages
2 081 978
Membres
101 854
dernier inscrit
micmag26