Macro pour masquer des lignes en fonction d'une valeur

Bonjour,

je cherche une macro ou formule pour masquer des lignes en fonction d'une valeur.

Je vous joint mon fichier tout y est expliqué en quelques lignes. Merci :)

251exemple.xlsx (9.34 Ko)

Bonjour,

Une petite macro événementielle, à insérer dans le module de la feuille concernée (clic droit sur l'onglet / visualiser le code), et à adapter.

Ce qui doit être adapté est indiqué en commentaires (lignes en vert) dans la macro...

Private Sub Worksheet_Change(ByVal Target As Range)
'A ADAPTER : Const LIGNES
'   doit commencer par un #
'   suivent les numéros des 1ères lignes de chaque groupe à masquer
'   avec, entre chaque, le symbole #
Const LIGNES As String = "#10#13#16#19#22#25#28#31#34"
'A ADAPTER : Const GROUPETOTAL
'   Indiquer les numéros de lignes départ et fin. Dans l'exemple : 7:35
Const GROUPETOTAL As String = "7:35"
'A ADAPTER : l'adresse de la cellule ou est inscrit le nombre de semaine. Dans l'exemple $G$3
    If Target.Address = "$G$3" Then
        Rows(GROUPETOTAL).Hidden = False
        If Target.Value <= UBound(Split(LIGNES, "#")) Then Rows(Split(LIGNES, "#")(Target.Value) & ":35").Hidden = True
    End If
End Sub

En cas de souci, n'hésitez pas.

Bonsoir, déja merci beaucoup à vous car cela fonctionne très bien, cela dit, j'aimerai pouvoir agir de la même manière sur d'autres pages de mon fichier excel tout en ayant à indiquer qu'une seul fois le nombre de semaines, par exemple, si je rentre "5" dans G3 alors j'aimerai que certaines lignes contenu dans une autre page se masquent également, j'ai essayé d'adapter la macro à la page en question en remplacant "$G$3" par "'trainingplan!'$G$3" ("trainingplan" étant le nom de la page en question) mais ça n'a pas fonctionné.

Bonjour,

Tout se passe ici :

If Target.Value <= UBound(Split(LIGNES, "#")) Then Rows(Split(LIGNES, "#")(Target.Value) & ":35").Hidden = True

Que vous pouvez remplacer par :

If Target.Value <= UBound(Split(LIGNES, "#")) Then 
    'masque les lignes de la feuille active :
    Rows(Split(LIGNES, "#")(Target.Value) & ":35").Hidden = True
    'masque les lignes dans la feuille : Feuil1 
    Worksheets("Feuil1").Rows(Split(LIGNES, "#")(Target.Value) & ":35").Hidden = True
    'etc...
End If

D'accord je vois, par contre ce ne sont pas les mêmes lignes à masquer dans les autres onglet, par exemple dans la page principal, je veux masquer de la ligne 7 à 35 mais dans l'autre onglet je veux masquer de la ligne 10 à 150. Avec VBA, il n'y a pas moyen de simplement faire référence à une cellule contenu dans une autre page ?

je relance et du coup je vous joint un nouveau fichier avec des explications plus clair :)

70exemple.xlsx (11.63 Ko)

Bonjour,

Je pensais que tout avait été fait pour que tu adaptes par toi-même.

Ce n'est pas le cas.

Donc...

Le code :

Option Explicit

'Macro à insérer dans le module de la feuille Training Plan, ou se trouve la cellule G3
Private Sub Worksheet_Change(ByVal Target As Range)
'A ADAPTER : Const LIGNES_
'   doit commencer par un #
'   suivent les numéros des 1ères lignes de chaque groupe à masquer
'   avec, entre chaque, le symbole #
Const LIGNES_TRAINING As String = "#10#13#16#19#22#25#28#31#34"
Const LIGNES_ANALYSIS As String = "#22#26#30#34#38#42#46#50#54"
'A ADAPTER : Const TOTAL_
'   Indiquer les numéros de lignes départ et fin.
Const TOTAL_TRAINING As String = "7:35"
Const TOTAL_ANALYSIS As String = "18:57"
'A ADAPTER : l'adresse de la cellule ou est inscrit le nombre de semaine. Dans l'exemple $G$3
    If Target.Address = "$G$3" Then
        If IsNumeric(Target.Value) Then
            Masque_Affiche Sheets("Training Plan"), Target, LIGNES_TRAINING, TOTAL_TRAINING
            Masque_Affiche Sheets("Analysis"), Target, LIGNES_ANALYSIS, TOTAL_ANALYSIS
        End If
    End If
End Sub

Private Sub Masque_Affiche(Feuil As Worksheet, Targ As Range, Lign As String, Tot As String)
Dim DL As String, Value As Integer
    DL = ":" & Split(Tot, ":")(1)
    Value = Targ.Value
    With Feuil
        .Rows(Tot).Hidden = False
        If Value <= UBound(Split(Lign, "#")) And Value > 0 Then .Rows(Split(Lign, "#")(Value) & DL).Hidden = True
    End With
End Sub

Le classeur exemple :

116david2b.xlsm (17.71 Ko)

Super merci, ça fonctionne parfaitement! :)

Je pensais moi même avoir compris mais étant très novice en VBA, je n'aurai pas trouvé la solution tous seul

Rechercher des sujets similaires à "macro masquer lignes fonction valeur"