Affichage et masquage en fonction d'une liste Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
G
Gauvain
Jeune membre
Jeune membre
Messages : 22
Inscrit le : 17 décembre 2015
Version d'Excel : 2013

Message par Gauvain » 9 mai 2016, 13:03

Bonjour à tous,
Je débute en Macro sur excel et j'ai un petit problème,
Je sais que cette question a déjà été posée mais je n'arrive pas à trouver la source de mon erreur, ni dans les différents posts, ni ailleurs.
C'est pourquoi je me tourne vers vous.

Ce que je souhaiterais réaliser : J'ai une liste déroulante de 36 entrées.
Pour 4 de ces entrées je souhaiterais que des lignes s'affichent en dessous. En revanche, ces lignes ne sont pas les mêmes.

En gros :
pour la première entrée, je souhaiterais afficher ligne 1 à 2,
Pour la deuxième entrée, je souhaiterais afficher ligne 3 à 4 (et donc masquer ligne 1 à 2)
Pour la troisième entrée, je souhaiterais afficher ligne 5 à 6 (et donc masquer ligne 1 à 4)
Pour la quatrième entrée, je souhaiterais afficher ligne 7 à 8 (et donc masquer ligne 1 à 6)

Pour toutes les autres entrées que les lignes 1 à 8 soit masquées.


Je vous mets mon code :
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [B6]) Is Nothing Then
Cells.EntireRow.Hidden = False
If Target = "2.1.1" Then Rows("15:36").EntireRow.Hidden = True
If Target = "2.1.2" Or Target = "2.1.1" Then Range("13:15,18:36").EntireRow.Hidden = True
If Target = "4.1.1" Or Target = "4.1.1" Then Range("13:17,33:36").EntireRow.Hidden = True
If Target = "4.2.1" Then Rows("13:34").EntireRow.Hidden = True
Else: Rows("11:36").EntireRow.Hidden = True
End If
End Sub

En espérant que vous pourrez m'aider.
Merci d'avance
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 9 mai 2016, 13:34

Bonjour,

Ta description est ton code fournissent des lignes différentes ??

Dans tes conditions, il y a des répétitions : 2.1.1 et 4.1.1 ?

Enfin, le masquage des lignes 11 à 36 s'effectue dans tous les cas si l'entrée n'est pas 4.2.1 !!

Cordialement.
G
Gauvain
Jeune membre
Jeune membre
Messages : 22
Inscrit le : 17 décembre 2015
Version d'Excel : 2013

Message par Gauvain » 10 mai 2016, 06:58

Bonjour,
Alors voilà mes éléments de réponse :
Ta description est ton code fournissent des lignes différentes ??
Oui, mais les bonnes lignes à prendre en compte sont celles du code, j'avais mis des lignes "factices" dans mon explication afin que vous compreniez mieux ma problématique.
Dans tes conditions, il y a des répétitions : 2.1.1 et 4.1.1 ?
A priori, je ne veux pas de répétition mais au regard de ta réponse j'imagine qu'il y en a ?
le masquage des lignes 11 à 36 s'effectue dans tous les cas si l'entrée n'est pas 4.2.1 !!
Ok, seulement, je voudrais que ce masquage des lignes 11 à 36 s'effectue dans tous les cas si l'entrée n'est pas l'une des 4 entrées : 2.1.1, 2.1.2, 4.1.1, 4.2.1.
Et je souhaiterais que pour ces 4 entrées des lignes différentes apparaissent !

Merci pour ton temps, et ta réponse.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 10 mai 2016, 09:14

Bonjour,

Je ne demandais pas de réponse !
C'est moi qui t'en donnais une, à la lecture de ton code, pour que tu puisses vérifier et rectifier tes instructions.

Le 4.1.1 répété, dans la même condition est une bévue d'écriture, sans conséquence (sauf si l'un des deux devait être différent, mais dans ce cas il faut l'ajouter)
Le 2.1.1 répété, dans deux conditions successives, seule la 2e va s'appliquer...

Le problème est d'avoir formulé des conditions indépendantes les unes des autres compte tenu de l'objectif, il fallait un ensemble de conditions liées qui s'excluent mutuellement. Et Select Case est sans doute le plus indiqué dans ton cas.
Et d'autre part, pour la majorité des cas ton bloc de lignes étant masqué, au lieu d'afficher dans la situation de départ, il était donc préférable de masquer, et afficher selon condition.

En reprenant les 4 valeurs donnant lieu à démasquage :
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Address = "$B$6" Then
        Rows("11:36").Hidden = True
        Select Case Target.Value
            Case "2.1.1"
                Rows("11:14").Hidden = False
            Case "2.1.2"
                Rows("11:12").Hidden = False
                Rows("16:17").Hidden = False
            Case "4.1.1"
                Rows("11:12").Hidden = False
                Rows("18:32").Hidden = False
            Case "4.2.1"
                Rows("11:12").Hidden = False
                Rows("35:36").Hidden = False
        End Select
    End If
End Sub
Cordialement.
G
Gauvain
Jeune membre
Jeune membre
Messages : 22
Inscrit le : 17 décembre 2015
Version d'Excel : 2013

Message par Gauvain » 10 mai 2016, 09:22

Merci beaucoup !
Effectivement cela semblait plus simple de tout cacher d'abord !

A bientôt
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message