OVH Cloud OVH Cloud

Gestion grahique 3D en macro

2 réponses
Avatar
V!nce
Bonjour,

Ca faisait longtemps que je n'était pas venu sur ce forum et je vois avec
plaisir que ça a l'air toujours aussi dynamique ! Cool !

J'utilise surtout Excel via VBA, et en ce moment j'essaie de contrôler un
graphique "3D" par le code. J'use assez souvent de l'enregistreur de macros
qui malheureusement donne parfois des codes erronés.
Dans mon cas :
Feuil1 contient Tableau C3:L103 données à tracer en graphique de type
"surface 3D"
B3:B103 contient les valeurs de l'axe des abscisses (propriété XValues)

Je génère donc un graphique en enregistrant et ça donne :
Sub Macro3()
Charts.Add
ActiveChart.ChartType = xlSurface
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("C3:L103"),
PlotBy _
:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(2).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(3).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(4).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(5).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(6).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(7).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(8).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(9).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(10).XValues = "=Feuil1!R3C2:R103C2"
ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
With ActiveChart
.HasTitle = False
.Axes(xlCategory).HasTitle = False
.Axes(xlSeries).HasTitle = False
.Axes(xlValue).HasTitle = False
End With
End Sub

Evidemment si on execute ce code ça plante dès la deuxième ligne
d'instruction...
Mais ma plus grosse intérrogation est comment faire pour définir par le code
la propriété XValues du graphique ?
Avec une instruction du style ActiveChart.SeriesCollection(1).XValues
=Worksheets("Feuil1").range("B3:B103") ca plante. Avec un range "dynamique"
(plage nommée dans la feuille de calcul et instruction
SeriesCollection(1).XValues=.range("MaPlage")) pas mieux...
Ce que fait l'enregistreur ne fonctionne pas et mes tentatives avec XValues
ont toutes échouées... Quelqu'un a t'il une idée ?

En tout cas merci de m'avoir lu !

@+

2 réponses

Avatar
JB
Bonjour,

Qq exemples dans la rubrique graphiques:

http://boisgontierj.free.fr/pages_site/download2.htm

JB


On 16 fév, 10:24, V!nce wrote:
Bonjour,

Ca faisait longtemps que je n'était pas venu sur ce forum et je vois av ec
plaisir que ça a l'air toujours aussi dynamique ! Cool !

J'utilise surtout Excel via VBA, et en ce moment j'essaie de contrôler un
graphique "3D" par le code. J'use assez souvent de l'enregistreur de macr os
qui malheureusement donne parfois des codes erronés.
Dans mon cas :
Feuil1 contient Tableau C3:L103 données à tracer en graphique de type
"surface 3D"
B3:B103 contient les valeurs de l'axe des abscisses (propriété XValue s)

Je génère donc un graphique en enregistrant et ça donne :
Sub Macro3()
Charts.Add
ActiveChart.ChartType = xlSurface
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("C3:L103"),
PlotBy _
:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(2).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(3).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(4).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(5).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(6).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(7).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(8).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(9).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(10).XValues = "þuil1!R3C2:R103C2"
ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
With ActiveChart
.HasTitle = False
.Axes(xlCategory).HasTitle = False
.Axes(xlSeries).HasTitle = False
.Axes(xlValue).HasTitle = False
End With
End Sub

Evidemment si on execute ce code ça plante dès la deuxième ligne
d'instruction...
Mais ma plus grosse intérrogation est comment faire pour définir par le code
la propriété XValues du graphique ?
Avec une instruction du style ActiveChart.SeriesCollection(1).XValues
=Worksheets("Feuil1").range("B3:B103") ca plante. Avec un range "dynami que"
(plage nommée dans la feuille de calcul et instruction
SeriesCollection(1).XValues=.range("MaPlage")) pas mieux...
Ce que fait l'enregistreur ne fonctionne pas et mes tentatives avec XValu es
ont toutes échouées... Quelqu'un a t'il une idée ?

En tout cas merci de m'avoir lu !

@+


Avatar
V!nce
Merci,

Je n'ai pas vraiment trouvé la réponse à mes interrogations, mais à partir
de tes exemples, j'ai essayé de définir les maxs et mins de l'axe(xlValues)
de mon graphique. Ca ne fontionne pas non plus...
Je me suis résolu finalement à ne pas traiter séparement l'axe des x mais
plutôt à passer l'ensemble de ma plage de données, échelles comprises, par
l'instruction Activechart.setsourcedata et je m'en sort comme ça... Mais
j'aime pas abandonner et laisser un truc sans réponses !!! ;-)

En tout cas, merci pour tous les exemples sur ton site, je ne le connaissais
pas et je pense que je vais souvent y aller faire un tour dorenavant !

@+



Bonjour,

Qq exemples dans la rubrique graphiques:

http://boisgontierj.free.fr/pages_site/download2.htm

JB


On 16 fév, 10:24, V!nce wrote:
Bonjour,

Ca faisait longtemps que je n'était pas venu sur ce forum et je vois avec
plaisir que ça a l'air toujours aussi dynamique ! Cool !

J'utilise surtout Excel via VBA, et en ce moment j'essaie de contrôler un
graphique "3D" par le code. J'use assez souvent de l'enregistreur de macros
qui malheureusement donne parfois des codes erronés.
Dans mon cas :
Feuil1 contient Tableau C3:L103 données à tracer en graphique de type
"surface 3D"
B3:B103 contient les valeurs de l'axe des abscisses (propriété XValues)

Je génère donc un graphique en enregistrant et ça donne :
Sub Macro3()
Charts.Add
ActiveChart.ChartType = xlSurface
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("C3:L103"),
PlotBy _
:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(2).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(3).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(4).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(5).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(6).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(7).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(8).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(9).XValues = "þuil1!R3C2:R103C2"
ActiveChart.SeriesCollection(10).XValues = "þuil1!R3C2:R103C2"
ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
With ActiveChart
.HasTitle = False
.Axes(xlCategory).HasTitle = False
.Axes(xlSeries).HasTitle = False
.Axes(xlValue).HasTitle = False
End With
End Sub

Evidemment si on execute ce code ça plante dès la deuxième ligne
d'instruction...
Mais ma plus grosse intérrogation est comment faire pour définir par le code
la propriété XValues du graphique ?
Avec une instruction du style ActiveChart.SeriesCollection(1).XValues
=Worksheets("Feuil1").range("B3:B103") ca plante. Avec un range "dynamique"
(plage nommée dans la feuille de calcul et instruction
SeriesCollection(1).XValues=.range("MaPlage")) pas mieux...
Ce que fait l'enregistreur ne fonctionne pas et mes tentatives avec XValues
ont toutes échouées... Quelqu'un a t'il une idée ?

En tout cas merci de m'avoir lu !

@+