Nommer des plages pour la VBA

  • Initiateur de la discussion Initiateur de la discussion troopers87
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

troopers87

XLDnaute Occasionnel
Bonjour à tous,

une petite question qui me trotte dans la tête depuis quelques temps : je dispose d'un classeur avec un graphique qui peut être caché pour plus de lisibilité. Le principe, c'est que les lignes du classeur se masquent au lancement de la macro, ce qui cache du même coup le graphique. Voir le fichier en exemple ^^

Mon problème, c'est que j'ai souvent besoin de rajouter des lignes : rajout d'un en-tête, suppression d'une matière comme dans mon exemple... et du coup, il faut changer les numéros de ligne à masquer "à la main" pour que la macro ne soit pas décalée.

Est-il possible de "nommer" des plages en VBA afin que les lignes à masquer/démasquer se décalent en même temps que je fais des modifications dans mon fichier ?

Merci d'avance !
 

Pièces jointes

Re : Nommer des plages pour la VBA

Bonjour,

Tu sélectionnes tes lignes à masquer et tu leur donnes manuellement un nom par ex. "Amasquer"

et dans ton code :

Code:
Range("Amasquer").Rows.Select ...etc

Si tu rajoutes des lignes à ton tableau supérieur, cela ne change rien, c'est juste la définition de "Amasquer" qui se change toute seule...

Cordialement
 
Re : Nommer des plages pour la VBA

Bonjour troopers87,

Une solution en nommant la plage des lignes de 15 à 25 (Dans la zone en haut à gauche de ton classeur lorsque tu sélectionnes une plage de données), ici "Graphique" puis en modifiant ton code comme ceci:

Code:
Sub Graphique_classe1()

' Cette macro doit permettre d'afficher/masquer le graphique
' par masquage/démasquage des lignes correspondantes.
    
    Range("Graphique").Select
    Classe1 = Selection.EntireRow.Hidden
    Selection.EntireRow.Hidden = Not Classe1

End Sub

Voir PJ !
Bonne journée

EDIT: Bonjour mécano41
 

Pièces jointes

Re : Nommer des plages pour la VBA

Bonjour à vous deux et merci pour votre réponse rapide,

effectivement, je songeais à une solution de ce type qui réponds tout à fait à mon besoin, mais je ne savais pas comment intégrer le nom de la plage dans le code VBA. Génial, en tout cas !

Merci encore et à très bientôt ! 😉
 
Re : Nommer des plages pour la VBA

Re-bonjour !

Du coup, j'ai une deuxième question qui est liée : j'ai modifié la macro pour que l'affichage du graphique puisse être sélectionné par une liste déroulante (par l'intermédiaire de la Validation de données, onglet Données). Les deux choix proposés sont Histogramme (graphique affiché) ou Données (graphique masqué).

Tout fonctionne jusqu'à ce que je tente de donner la cellule où est placée la liste déroulante : en ce cas, il ne se passe rien, certainement à cause du Target.Adress ?

Code:
Sub Classe1 ()

If Target.Address = "Graph_classe1_selecteur" Then

Select Case Range("Graph_classe1_selecteur").Value

   Case Is = "Histogramme"
        Range("Graph_classe1").Select
        Selection.EntireRow.Hidden = False

    Case Is = "Données"
        Range("Graph_classe1").Select
        Selection.EntireRow.Hidden = True

End Select

End If

End sub

Merci d'avance pour vos réponses 😉
 
Re : Nommer des plages pour la VBA

Bonjour,

petite remarque au passage, d'après ce que tu montres, "target" n'est ni défini ni initialisé en tant que variable....

bon après midi
@+

Bonjour Pierrot,

oui, effectivement, c'est simplement parce que j'ai omis de mettre l'ensemble du code : je suis dans le Worksheet et donc la première ligne est :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Merci pour ta remarque 😉
 
Re : Nommer des plages pour la VBA

Re,

bah... la première ligne c'est "Sub Classe1 ()"... tu ne peux être dans 2 procédures à la fois.... même si ton code est placé dans le module de la feuille, il ne va pas tenir compte de l'argument de la procédure "worksheet change"....
 
Re : Nommer des plages pour la VBA

Oui effectivement... Même en le supprimant, rien ne se passe : voilà mon code complet, toujours dans le Worksheet change.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

'enlève évènement change
Application.EnableEvents = False

If Target.Address = "Graph_classe1_selecteur" Then

Select Case Range("Graph_classe1_selecteur").Value

   Case Is = "Histogramme"
        Range("Graph_classe1").Select
        Selection.EntireRow.Hidden = False

    Case Is = "Données"
        Range("Graph_classe1").Select
        Selection.EntireRow.Hidden = True

End Select

End If

Avec les noms suivants précédemment installés :
- Graph_classe1_selecteur correspondant à la cellule où est placée ma liste déroulante de choix
- Graph_classe1 correspond aux lignes qui doivent être masquées/démasquées pour faire apparaître/disparaître le graphique.

Le code fonctionne si Grah_classe1_selecteur est remplacé par l'adresse de la cellule : A1, par exemple...
 
Re : Nommer des plages pour la VBA

Oui, génial, ça fonctionne ! Merci pour ton aide.

Pour le suivi, voici le code final :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = Range("Graph_courses_selecteur").Address Then

Select Case Range(""Graph_courses_selecteur").Value

   Case Is = "Histogramme"
        Range("Graph_courses").Select
        Selection.EntireRow.Hidden = False

    Case Is = "Données"
        Range("Graph_courses").Select
        Selection.EntireRow.Hidden = True

End Select

End If

Merci encore !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
430
P
  • Question Question
Réponses
2
Affichages
780
Réponses
12
Affichages
1 K
Réponses
2
Affichages
995
Retour