Probleme du reglage de Scale d'un graphique Excel

Résolu
simmart Messages postés 19 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 12 août 2011 - 29 mai 2011 à 18:40
simmart Messages postés 19 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 12 août 2011 - 30 mai 2011 à 08:50
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

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
30 mai 2011 à 00:26
"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
3
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
29 mai 2011 à 19:59
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)
0
simmart Messages postés 19 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 12 août 2011
29 mai 2011 à 20:31
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 ?
0
simmart Messages postés 19 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 12 août 2011
29 mai 2011 à 20:38
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 mai 2011 à 20:47
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
0
simmart Messages postés 19 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 12 août 2011
29 mai 2011 à 21:45
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?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 mai 2011 à 21:53
@ 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
0
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
30 mai 2011 à 00:28
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
0
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
30 mai 2011 à 00:31
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
0
simmart Messages postés 19 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 12 août 2011
30 mai 2011 à 08:50
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
0
Rejoignez-nous