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
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
324

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87