Nommer les axes des graphiques
Bonjour,
Je continue dans la construction d'un code VBA permettant de faire certains calculs et construire les graphiques correspondants. Cependant, des problèmes persistent. Dans le code ci dessous, une erreur persiste et je ne comprends pas pourquoi.
'constuction de graphiques
Sub graphiques()
nbfeuil = Sheets("statistiques").Index - 1
Set graph = ThisWorkbook.Charts.Add
graph.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Graphs"
For g = 1 To nbfeuil
endline = Worksheets("calculs").Range("a65000").Offset(0, g * 2 - 2).End(xlUp).Row
With ActiveChart
.SeriesCollection.NewSeries
.SeriesCollection(g).Name = Worksheets(g).Name
.SeriesCollection(g).XValues = Range(Worksheets("calculs").Range("a2").Offset(0, g * 2 - 2), Worksheets("calculs").Range("a" & endline).Offset(0, g * 2 - 2))
.SeriesCollection(g).Values = Range(Worksheets("calculs").Range("a2").Offset(0, g * 2 - 1), Worksheets("calculs").Range("a" & endline).Offset(0, g * 2 - 1))
End With
Next g
'modif du graph
With graph
.HasTitle = True
With .ChartTitle
.Characters.Text = "Estimation par la méthode KDE"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Characters.Text = "Densité d'occurence"
End With
With .Axes(xlValue, xlSecondary) 'l'erreur est ici
.HasTitle = True
.AxisTitle.Characters.Text = "Taux de rentabilité"
End With
End With
Sheets("graphs").Move after:=Sheets("calculs")
End SubSi vous avez d'autres remarques générales pour améliorer le code pour graphiques, je suis intéressée. Merci
Bonsoir,
Sans aucune garantie, car je n'ai aucune idée du graphe que tu fais, essaie de remplacer la ligne
With .Axes(xlValue, xlSecondary) 'l'erreur est icipar
With .Axes(xlCategory, xlPrimary)La valeur xlSecondary est utilisée quand on a plusieurs groupes d'axes. Et je suppose que tu veux nommé l'axe horizontal, donc xlCategory...
A+
Benead
Merci encore!
Je suis en admiration devant les connaissances des personnes sur ce forum. Comment faites vous?! En tout cas merci.
Cependant une autre question concernant les graphiques: y a t-il un moyen de programmer les couleurs et les fonds des graphs comme le propose Excel 2007 ou 2010 histoire de faire les choses jolies ? y a t-il un tuto que je pourrais lire?
Bonsoir,
Si tu fais une recherche, tu trouveras quelques sites de ce style :
Mais je ne suis pas sûr qu'il y ait de véritables tutos.
Un très bonne solution pour apprendre, est de démarrer l'enregistreur de macro, de changer la couleur d'une partie de ton graphique, ensuite de lire le code et de récupérer l'information qui t'intéresses.
Par exemple j'ai fait un graphique en faisant F11 sur une feuille de données, puis j'ai démarré l'enregistreur de macro, modifié la couleur de fond de la légende du graphique en rouge, ensuite j'ai arrêté l'enregistreur de macro. Le code est celui-ci :
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveChart.Legend.Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Solid
End With
End SubQuand on lit le code on s'aperçoit que c'est la ligne ForeColor.RGB qui effectue le changement de couleur. La couleur rouge est identifiée par le code RGB(255, 0, 0). Dans la macro, on peut voir également d'autre instructions qui ne nous intéressent pas pour notre exemple, donc on va alleger la macro .
Par contre avant de supprimer les ligne examinons ce code :
ActiveChart.Legend.Select > On sélectionne la légende
With Selection.Format.Fill > On commence une série d'instruction sur la l'arrière plan de la légende
.Visible = msoTrue > On dit que la légende est visible, si tu mets msoFalse, il n'y aura aucun remplissage (dans ce cas les lignes suivantes deviendront obsolètes
.ForeColor.RGB = RGB(255, 0, 0) > on change la couleur de fond en rouge
.Transparency = 0 > On mets la transparence à opaque (choix entre 0.0 et 1.0)
.Solid > on détermine le type de remplissage (uni). (Si on veut un dégradé, il faut mettre plusieurs autres instructions)
End With > on termine la série d"instruction sur la l'arrière plan de la légende
Donc si tu veux uniquement changer la couleur du motif de la légende, il faut que supprime toutes les lignes qui sont inutiles, ce qui donne :
Sub Macro2()
ActiveChart.Legend.Select
With Selection.Format.Fill
.ForeColor.RGB = RGB(255, 0, 0)
End With
End SubComme tu n'as plus qu'une seule instruction de remplissage de la légende, tu peux supprimer les lignes With et End With et modifier la ligne ForeColor comme cela :
Sub Macro3()
ActiveChart.Legend.Select
Selection.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
End SubEnfin, comme on n'est pas obligé de sélectionner un objet pour le modifier, le résultat est donc celui-ci :
Sub Macro4()
ActiveChart.Legend.Format.Fill.ForeColor.RGB = RGB(255, 100, 0)
End SubDu coup la macro s'exécute plus vite, car elle ne modifie que le stricte nécessaire.
Autre chose très importante : quand tu es sur une ligne de code et que tu veux de l'aide sur un mot, tu mets le curseur sur le mot (ou tu le sélectionnes) puis tu tapes sur F1, tu verras l'aide est précise et très bien faite.
Ceci dit, si tu as encore besoin de conseil et/ou d'aide pour colorier tes graphiques, on sera toujours là pour te répondre.
A+
Benead
C'est très bien merci.
En effet, j'ai déjà fait tourner une macro avec le changement de couleurs. Cependant, j'ai l'impression que sous Excel 2010 je n'ai pas eu la même solution que toi.
Aussi, quand au lieu de RGB() je met une couleur directement (...Color=6 par exemple), la cellule prend une couleur noir, peu impote le chiffre que je met dans le code.
J'ai l'impression qu'il y a pas mal de différences entre les versions de Excel.
Bonsoir darkanet,
J'ai aussi Excel 2010. Je suis désolé de te dire cela mais le problème ne vient pas d'Excel, mais de toi ! Eh oui, Quand tu mets la propriété :
.ForeColor.RGB = 6
c'est l'équivalent de
.ForeColor.RGB = RGB(6, 0, 0)
Et le résultat est du noir...
Si tu veux mettre un index de couleur, il faut mettre :
.ForeColor.SchemeColor = 6
1=Blanc, 2=Rouge, 3=Vert... et le 6=Magenta.
C'est pourquoi, il est important de bien comprendre le code. Ton plus grand allié est l'enregistreur de macros...
A+
Benead
A vrai dire, le code était le suivant:
With Worksheets(1).Range("D1")
.Interior.Color = 6C'est pareil?
Mais j'essayerais avec SchemeColor
Merci
Salut le forum
Un petit coup de F1
Color, propriété
Cette propriété renvoie ou définit la couleur principale de l'objet.
Utilisez la fonction RGB pour créer une valeur de couleur
ColorIndex, propriété
Cette propriété renvoie ou définit la couleur.
La couleur est spécifiée sous la forme d'une valeur d'index dans la palette de couleurs actuelle.
With Worksheets(1).Range("D1")
.Interior.ColorIndex = 6
End WithVa te retourne un fond de couleur Jaune.
Mytå
Merci, j'avais oublié le INDEX.
Bonsoir darkanett,
Comme quoi plus la question est précise, plus la réponse est pertinente...
Attention, ColorIndex ne fonctionne pas avec tous les objets. De même ShemeColor ne fonctionne pas avec les Ranges. La solution, je me répète : enregistreur de macro...
A+
Benead