OVH Cloud OVH Cloud

Graph : changer la sources de données

7 réponses
Avatar
Gilgamesh
Bonjour,

j'ai des séries de graphiques dont la source de donnée est un tableau
qui ets mis à jour par une macro. Le nombre de ligne et de colonne varie
en conséquence.

Quelles instructions VBA permettent de reparamétrer la source de données
des graphes ?

j'ai essayé ça, mais ça ne passe pas

Public Sub SelectDataGraph(FeuilleGraph As String, FeuilleData As
String, AxeX As String, Names As String, Values As String)

'Nom des séries
Sheets(FeuilleGraph).SeriesCollection.Names =
Sheets(FeuilleData).Range(Names)

'Axe des x
Sheets(FeuilleGraph).SeriesCollection.XValues =
Sheets(FeuilleData).Range(AxeX)

'Création des série de données
Sheets(FeuilleGraph).SetSourceData
Source:=Worksheets(FeuilleData).Range(Values)
End Sub


merci

7 réponses

Avatar
twinley
Bonjour,

C'est là que ça se passe, avec les formules "décaler"

http://www.excelabo.net/xl/graph.php#grdyncomplexe

--
à+twinley
"Gilgamesh" a écrit dans le message de
news:
Bonjour,

j'ai des séries de graphiques dont la source de donnée est un tableau
qui ets mis à jour par une macro. Le nombre de ligne et de colonne varie
en conséquence.

Quelles instructions VBA permettent de reparamétrer la source de données
des graphes ?

j'ai essayé ça, mais ça ne passe pas

Public Sub SelectDataGraph(FeuilleGraph As String, FeuilleData As
String, AxeX As String, Names As String, Values As String)

'Nom des séries
Sheets(FeuilleGraph).SeriesCollection.Names > Sheets(FeuilleData).Range(Names)

'Axe des x
Sheets(FeuilleGraph).SeriesCollection.XValues > Sheets(FeuilleData).Range(AxeX)

'Création des série de données
Sheets(FeuilleGraph).SetSourceData
Source:=Worksheets(FeuilleData).Range(Values)
End Sub


merci


Avatar
Gilgamesh

Bonjour,

C'est là que ça se passe, avec les formules "décaler"

http://www.excelabo.net/xl/graph.php#grdyncomplexe



-- merci. J'ai essayé cela, mais ça ne marche pas terrible parce que les
graphiques comportent un nombre arbitraire de série (autant que de ligne
dans le tableau). Pour chaque série il faut donner l'adresse de la
cellule qui convient. Or elles sont détruites et recrée à chaque fois...

En fait et pour la suite des événement j'aimerais bien l'instruction VBA
kivabien pour paramétrer les graphiques :

ValeurX : va de la celluleA (gauche) à la celluleB (droite)
Nom des Série : ...
Valeur : ...

Ça doit bien exister quand même :-)

=
==

Avatar
twinley
Je fais quelque chose qui ressemble. J'ai bricolé un truc qui va faire
bondir les puristes. Mais en attendant plus élégant, je tourne avec...
Voici le code décomposé pour comprendre les étapes. J'arrive à remplir
XValues et YValues des séries.
Quand tu supprimes quatre séries, c'est toujours le même numéro de série. Xl
ajuste le n° de l'objet.
On peut simplifier mais pour comprendre, c'est plus pratique. J'espère que
cela va t'aider.
Je dois m'absenter cet aprème, à suivre...

TLa1 = xTLlignedeb - xTLlignefin
TLb1 = xTLlignefin - xTLlignefin
TLa2 = Application.Substitute(1 * Format(equationdeb, "#####.00"), ",",
".")
TLb2 = Application.Substitute(1 * Format(equationfin, "#####.00"), ",",
".")
TLa = "={" & TLa1 & "," & TLb1 & "}"
TLb = "={" & TLa2 & "," & TLb2 & "}"
'pour créer une serie avec les deux params XValues et YValues
'xdebut = ("B" & Sheets("Graph1").Range("H2"))
'ydebut = ("O" & Sheets("Graph1").Range("H2"))
'zone4 = "B12,O12" & "," & xdebut & "," & ydebut
zone4 = "B12,O12" & "," & "B" & xTLlignedeb & "," & "O" & xTLlignedeb

Sheets("Graph1").Range(zone4).Copy
'Sheets("Graph1").Range("B12,P12,B22,P22").Copy
ActiveSheet.ChartObjects("Graphique1m").Activate
ActiveChart.SeriesCollection.Paste NewSeries:=True
ActiveChart.SeriesCollection(5).XValues = TLa ' ex : "={10.0}"
ActiveChart.SeriesCollection(5).Values = TLb ' ex :
"={3534,9.3533,08"}
'ActiveChart.SeriesCollection(5).Name = "parallele"

ActiveChart.SeriesCollection(5).Trendlines.Add(Forward:).Select
With Selection.Border
.ColorIndex = 6
.Weight = xlThin
End With
--
à+twinley
"Gilgamesh" a écrit dans le message de
news:

Bonjour,

C'est là que ça se passe, avec les formules "décaler"

http://www.excelabo.net/xl/graph.php#grdyncomplexe



-- merci. J'ai essayé cela, mais ça ne marche pas terrible parce que les
graphiques comportent un nombre arbitraire de série (autant que de ligne
dans le tableau). Pour chaque série il faut donner l'adresse de la
cellule qui convient. Or elles sont détruites et recrée à chaque fois...

En fait et pour la suite des événement j'aimerais bien l'instruction VBA
kivabien pour paramétrer les graphiques :

ValeurX : va de la celluleA (gauche) à la celluleB (droite)
Nom des Série : ...
Valeur : ...

Ça doit bien exister quand même :-)

= >
==



Avatar
Gilgamesh
merci :-)

bon je vais voir, mais j'aimerais quand même avoir tout simplement la
syntaxe pour paramétrer une série de donnée.

Ma philosophie ici ce serait de faire un boucle par série...

Du genre :

For c = 2 To Sheets(FeuilleData).Range(Names).Columns.Count - 1
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(c).XValues = ???
ActiveChart.SeriesCollection(c).Name = ???
ActiveChart.SeriesCollection(c).Values = ???
Next c

Ça doit bien exister !


a+
==
Avatar
twinley
tu me sembles sur la bonne piste. Je suis preneur d'un truc plus simple...
Je te rappelle que tu dois simuler la saisie de ={3534.9,3533.08}
et que ton séparateur de décimal est probablement la virgule.
D'ou le passage par Application.Substitute(1 * Format(equationdeb,
"#####.00"), ",",
".")
pour changer la virgule en point.
--
à+twinley
"Gilgamesh" a écrit dans le message de
news:
merci :-)

bon je vais voir, mais j'aimerais quand même avoir tout simplement la
syntaxe pour paramétrer une série de donnée.

Ma philosophie ici ce serait de faire un boucle par série...

Du genre :

For c = 2 To Sheets(FeuilleData).Range(Names).Columns.Count - 1
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(c).XValues = ???
ActiveChart.SeriesCollection(c).Name = ???
ActiveChart.SeriesCollection(c).Values = ???
Next c

Ça doit bien exister !


a+
==


Avatar
Gilgamesh

tu me sembles sur la bonne piste. Je suis preneur d'un truc plus simple...
Je te rappelle que tu dois simuler la saisie de ={3534.9,3533.08}
et que ton séparateur de décimal est probablement la virgule.
D'ou le passage par Application.Substitute(1 * Format(equationdeb,
"#####.00"), ",",
".")
pour changer la virgule en point.


Oh oh... Ça pourrait expliquer la difficulté que j'ai parfois de
"passer" une valeur.

merci

a+
==

Avatar
twinley
c'est ce qui donne un air lourdingue à mon code, mais on doit créer la
chaîne de car et traduire en anglais.
Mais en 4 lignes c'est fait, et si un costaud s'en mêle, il va te faire ça
en 2 coups de cuillère à pot.

--
à+twinley
"Gilgamesh" a écrit dans le message de
news:%

tu me sembles sur la bonne piste. Je suis preneur d'un truc plus
simple...


Je te rappelle que tu dois simuler la saisie de ={3534.9,3533.08}
et que ton séparateur de décimal est probablement la virgule.
D'ou le passage par Application.Substitute(1 * Format(equationdeb,
"#####.00"), ",",
".")
pour changer la virgule en point.


Oh oh... Ça pourrait expliquer la difficulté que j'ai parfois de
"passer" une valeur.

merci

a+
==