Probleme du reglage de Scale d'un graphique Excel [Résolu]

Signaler
Messages postés
19
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
12 août 2011
-
Messages postés
19
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
12 août 2011
-
Bonjour,

Je crée a partir de VB 2010 un graphique dans excel et je n'arrive pas a regler le minimumscale et maximumscale. J'ai bien sur ajouter la reference Microsoft Graph et j'ai crée un macro excel pour essayer de copier le code mais il doit etre legerement différent car je ne trouve pas la solution!

Code macro VBA que je veux appliquer dans VB 2010 :
ActiveChart.Axes(xlValue).MinimumScale = 0

Code actuel sur VB 2010 :
xlCharts = xlWorkSheet.ChartObjects
myChart = xlCharts.Add(10, 80, 300, 250)
chartPage = myChart.Chart
seco = chartPage.SeriesCollection
se = seco.NewSeries
With se
.XValues = "='Feuil1'!$A$2:$A$32"
.Values = "='Feuil1'!$B$2:$B$32"
.ChartType = Excel.XlChartType.xlXYScatter
End With

Quelqu'un pourrait-il m'aider ?

10 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
"il ne reconnait pas xlValue et xlSecondary"
Oui, normal, ce sont des constantes de Excel.
Il faut donc les faire précéder de Excel... quelque chose pour arriver à mettre ces constantes.
Tu trouveras le "Excel... quelque chose" dans Excel : Tu ouvres un classeur et tu vas dans l'éditeur de VBA.
Tu tapes F2 pour faire apparaitre l'explorateur d'objets et tu fais une recherche de ces constantes : Il te donnera le nom des parents.
Par exemple pour XlValue --> Excel.XlAxisType.XlValue
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
Salut

Quelle version de Excel ?

Attention aux noms de tes objets.
xlCharts ou xlWorkSheet sont très proches de mots réservés de Excel. Gare aux confusions et aux erreurs de compilation.

De quels types sont tes objets ?

Le code VB.Net que tu nous montres fonctionne ?
A mon avis, ces deux lignes ne peuvent pas fonctionner :
.XValues = "='Feuil1'!$A$2:$A$32"
.Values = "='Feuil1'!$B$2:$B$32"
Tu mélanges syntaxe de cellule et syntaxe VBA
Utilise Range, comme expliqué dans l'aide Excel (sur XValues)
.XValues = xlWorkSheet.Range("A2:A10")
.Values = xlWorkSheet.Range("B2:B10")

Fais fonctionner ta macro sous Excel avant de vouloir la transposer à .Net.

ChartType : En imposant un ChartType à une Serie, il se peut que les autres séries soient affectées par ton choix. Seules les types de même famille peuvent coexister sur le même Chart (par exemple, une série en xlXYScatter et l'autre en xlXYScatterLinesNoMarkers), mais si tu utilises un type du genre xl3DArea, toutes tes séries seront de ce type

Puisque .Axes s'appliquent au Chart (ActiveChart de VBA), il te suffit de l'appliquer à ton objet chartPage.
Cela sous-entend que l'échelle est unique/principale (xlPrimary)
Dans le cas d'une seconde échelle, il faut le préciser dans le paramétrage de l'appel à .Axes :
chartPage.Axes(xlValue, xlSeconday).MinimumScale

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
19
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
12 août 2011

Salut jack,

J'utilise la version 2007 d'Office.
Pour te repondre oui mon programme VB.net marche très bien, c'est justement en utilisant .range pour mettre les valeurs que ca ne marche pas, d'ou l'utilisation de :
.XValues = "='Feuil1'!$A$2:$A$32"
.Values = "='Feuil1'!$B$2:$B$32"
qui marche très bien.

Pour en revenir a mon probleme avec .Axes j'avais deja essayé le code que tu m'a suggeré
chartPage.Axes(xlValue, xlSeconday).MinimumScale = 30 par exemple et cela ne marche pas il ne reconnait pas xlValue et xlSecondary (xlPrimary pareil)...
Une autre idée ?
Messages postés
19
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
12 août 2011

OK, en retapant xlSecondary, VB 2010 m'a proposé un argument pour .Axes qui ne m'avais pas proposé avant...

Solution au problème pour ceux que ca interessent :
chartPage.Axes(Excel.XlAxisGroup.xlSecondary).MaximumScale = 20000 --> xlSecondary est l'axe des X
chartPage.Axes(Excel.XlAxisGroup.xlPrimary).MaximumScale = 20000 --> xlPrimary est l'axe des Y
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
225
Bonjour,
déjà :
- Les objets se définissent par utilisation de Set
(Set monobjet objet et non monobjet objet)
et tu en as une "tapée", dans ton code à corriger.
Comment veux-tu que soit compris 'Feuil1' ? Tu ne définis pas 'Feuil1' de quoi ! Ce terme ne peut être compris que s'il se rapporte à un classeur ouvert et défini.
etc...


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
19
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
12 août 2011

Bonsoir ucfoutu,

Je crois que tu as mal compris, le programme fonctionne bien avec 'Feuil1'. Je n'ai pas poster le début du programme ou je définis les object excel.application , workbook et worksheet.

Pour Set tu est sur que c'est absolument nécessaire? Car le programme tourne bien sans?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
225
@ simmart

Lecture dans l'aide VB
Les instructions Dim, Private, Public, ReDim et Static déclarent exclusivement des variables faisant référence à un objet. Aucun objet réel n'est désigné tant que vous n'avez pas associé un objet particulier à la variable avec l'instruction Set.





____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
chartPage.Axes(Excel.XlAxisGroup.xlSecondary).MaximumScale

Non. Le premier paramètre est toujours XlValue (et la source de cette constante).
Ce paramètre arrive en deuxième.
Fais un peu attention
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
Et je corrige : XlPrimary ou XlSecondary ne désignent pas l'axe.
C'est parce qu'il est écrit en premier paramètre que l'instruction l'a confondu avec XlValue et XlCategory
Messages postés
19
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
12 août 2011

Salut tt le monde,

Merci jack, effectivement l'explorateur d'objets de l'éditeur VBA d'excel aide beaucoup pour voir les parents.

Je rectifie donc, le code donne :
chartPage.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary).MaximumScale = 20000