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

Affichage "conditionnel" d'un graphique

Kobal

XLDnaute Junior
Bonjour à tous !
Je viens encore vous embêter pour profiter de vos lumières...
Je réalise une feuille sous excel où j'ai 7 graphiques pour 7 tableaux. Seulement, ces tableaux ne sont pas forcément remplis.
J'aimerai donc que les graphiques correspondant soient masqués lorsque leur tableau respectif est vide

Pour cela, j'ai dans l'idée de d'abord rechercher, pour chaque tableau, le graphique correspondant (ils comportent le même titre). Ensuite, de voir si le tableau est rempli (si ces valeurs sont différentes de 0). Et enfin de masquer le graphique le cas échéant.
Mais là, je sèches déjà sur la recherche du graphique.
J'ai écrit ça, avec quelques informations glanées un peu partout.

Code:
Private Sub OptiGraphe(Nom As String)

Dim NumRow As Long
Dim NumCol As Long
Dim Plage As Range
Dim GraphCible As Variant
Dim Graph As Variant

Dim i As Byte

Set Plage = Range("A1:S96")

For Each r In Plage
    If r.Value Like Nom Then
    NumRow = r.Row
    NumCol = r.Column
    End If
Next

For Each Graph In ActiveWorksheet.ChartObjects
    i = i + 1
    ActiveWorksheet.ChartObjects(i).Activate
    If ActiveChart.Name = Nom Then
    Set GraphCible= ActiveChart
    End If
Next

MsgBox ("Numrow = " & NumRow & " ; NumCol = " & NumCol)
MsgBox ("Nom du graphe trouvé: " & GraphCible.Name)

End Sub
Le debuggueur me dit "objet requis", avec la ligne "for each graph in activeworksheet.Chartobjects" en surligné.
Donc déjà, qu'est ce qui va pas dans le code actuel?
Et avez vous une idée pour la suite? (masquer un graphe)

Merci d'avance !
 

skoobi

XLDnaute Barbatruc
Re : Affichage "conditionnel" d'un graphique

Bonsoir,
en rouge pour le bug, en vert pour simplifier:

Code:
For Each Graph In [COLOR="Red"]ActiveSheet[/COLOR].ChartObjects
    i = i + 1
    [COLOR="SeaGreen"]Graph[/COLOR](i).Activate
    If [COLOR="SeaGreen"]Graph[/COLOR].Name = Nom Then
    
    Set GraphCible= [COLOR="SeaGreen"]Graph[/COLOR]
    End If
Next

pour ce qui est de masquer un graphe test ceci:

Code:
Graph.Visible = False
 

Kobal

XLDnaute Junior
Re : Affichage "conditionnel" d'un graphique

Bonjour et merci Skoobi ! (et bonjour aux autres, tout de même)

Je vais voir ce que je peux faire avec Graph.Visible = false

Par contre,
Code:
Graph(i).Activate
ne fonctionne pas.

Donc j'ai corrigé le bug et ça donne ça:
Code:
For Each Graph In ActiveSheet.ChartObjects
    i = i + 1
    ActiveSheet.ChartObjects(i).Activate
    If ActiveChart.Name = Nom Then
    Set GraphCible = ActiveChart
    End If
Next

Ca marche, mais par contre, je ne retrouve pas le graphe que je serai censé trouver... Donc j'ai une question: Est ce que le "name" d'un graphe est le titre du graphique sous excel? ou faut il le définir d'une autre façon?

edit: apparemment, le name d'une graphique serait du type "nom du feuillet graphique n°". Donc y a-t-il une méthode pour avoir son titre?

re-edit: j'ai trouvé la réponse, pour obtenir le titre d'un graphique (tel qu'on le voit dans excel), c'est :
Code:
Chart.ChartTitle.Text

edit encore: je viens d'essayer la méthode Visible d'un graphique, mais j'obtiens une erreur 1004, avec le texte:
"Impossible de définir la méthode visible de la classe chart"
 
Dernière édition:

Kobal

XLDnaute Junior
Re : Affichage "conditionnel" d'un graphique

Bonjour à tous
Désolé pour le double post, mais déjà, ça permet de remonter mon problème, et aussi pour résumer, mon problème actuel est:
Comment utiliser le paramètre Visible d'un graphique? (et déjà, existe-t-il?)
(cf l'erreur que j'obtiens avec Chart.Visible = False, dans mon post précédent, dernier edit)

edit: j'ai trouvé la solution sur un autre OVH-Forum - Powered by vBulletin.
Merci quand même.
La bonne entrée est:
ActiveSheet.ChartObjects("Graphique 1").Visible = False
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…