IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Masquer un graphique


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut Masquer un graphique
    Bonjour,
    Dans une macro, j'aimerai masquer un graphique (en cas de données sources vides, notamment).
    J'ai cherché un peu, on m'a dit d'essayer ça:
    Graphe.Visible = False
    Mais ça ne marche pas.
    Quelqu'un aurait une solution?
    Merci d'avance.

  2. #2
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Citation Envoyé par Kobaal Voir le message
    Bonjour,
    Dans une macro, j'aimerai masquer un graphique (en cas de données sources vides, notamment).
    J'ai cherché un peu, on m'a dit d'essayer ça:
    Graphe.Visible = False
    Mais ça ne marche pas.
    Quelqu'un aurait une solution?
    Merci d'avance.
    Je pense que tu peux trouver beaucoup de reponse par ici:
    http://www.google.fr/search?hl=fr&q=...e+Google&meta=

  3. #3
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Google fait des miracles pour trouver des réponses à tes questions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.ChartObjects("Graphique 1").Visible = False
    ActiveSheet.ChartObjects("Graphique 1").Visible = true
    Et n'oublie pas de cliquer sur resolue en bas si tu as trouvé la reponse à ta question.

    Bon courage

  4. #4
    Membre Expert
    Avatar de cb_60
    Homme Profil pro
    Chargé de mission technique
    Inscrit en
    Juillet 2007
    Messages
    1 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé de mission technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 253
    Billets dans le blog
    14
    Par défaut
    Bonjour
    cela doit fonctionné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Macro1()  
        ActiveSheet.Shapes("graph_1").Visible = False
         ("le nom de ton graph")
    End Sub
    L'imagination est plus importante que le savoir.... A . Einstein. :pastaper:
    https://www.developpez.net/forums/blogs/179588-cb_60/
    Merci de cliquer sur :resolu:pour clore cette discussion.

  5. #5
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Citation Envoyé par cb_60 Voir le message
    Bonjour
    cela doit fonctionné:
    Sub Macro1()
    ActiveSheet.Shapes("graph_1").Visible = False
    ("le nom de ton graph")
    End Sub
    Oui les deux fonctionnent tres bien pour masquer ou demasquer un graphique.
    Avec l'objet shapes tu peux faire plus de chose (a voir dans l'aide de excel).

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Merci pour ces réponses, mais ça ne marche toujours pas.
    Avec les Shapes, il y a erreur "L'élément portant ce nom est introuvable"
    Avec ChartObjects, j'obtiens "Impossible de lire la propriété ChartObjects de la classe Worksheet"

    D'ailleurs, le nom du graphique à entrer comme ChartObjects ou Shapes, est ce le titre du graphique, ou le nom du type 'nom du feuillet' + "Graphique" + 'Numéro du graphique'?

  7. #7
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Citation Envoyé par Kobaal Voir le message
    Merci pour ces réponses, mais ça ne marche toujours pas.
    Avec les Shapes, il y a erreur "L'élément portant ce nom est introuvable"
    Avec ChartObjects, j'obtiens "Impossible de lire la propriété ChartObjects de la classe Worksheet"

    D'ailleurs, le nom du graphique à entrer comme ChartObjects ou Shapes, est ce le titre du graphique, ou le nom du type 'nom du feuillet' + "Graphique" + 'Numéro du graphique'?
    Peux tu nous montrez ton code et si possible nous envoyer ton fichier excel?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Private Sub OptiGraphe()
    Dim Nom As String
    Dim NumRow As Long
    Dim NumCol As Long
    Dim Plage As Range
    Dim GraphCible As Variant
     
     
    Dim i As Byte
     
    Nom = "Métier"
    'Plage de recherche.
    Set Plage = Range("A1:S96")
     
    'Recherche du tableau
    For Each r In Plage
        If r.Value Like Nom Then
        NumRow = r.Row
        NumCol = r.Column
        End If
    Next
    'avertissement si le tableau n'existe pas
    If NumRow = 0 Then
        MsgBox ("Tableau " & Nom & " non trouvé. Assurez vous que ce nom existe bien")
        Else: MsgBox (" Tableau trouvé aux coordonnées: Numrow = " & NumRow & " ; NumCol = " & NumCol)
        End If
     
    'Recherche du graphique ayant le titre correspondant
    For Each Graph In ActiveSheet.ChartObjects
        i = i + 1
        ActiveSheet.ChartObjects(i).Activate
        If ActiveChart.ChartTitle.Text = Nom Then
        Set GraphCible = ActiveChart
        End If
    Next
    'avertissement si le graphique n'existe pas
    If IsEmpty(GraphCible) Then
        MsgBox ("Graphique " & Nom & " non trouvé. Assurez vous qu'un graphique avec ce titre existe bien")
        Else: MsgBox ("Nom du graphe trouvé: " & GraphCible.Name)
        End If
     
    'si la case sous le nom du tableau est vide, le graphique est masqué
    If (NumRow <> 0) Then
        If IsEmpty(ActiveSheet.Cells(NumRow + 1, NumCol)) Then
        ActiveSheet.ChartObjects("Métier").Visible = False
        MsgBox ("Tableau " & Nom & " caché")
        Else: ActiveSheet.ChartObjects("Métier").Visible = True
        End If
    End If
     
    End Sub
    (ici, je prend pour exemple le graphique intitulé "Métier", mais à terme, le nom recherché sera en argument)
    (J'éditerai plus tard pour ajouter un fichier xls d'exemple)

  9. #9
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Une solution a te proposé mais je te garantit rien:

    sur ton graphique fait bouton droit et clique sur fenetre graphique:

    la tu verras le nom exact de ton graphique:
    [classeur1.xls]Feuil1Graphique1

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Même en rajoutant le nom du classeur entre crochets, les erreurs restent les mêmes.
    Il y a pas des librairies spéciales à activer? des fonctions non compatibles excel 2003? une petite option que tout le monde oublie mais qu'il faut activer sous peine de tout planter?

  11. #11
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Je viens de tester ton code:
    Avec comme nom du titre du tableau et du graphique "Métiers"

    J'ai conserver le nom du graphique par defaut "graphique 1" que tu peux trouver comme je t'ai dit en haut. le nom de ton graphique doit surement être à la place de Feuil1Graphique1

  12. #12
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Citation Envoyé par scully2501 Voir le message
    Je viens de tester ton code:
    Avec comme nom du titre du tableau et du graphique "Métiers"

    J'ai conserver le nom du graphique par defaut "graphique 1" que tu peux trouver comme je t'ai dit en haut. le nom de ton graphique doit surement être à la place de Feuil1Graphique1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Private Sub OptiGraphe_Click()
    Dim Nom As String
    Dim NumRow As Long
    Dim NumCol As Long
    Dim Plage As Range
    Dim GraphCible As Variant
     
     
    Dim i As Byte
     
    Nom = "Métier"
    'Plage de recherche.
    Set Plage = Range("A1:S96")
     
    'Recherche du tableau
    For Each r In Plage
        If r.Value Like Nom Then
        NumRow = r.Row
        NumCol = r.Column
        End If
    Next
    'avertissement si le tableau n'existe pas
    If NumRow = 0 Then
        MsgBox ("Tableau " & Nom & " non trouvé. Assurez vous que ce nom existe bien")
        Else: MsgBox (" Tableau trouvé aux coordonnées: Numrow = " & NumRow & " ; NumCol = " & NumCol)
        End If
     
    'Recherche du graphique ayant le titre correspondant
    For Each Graph In ActiveSheet.ChartObjects
        i = i + 1
        ActiveSheet.ChartObjects(i).Activate
        If ActiveChart.ChartTitle.Text = Nom Then
        Set GraphCible = ActiveChart
        End If
    Next
    'avertissement si le graphique n'existe pas
    If IsEmpty(GraphCible) Then
        MsgBox ("Graphique " & Nom & " non trouvé. Assurez vous qu'un graphique avec ce titre existe bien")
        Else: MsgBox ("Nom du graphe trouvé: " & GraphCible.Name)
        End If
     
    'si la case sous le nom du tableau est vide, le graphique est masqué
    If (NumRow <> 0) Then
        If IsEmpty(ActiveSheet.Cells(NumRow + 1, NumCol)) Then
        ActiveSheet.ChartObjects("Graphique 1").Visible = False
        MsgBox ("Tableau " & Nom & " caché")
        Else
       ActiveSheet.ChartObjects("Graphique 1").Visible = True
        End If
    End If
     
    End Sub
    J'ai supprimer les ":" apres else à la fin.
    Fichiers attachés Fichiers attachés

  13. #13
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Citation Envoyé par Kobaal Voir le message
    Même en rajoutant le nom du classeur entre crochets, les erreurs restent les mêmes.
    Il y a pas des librairies spéciales à activer? des fonctions non compatibles excel 2003? une petite option que tout le monde oublie mais qu'il faut activer sous peine de tout planter?
    Pour moi dans outils/ références j'ai:

    *visual basic for application
    *Microsotf excel 10.0 object library (10.0 est la version toi tu auras autre avec 2003)
    *OLE automation
    *Microsotf office 10.0 object library
    *Microsotf forms 2.0 object library

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    J'ai recopié ton code (en corrigeant avec le nom du graphique), et toujours la même erreur:
    Impossible de lire la propriété ChartObjects de la classe Worksheet

    J'ai bien les mêmes références que toi (version 11.0 pour l'object library)
    J'ai joint un classeur d'exemple.
    Fichiers attachés Fichiers attachés

  15. #15
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Private Sub OptiGraphe_Click()
    Dim Nom As String
    Dim NumRow As Long
    Dim NumCol As Long
    Dim Plage As Range
    Dim GraphCible As Variant
     
     
    Dim i As Byte
     
    Nom = "Métier"
    'Plage de recherche.
    Set Plage = Range("A1:S96")
     
    'Recherche du tableau
    For Each r In Plage
        If r.Value Like Nom Then
        NumRow = r.Row
        NumCol = r.Column
        End If
    Next
    'avertissement si le tableau n'existe pas
    If NumRow = 0 Then
        MsgBox ("Tableau " & Nom & " non trouvé. Assurez vous que ce nom existe bien")
        Else: MsgBox (" Tableau trouvé aux coordonnées: Numrow = " & NumRow & " ; NumCol = " & NumCol)
        End If
     
    'Recherche du graphique ayant le titre correspondant
    For Each Graph In ActiveSheet.ChartObjects
        i = i + 1
        ActiveSheet.ChartObjects(i).Activate
        If ActiveChart.ChartTitle.Text = Nom Then
        Set GraphCible = ActiveChart
        End If
    Next
    'avertissement si le graphique n'existe pas
    If IsEmpty(GraphCible) Then
        MsgBox ("Graphique " & Nom & " non trouvé. Assurez vous qu'un graphique avec ce titre existe bien")
        Else: MsgBox ("Nom du graphe trouvé: " & GraphCible.Name)
        End If
     
    'si la case sous le nom du tableau est vide, le graphique est masqué
    If (NumRow <> 0) Then
        If IsEmpty(ActiveSheet.Cells(NumRow + 1, NumCol)) Then
        ActiveSheet.ChartObjects("Graphique 6").Visible = False
        MsgBox ("Tableau " & Nom & " caché")
        Else
       ActiveSheet.ChartObjects("Graphique 6").Visible = True
        End If
    End If
     
    End Sub
    J'ai corrigé à la fin et sa marche pour moi.
    suivi des tests est le nom de ta feuille à ne pas mettre

    J'ai compris pourquoi ca ne marchais pas au debut, tu n'as pas de graphique qui s'appelle Graphique 1 puisque le 1er graphique que tu as commence par graphique2

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Aah ouf, ça marche aussi chez moi !
    merci beaucoup de ton aide !
    Par contre, juste un dernier truc: comment obtenir le nom du graphique sans le nom de la feuille?

  17. #17
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Citation Envoyé par Kobaal Voir le message
    Aah ouf, ça marche aussi chez moi !
    merci beaucoup de ton aide !
    Par contre, juste un dernier truc: comment obtenir le nom du graphique sans le nom de la feuille?
    La je ne peux te dire.
    A la barbare tu peux rechercher le nom l'onglet, chercher le nombre de caractere de l'onglet. et enlever ce nombre au nom du graphique.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'nom du graphique avec feuille:
    nom = feuillegraphique1
     
    nbcar = len(nom)
     
    nom_onglet = ThisWorkbook.Name '(je suis pas sur de ce code à voir)
     
    nbcar2 = len(nom_onglet)
     
    nbcar3 = nbcar-nbcar2
    nom_graph = right(nom,nbcar3)
    C'est une solution mais je pense qu'il existe une fonction pour trouver que le nom du graphique

  18. #18
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Essai avec:


  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Citation Envoyé par scully2501 Voir le message
    Essai avec:

    Impec !
    Pour information, le "ChartObjects.Name" retourne "Chart 15" (dans mon document complet, c'est le 15eme graphique), tandis que le "ActiveChart.Name" retourne 'nom du feuillet' + "Chart 15"

    Donc pour d'éventuelles personnes qui auraient le même problème que moi, voici le code finalisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Public Sub OptiGraphe(Nom As String)
    Dim NumRow As Long
    Dim NumCol As Long
    Dim Plage As Range
    Dim GraphCible As Variant
     
     
    Dim i As Byte
    i = 0
     
    'Plage de recherche.
    Set Plage = Range("A35:S96")
     
    'Recherche du tableau
    For Each r In Plage
        If r.Value Like Nom Then
        NumRow = r.Row
        NumCol = r.Column
        End If
    Next
    'avertissement si le tableau n'existe pas
    If NumRow = 0 Then
        MsgBox ("Tableau " & Nom & " non trouvé. Assurez vous que ce nom existe bien")
        Else: 'MsgBox (" Tableau trouvé aux coordonnées: Numrow = " & NumRow & " ; NumCol = " & NumCol)
        End If
     
    'Recherche du graphique ayant le titre correspondant
    For Each Graph In ActiveSheet.ChartObjects
        i = i + 1
        If ActiveSheet.ChartObjects(i).Chart.ChartTitle.Text = Nom Then
        Set GraphCible = ActiveSheet.ChartObjects(i)
        End If
    Next
     
     
    'avertissement si le graphique n'existe pas
    If IsEmpty(GraphCible) Then
        MsgBox ("Graphique " & Nom & " non trouvé. Assurez vous qu'un graphique avec ce titre existe bien")
        Else: 'MsgBox ("Nom du graphe trouvé: " & GraphCible.Name)
        End If
     
    'si la case sous le nom du tableau est vide, le graphique est masqué
    If (NumRow <> 0) Then
        If IsEmpty(ActiveSheet.Cells(NumRow + 1, NumCol)) Then
        ActiveSheet.ChartObjects(GraphCible.Name).Visible = False
        'MsgBox ("Tableau " & Nom & " caché")
        Else
       ActiveSheet.ChartObjects(GraphCible.Name).Visible = True
       'MsgBox ("Tableau " & Nom & " affiché")
        End If
    End If
     
     
    End Sub
    (il reste certainement optimisable et beaucoup de msgbox sont à supprimer, mais au moins, ça marche !)
    Merci encore scully2501 !

    edit: topic résolu et code revu (plus rapide)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Masquer une série de données sur un graphique
    Par Lameth dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/07/2008, 01h26
  2. [Graphique] Masquer des séries
    Par bardiya dans le forum IHM
    Réponses: 0
    Dernier message: 04/06/2008, 12h06
  3. masquer une série de graphique
    Par lbar012001 dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/12/2007, 14h28
  4. VB: Graphique (Mschart) Masquer une droite
    Par Svart26 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/07/2006, 23h04
  5. Réponses: 14
    Dernier message: 26/12/2005, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo