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 Sub

Si 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 ici

par

       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 :

http://astuces.jeanviet.info/bureautique/excel-2007-creer-des-graphiques-qui-reagissent-a-vos-donnees.htm

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 Sub

Quand 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 Sub

Comme 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 Sub

Enfin, 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 Sub

Du 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 = 6

C'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 With

Va 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

Rechercher des sujets similaires à "nommer axes graphiques"