Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA Graphiques : comment affecter un tableau de valeurs à une série d'un graphique ?

9 réponses
Avatar
Luc Voeltzel
Bonsoir,

Je cherche vainement à affecter à une série d'un graphique en points reliés
, les valeurs d'un tableau construit par boucle, sans passer par une plage.
Quelqu'un a-t-il une solution ?

ci-dessous le code qui résume le problème :

Sub trace_mafonction(Graph As Chart, x1#, y1#, x2#, y2#)

Dim maserie As Series 'la série ajoutée
Dim CX As Variant 'liste des X
Dim CY As Variant 'liste des Y
dim i as integer 'compteur
dim N as Integer 'nombre déléments dans ma série

N = 500
redim CX(1 to N)
redim CY(1 to N)

Set maserie = Graph.SeriesCollection.NewSeries

For i = 1 To N
CX(i) = x1 + i - 1
CY(i) = a + b * (x1 + i - 1)
Next i

maserie.XValues = CX ' PLANTAGE : Erreur 1004,
Impossible de définir la propriété
' XValues de la classe Series
maserie.Values = CY

maserie.ChartType = xlXYScatterLinesNoMarkers
maserie.AxisGroup = 1

end sub


Merci, pour vos réponses.

9 réponses

Avatar
Luc Voeltzel
Le code fourni dans le message précédent est inexact car il est extrait
d'une macro plus complexe. Ci-dessous la "bonne version" :

Sub trace_mafonction(Graph As Chart, x1as double)
'x1 est le premier point où débute la série
Dim maserie As Series 'la série ajoutée
Dim CX As Variant 'liste des X
Dim CY As Variant 'liste des Y
dim i as integer 'compteur
dim N as Integer 'nombre déléments dans ma série
dim a as double, b as double

N = 500
a=1
b=1

redim CX(1 to N)
redim CY(1 to N)

Set maserie = Graph.SeriesCollection.NewSeries

For i = 1 To N
CX(i) = x1 + i - 1
CY(i) = a + b * (x1 + i - 1)
Next i

maserie.XValues = CX ' PLANTAGE : Erreur 1004, Impossible de définir la
propriété XValues de la classe Series
maserie.Values = CY

maserie.ChartType = xlXYScatterLinesNoMarkers
maserie.AxisGroup = 1

end sub

Merci pour vos réponses ! Je n'ai toujours pas trouvé la solution.... :-(















"Luc Voeltzel" a écrit dans le message de
news:uHa9v%23$
Bonsoir,

Je cherche vainement à affecter à une série d'un graphique en points
reliés

, les valeurs d'un tableau construit par boucle, sans passer par une
plage.

Quelqu'un a-t-il une solution ?

ci-dessous le code qui résume le problème :

Sub trace_mafonction(Graph As Chart, x1#, y1#, x2#, y2#)

Dim maserie As Series 'la série ajoutée
Dim CX As Variant 'liste des X
Dim CY As Variant 'liste des Y
dim i as integer 'compteur
dim N as Integer 'nombre déléments dans ma série

N = 500
redim CX(1 to N)
redim CY(1 to N)

Set maserie = Graph.SeriesCollection.NewSeries

For i = 1 To N
CX(i) = x1 + i - 1
CY(i) = a + b * (x1 + i - 1)
Next i

maserie.XValues = CX ' PLANTAGE : Erreur 1004,
Impossible de définir la propriété
' XValues de la classe Series
maserie.Values = CY

maserie.ChartType = xlXYScatterLinesNoMarkers
maserie.AxisGroup = 1

end sub


Merci, pour vos réponses.




Avatar
garnote
Bonsoir Luc,

Voici un exemple qui pourra peut-être t'éclairer :

Option Base 1
Sub Ajoute_Une_Serie()
Dim ns As Series
Dim graphe As ChartObject
Dim X()
Dim Y()
Set graphe = ActiveSheet.ChartObjects("MonGraphique")
Set ns = graphe.Chart.SeriesCollection.NewSeries
For i = -5 To 5
j = j + 1
ReDim Preserve X(j)
ReDim Preserve Y(j)
X(j) = i
Y(j) = i ^ 2
Next i
With ns
.XValues = X
.Values = Y
End With
End Sub

Serge













"Luc Voeltzel" a écrit dans le message de news: uHa9v%23$
Bonsoir,

Je cherche vainement à affecter à une série d'un graphique en points reliés
, les valeurs d'un tableau construit par boucle, sans passer par une plage.
Quelqu'un a-t-il une solution ?

ci-dessous le code qui résume le problème :

Sub trace_mafonction(Graph As Chart, x1#, y1#, x2#, y2#)

Dim maserie As Series 'la série ajoutée
Dim CX As Variant 'liste des X
Dim CY As Variant 'liste des Y
dim i as integer 'compteur
dim N as Integer 'nombre déléments dans ma série

N = 500
redim CX(1 to N)
redim CY(1 to N)

Set maserie = Graph.SeriesCollection.NewSeries

For i = 1 To N
CX(i) = x1 + i - 1
CY(i) = a + b * (x1 + i - 1)
Next i

maserie.XValues = CX ' PLANTAGE : Erreur 1004,
Impossible de définir la propriété
' XValues de la classe Series
maserie.Values = CY

maserie.ChartType = xlXYScatterLinesNoMarkers
maserie.AxisGroup = 1

end sub


Merci, pour vos réponses.




Avatar
Garette
Bonsoir Garnote,

J'arrive à faire fonctionner ton code si :
N est inférieur à 81
et si je remplace :
Set maserie = Graph.SeriesCollection.NewSeries

par :
Charts.Add
Set maserie = Charts(1).SeriesCollection.NewSeries

Mais je ne sais pas dire pourquoi N doit etre inférieur à 81 ....
Avatar
Garette
Bonsoir Luc,

J'arrive à faire fonctionner ton code si :
N est inférieur à 81
et si je remplace :
Set maserie = Graph.SeriesCollection.NewSeries

par :
Charts.Add
Set maserie = Charts(1).SeriesCollection.NewSeries

Mais je ne sais pas dire pourquoi N doit etre inférieur à 81 ....
Avatar
garnote
Salut Luc,

Ne tiens pas compte de mon dernier message.
Je viens de constater que le bogue survient quand
N est supérieur à 79. Pourquoi cette limite, je ne sais pas.

Serge




"Luc Voeltzel" a écrit dans le message de news:
Le code fourni dans le message précédent est inexact car il est extrait
d'une macro plus complexe. Ci-dessous la "bonne version" :

Sub trace_mafonction(Graph As Chart, x1as double)
'x1 est le premier point où débute la série
Dim maserie As Series 'la série ajoutée
Dim CX As Variant 'liste des X
Dim CY As Variant 'liste des Y
dim i as integer 'compteur
dim N as Integer 'nombre déléments dans ma série
dim a as double, b as double

N = 500
a=1
b=1

redim CX(1 to N)
redim CY(1 to N)

Set maserie = Graph.SeriesCollection.NewSeries

For i = 1 To N
CX(i) = x1 + i - 1
CY(i) = a + b * (x1 + i - 1)
Next i

maserie.XValues = CX ' PLANTAGE : Erreur 1004, Impossible de définir la
propriété XValues de la classe Series
maserie.Values = CY

maserie.ChartType = xlXYScatterLinesNoMarkers
maserie.AxisGroup = 1

end sub

Merci pour vos réponses ! Je n'ai toujours pas trouvé la solution.... :-(















"Luc Voeltzel" a écrit dans le message de
news:uHa9v%23$
Bonsoir,

Je cherche vainement à affecter à une série d'un graphique en points
reliés

, les valeurs d'un tableau construit par boucle, sans passer par une
plage.

Quelqu'un a-t-il une solution ?

ci-dessous le code qui résume le problème :

Sub trace_mafonction(Graph As Chart, x1#, y1#, x2#, y2#)

Dim maserie As Series 'la série ajoutée
Dim CX As Variant 'liste des X
Dim CY As Variant 'liste des Y
dim i as integer 'compteur
dim N as Integer 'nombre déléments dans ma série

N = 500
redim CX(1 to N)
redim CY(1 to N)

Set maserie = Graph.SeriesCollection.NewSeries

For i = 1 To N
CX(i) = x1 + i - 1
CY(i) = a + b * (x1 + i - 1)
Next i

maserie.XValues = CX ' PLANTAGE : Erreur 1004,
Impossible de définir la propriété
' XValues de la classe Series
maserie.Values = CY

maserie.ChartType = xlXYScatterLinesNoMarkers
maserie.AxisGroup = 1

end sub


Merci, pour vos réponses.








Avatar
Garette
Garnote,

Le premier message était pour Luc mais meme pb avec ton code.
i = 1 to 81 pas de probleme
i = 1 to 82 ça plante ...
Avatar
garnote
Salut Luc,

Pour te dépatouiller tu pourrais déposer tes valeurs X et Y
dans deux colonnes libres et définir tes XValues et Values
en te référant aux adresses des cellules.
La limite passera alors de 80 à 32 000.
Voici un exemple :

Sub Appel()
Dim graphe As Chart
Set graphe = ActiveSheet.ChartObjects("MonGraphique").Chart
trace_mafonction graphe, 5
End Sub

Sub trace_mafonction(Graph As Chart, x1 As Double)
Dim maserie As Series
Dim i As Integer
Dim N As Integer
Dim a As Double, b As Double
Dim X()
Dim Y()
N = 500
ReDim X(1 To N, 1 To 1)
ReDim Y(1 To N, 1 To 1)
a = 1
b = 1
Set maserie = Graph.SeriesCollection.NewSeries
For i = 1 To N
X(i, 1) = x1 + i - 1
Y(i, 1) = a + b * (x1 + i - 1)
Next i
'Je suppose ici que les colonnes 1 et 2 de la feuille active sont libres
Set vx = Range(Cells(1, 1), Cells(N, 1))
Set vy = Range(Cells(1, 2), Cells(N, 2))
vx.Value = X
vy.Value = Y
With maserie
.XValues = vx
.Values = vy
.ChartType = xlXYScatterLinesNoMarkers
.AxisGroup = 1
End With
End Sub
Avatar
Garette
Re,

La limite à 81 est bizarre mais de toutes façons, il ne sera pas possible
d'aller au delà de N= ~ 155.
En effet, les formules dans Excel sont limitées à 1024 caracteres et lorsque
=SERIE(;{012345678910 .... dans la barre de formule
Aux alentours de 155 on aura ~1024 caracteres dans cette formule donc ça
plantera ...

Une solution du type de celle de Garnote me semble incontournable ...
Avatar
Luc Voeltzel
Merci pour vos réponses,
elles ont largement éclairci ma lanterne, et je crois que sans elles je
chercherai encore...

Je n'avais pas la notion d'une limitation en taille des séries d'un graphe.
La solution de Serge est très efficace, et je constate qu'effectivement on
est obligé de passer par l'adressage d'une plage.

Excusez-moi pour mon absence de réponse hier soir, mais fatigué je dormais
comme un loir...

Merci :-)

A l'intention de Serge et Garette.

"Luc Voeltzel" a écrit dans le message de
news:uHa9v%23$
Bonsoir,

Je cherche vainement à affecter à une série d'un graphique en points
reliés

, les valeurs d'un tableau construit par boucle, sans passer par une
plage.

Quelqu'un a-t-il une solution ?

ci-dessous le code qui résume le problème :

Sub trace_mafonction(Graph As Chart, x1#, y1#, x2#, y2#)

Dim maserie As Series 'la série ajoutée
Dim CX As Variant 'liste des X
Dim CY As Variant 'liste des Y
dim i as integer 'compteur
dim N as Integer 'nombre déléments dans ma série

N = 500
redim CX(1 to N)
redim CY(1 to N)

Set maserie = Graph.SeriesCollection.NewSeries

For i = 1 To N
CX(i) = x1 + i - 1
CY(i) = a + b * (x1 + i - 1)
Next i

maserie.XValues = CX ' PLANTAGE : Erreur 1004,
Impossible de définir la propriété
' XValues de la classe Series
maserie.Values = CY

maserie.ChartType = xlXYScatterLinesNoMarkers
maserie.AxisGroup = 1

end sub


Merci, pour vos réponses.