Définition graphique

nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010 - 14 janv. 2008 à 17:08
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010 - 15 janv. 2008 à 13:38
Bonsoir,
Mon problème cette fois ci est le suivant :
Je souhaite créer un graphique avec du code mais il se passe des choses bizarres... Voilà le code :
   Charts.Add
    ActiveChart.ChartType = xlLine
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = ValeurX
    ActiveChart.SeriesCollection(1).Values = ValeurY
   ValeurX et ValeurY sont des rangepour définir les plages de cellules sources pour le graphique.
Cette méthode ne marche pas (en fait ça a marché une fois à force de bidouiller mais je n'arrive plus à le refaire) mais vu que mes plages de données bougent tout le temps j'ai besoin d'un moyen de définition de ce style : Set ValeurX = Sheets(Nom_Feuille).Range(Cells(2, Col), Cells(2, Col_Fin))
Col et Col_fin sont deux variables integer.
Quelqu'un connait la solution svp ?

Nanardino64
Développons-nous, développeurs.

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
14 janv. 2008 à 20:44
Salut
Je n'y connais pas grand chose en graphique Excel, mais voilà l'idée que j'en ai :
Je n'ai pas testé et certains termes ne sont peut-être pas juste - à vérifier

Première chose : bizarrerie :
    ActiveChart.SeriesCollection(1).XValues = ValeurX
    ActiveChart.SeriesCollection(1).Values = ValeurY
1ere ligne : XValues et 2ème ligne, Values tout court : Est-ce normal ????

Ton code correspond à la création du graphique.
Si tu ne veux que modifier l'étendue de ton graphique après création, il ne faut modifier que les 2 dernières lignes.
Tu peux donc mettre ces lignes dans une Sub et faire apparaitre ces valeurs dans les paramètres. Exemple :
   Private Sub ModifEtendue(idCourbe As Chart, newValeurX As Long, newValeurY As Long)   ' Pas sûr du 'Chart'
      idCourbe.SeriesCollection(1).XValues = newValeurX
      idCourbe.SeriesCollection(1).Values = newValeurY
   End Sub
Et quand tu modifies la plage de cellule, il te suffit de :
- préparer les valeurs ValeurX et ValeurY (tel que tu l'as décrit à la fin de ta question)
- faire appel à cette Sub
   Call ModifEtendue(ActiveChart, ValeurX, ValeurY)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
15 janv. 2008 à 13:38
Salut,
merci de répondre,
'Première chose : bizarrerie :
    'ActiveChart.SeriesCollection(1).XValues = ValeurX
    'ActiveChart.SeriesCollection(1).Values = ValeurY
'1ere ligne : XValues et 2ème ligne, Values tout court : Est-ce normal ????
Oui c'est tout à fait normal, XValues définit l'axe des x pour le graphique et Values les valeurs de chaque série (on superpose les courbes). Dans cet exemple je n'ai qu'une série donc c'est vrai que c'était pas parlant mais à terme j'en aurai plusieurs.
Mon seul problème c'est juste de définir ActiveChart.SeriesCollection(1).XValues car avec la variable ValeurX ça ne marche pas alors que ça devrait : Charts("Chart1").SeriesCollection(1). XValues =      Worksheets("Sheet1").Range("B1:B5")
Donc ValeurX (idem pour ValeurY) dimensionné en range devrait marcher, mais non... il me met un message d'erreur comme quoi il n'arrive pas à définir la propriété XValues. Sinon le code fonctionne et prend en compte les modifs.

Nanardino64
Développons-nous, développeurs.
0
Rejoignez-nous