Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Masquer/Afficher zone nommée par liste déroulante

YANOU

XLDnaute Junior
Bonjour à tous,
Je voudrais masquer/afficher mes "zones nommées" en fonction de la valeur prise par la cellule L1 (liste déroulante).
Exemple : Si valeur L1 = PMIA => PMIA affichée / PMIB & PMIC masquées.
Merci pour votre aide.
 

Pièces jointes

  • Essai.xlsm
    18.1 KB · Affichages: 25

don_pets

XLDnaute Occasionnel
"llo,
Question : comment comptes-tu les cacher ?

Ils sont sur une même feuille, pas de filtre, j'ai du mal à conceptualiser en l'état. J'imagine d'autres solutions, mais question utiles, tes tableaux auront toujours cette taille, ou bien cela va-t-il varier en fonction de leur contenu ?
 

Lolote83

XLDnaute Barbatruc
Salut YANOU,
Peut être comme ceci
Dans un module Standard
Code:
Sub AfficheMasquePMI()
    Rows("7:41").EntireRow.Hidden = False               'Affiche toutes les lignes
    Select Case [L1]
        Case Is = "PMIA"
            Rows("20:30").EntireRow.Hidden = True       'Masque PMIB
            Rows("31:40").EntireRow.Hidden = True       'MASQUE PMIC
        Case Is = "PMIB"
            Rows("7:19").EntireRow.Hidden = True        'Masque PMIA
            Rows("31:40").EntireRow.Hidden = True       'MASQUE PMIC
        Case Is = "PMIC"
            Rows("7:19").EntireRow.Hidden = True        'Masque PMIA
            Rows("20:30").EntireRow.Hidden = True       'MASQUE PMIB
    End Select
End Sub
Et sur le changement de la feuille
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$L$1" Then
        Call AfficheMasquePMI
    End If
End Sub
En espérant que cela corresponde à ta demande
Voir la remarque au post#2 de DON_PETS
@+ Lolote83
 

YANOU

XLDnaute Junior
Le nombre de ligne change, j'ai donc pensé nommer mes zones pour esquiver ce problème.
N'y connaissant pas grand chose en VBA et en se servant de votre code, peut-être comme cela (?) :
Range("PMIA").EntireRow.Hidden = True 'Masque PMIA
Range("PMIB").EntireRow.Hidden = True 'MASQUE PMIB
Merci pour votre aide.
 

vgendron

XLDnaute Barbatruc
Hello tous..
bon je vois que les solutions ont fusé..
du coup. suis en retard..

mais je poste quand meme. vu que c'est fait

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Intersect(Target, Range("L1")) Is Nothing Then

    With ActiveSheet
        .Range("PMIA").EntireRow.Hidden = True
        .Range("PMIB").EntireRow.Hidden = True
        .Range("PMIC").EntireRow.Hidden = True
        .Range(Target).EntireRow.Hidden = False
    End With
End If
Application.ScreenUpdating = True
End Sub


edit: tiens c'est marrant.. je viens de voir que les premières réponses datent de 13h39...
alors qu'au moment ou j'ai ouvert le post (il y a 5mn) il y avait 0 réponses.....????....??
serais je dans une faille temporelle? :-D
 

YANOU

XLDnaute Junior
Merci vgendron.
Votre code fonctionne très bien, mais quand j'essaie de le transposer sur mon classeur, cela ne fonctionne plus.
Un problème sur la ligne :
.Range(Target).EntireRow.Hidden = False
Merci pour votre aide.
 

Pièces jointes

  • Essai.xlsm
    36.7 KB · Affichages: 23

vgendron

XLDnaute Barbatruc
Hello
parce que dans mon code.. Target. c'est directement le nom de la plage nommée..
pour ton fichier. il faut adapter

remplace la ligne qui bug par celle ci
VB:
         .Range("PMI" & Target).EntireRow.Hidden = False
 

YANOU

XLDnaute Junior
Hello
Les 3 noms de ma liste déroulante sans espace (1.4404/1.4307 et C276) fonctionnent bien, mais dès qu'il y a un espace dans le nom, cela ne fonctionne plus.
Merci pour ton aide
 

Pièces jointes

  • Essai.xlsm
    37.1 KB · Affichages: 18

vgendron

XLDnaute Barbatruc
une modif du code qui devrait t'aider à comprendre..

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.ScreenUpdating = False
If Not Intersect(Target, Range("N6")) Is Nothing Then

     With ActiveSheet
        .UsedRange.Offset(9, 0).EntireRow.Hidden = True
        On Error GoTo fin
        .Range("PMI" & Target).EntireRow.Hidden = False
        Application.ScreenUpdating = True
     End With
     Exit Sub
End If
fin:
MsgBox "la plage nommée: PMI" & Target & " n'existe pas"
 Application.ScreenUpdating = True
End Sub
 

YANOU

XLDnaute Junior
Bonjour à tous,
Merci vgendron pour ton aide.
Je suis arrivé à ça (voir PJ)
Par contre, est-il possible d'écrire quelque chose dans une cellule sans avoir le message d'erreur ?
Merci.
 

Pièces jointes

  • Essai.xlsm
    201.6 KB · Affichages: 21

Discussions similaires

Réponses
4
Affichages
333
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…