XL 2010 Graphe mixte

menal

XLDnaute Nouveau
Bonjour,
Je voulais tracer une graphique contenant à la fois un histogramme et une courbe est ce c’est possible par vba? Et est ce que je peux faire un axe secondaire?
Cordialement
 
Solution
Bonjour menal

Oui, c'est possible.
Sans fichier exemple, difficile de fournir une meilleure reponse. Cependant, avec l'enregistreur de macros, je te propose ce code a adapter a tes donnes reeles. La plage de donnees est E2:F8 avec le titre des series en ligne 2.
VB:
Sub Macro1()
    Range("E2:F8").Select
    ActiveSheet.Shapes.AddChart2(322, xlColumnClustered).Select
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnClustered
    ActiveChart.FullSeriesCollection(2).ChartType = xlLine
    ActiveChart.FullSeriesCollection(2).Select
    ActiveChart.FullSeriesCollection(2).AxisGroup = 2
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.FullSeriesCollection(2).Select
End Sub

La partie de declaration de l'axe...

Fred0o

XLDnaute Barbatruc
Bonjour menal

Oui, c'est possible.
Sans fichier exemple, difficile de fournir une meilleure reponse. Cependant, avec l'enregistreur de macros, je te propose ce code a adapter a tes donnes reeles. La plage de donnees est E2:F8 avec le titre des series en ligne 2.
VB:
Sub Macro1()
    Range("E2:F8").Select
    ActiveSheet.Shapes.AddChart2(322, xlColumnClustered).Select
    ActiveChart.FullSeriesCollection(1).ChartType = xlColumnClustered
    ActiveChart.FullSeriesCollection(2).ChartType = xlLine
    ActiveChart.FullSeriesCollection(2).Select
    ActiveChart.FullSeriesCollection(2).AxisGroup = 2
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.FullSeriesCollection(2).Select
End Sub

La partie de declaration de l'axe secondaire pour la serie 2 est la suivante :
Code:
    ActiveChart.FullSeriesCollection(2).AxisGroup = 2
 

menal

XLDnaute Nouveau
Bonjour,
J'ai un problème bête je cherche à attribuer la même couleur à la série 1 et 3 ( 2 et 4 ) mais il refuse je sais pas pourquoi.

Merci d'avance
Voici mon code:

Sub TracerTempFinSeq()
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name = "Gragique" Then
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
ws.Delete
Application.ScreenUpdating = True
End If
Next
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Gragique"
Dim Grf As ChartObject
Set ws = Sheets("Gragique")
For Each Grf In ws.ChartObjects
If Grf.Name = "Variation de Force" Then
Grf.Delete
Exit For
End If
Next Grf
Set Grf = ws.ChartObjects.Add(140, 10, 500, 300)
Grf.Name = "Variation de TempFinSeq"
Set Grf = ws.ChartObjects.Add(140, 10, 500, 300)
With Grf.Chart
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.ChartType = xlColumnClustered
.Values = Sheets("TempfinSeqMesure-TempfinSeq4Seq").[C2:C20]
.XValues = Sheets("TempfinSeqMesure-TempfinSeq4Seq").[A2:A20]
.Name = "TempfinSeqMesure-TempfinSeq4Seq"
.Interior.Color = RGB(0, 0, 255)
End With
.SeriesCollection.NewSeries
With .SeriesCollection(2)
.ChartType = xlColumnClustered
.Values = Sheets("TempfinSeqMesure-TempfinSeqLam").[C2:C20]
.XValues = Sheets("TempfinSeqMesure-TempfinSeq4Seq").[A2:A20]
.Name = "TempfinSeqMesure-TempfinSeqLam"
.Interior.Color = RGB(255, 0, 0)

End With
.SeriesCollection.NewSeries

With .SeriesCollection(3)
.AxisGroup = 2
.ChartType = xlLine
.Values = Sheets("TempfinSeqMesure-TempfinSeq4Seq").[E2:E20]

.XValues = Sheets("TempfinSeqMesure-TempfinSeq4Seq").[A2:A20]
.Name = "TempfinSeqMesure-TempfinSeq4Seq"
.Interior.Color = RGB(0, 0, 255)
End With
.SeriesCollection.NewSeries
With .SeriesCollection(4)
.AxisGroup = 2
.ChartType = xlLine
.Values = Sheets("TempfinSeqMesure-TempfinSeqLam").[E2:E20]

.XValues = Sheets("TempfinSeqMesure-TempfinSeq4Seq").[A2:A20]
.Name = "TempfinSeqMesure-TempfinSeqLam"
.Interior.Color = RGB(255, 0, 0)
End With
.HasTitle = True
.ChartTitle.Characters.Text = "Variation de TempFinSeq"
End With
End Sub
 

Fred0o

XLDnaute Barbatruc
Re-Bonjour menal.

1- Pour ameliorer la visibilite de test posts, merci d'utiliser les balises [ CODE=vb] et [ /CODE] (sans espaces)
2 - Ensuite, merci de joindre un fichier exemple avec des donnees fictives et ton code adapte au fichier exemple pour que l'on puisse tester et corriger.
 

menal

XLDnaute Nouveau
Voici mon Code:
Code:
Sub TracerTempFinSeq()
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name = "Gragique" Then
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
ws.Delete
Application.ScreenUpdating = True
    End If
Next
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Gragique"
Dim Grf As ChartObject
Set ws = Sheets("Gragique")
For Each Grf In ws.ChartObjects
    If Grf.Name = "Variation de Force" Then
        Grf.Delete
        Exit For
    End If
Next Grf
Set Grf = ws.ChartObjects.Add(140, 10, 500, 300)
Grf.Name = "Variation de TempFinSeq"
With Grf.Chart
  .SeriesCollection.NewSeries
  With .SeriesCollection(1)
  .ChartType = xlColumnClustered
    .Values = Sheets("Feuil2").[C2:C20]
    .XValues = Sheets("Feuil2").[A2:A20]
    .Name = "TempfinSeqMesure-TempfinSeq4Seq"
     .Interior.Color = RGB(0, 0, 255)
  End With
  .SeriesCollection.NewSeries
With .SeriesCollection(2)
.ChartType = xlColumnClustered
    .Values = Sheets("Feuil1").[C2:C20]
    .XValues = Sheets("Feuil1").[A2:A20]
    .Name = "TempfinSeqMesure-TempfinSeqLam"
    .Interior.Color = RGB(255, 0, 0)
  End With
  .SeriesCollection.NewSeries
  With .SeriesCollection(3)
    .AxisGroup = 2
   .ChartType = xlLine
    .Values = Sheets("Feuil2").[E2:E20]
    .XValues = Sheets("Feuil2").[A2:A20]
.Name = "TempfinSeqMesure-TempfinSeq4Seq"
   .Interior.Color = RGB(0, 0, 255)
  End With
  .SeriesCollection.NewSeries
With .SeriesCollection(4)
.AxisGroup = 2
  .ChartType = xlLine
    .Values = Sheets("Feuil1").[E2:E20]

    .XValues = Sheets("Feuil1").[A2:A20]
.Name = "TempfinSeqMesure-TempfinSeqLam"
.Interior.Color = RGB(255, 0, 0)
  End With
  .HasTitle = True
    .ChartTitle.Characters.Text = "Variation de TempFinSeq"
End With
End Sub
 

Pièces jointes

  • Classeur1.xlsx
    11.8 KB · Affichages: 7

Fred0o

XLDnaute Barbatruc
Re-Bonjour

Pour la serie 3, il te faut remplacer la ligne
VB:
.Interior.Color = RGB(0, 0, 255)
par la ligne
VB:
.Format.Line.ForeColor.RGB = RGB(0, 0, 255)
Et pour la serie 4, il te faut remplacer la ligne
VB:
.Interior.Color = RGB(255, 0, 0)
par la ligne
VB:
.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
 

menal

XLDnaute Nouveau
ça marche merci bcoup :)
Est ce c'est possible de masquer le nom de la série 3 et 4 ?
J'ai essayé aussi de nommer les axes mais ça marche pas pour l'axe secondaire
VB:
With .Axes(xlCategory, xlPrimary)
 .HasTitle = True
.AxisTitle.Characters.Text = "Durée(s)"
End With
With .Axes(xlValue, xlPrimary)
      .HasTitle = True
      .AxisTitle.Characters.Text = "%relatif"
      End With
      With .Axes(xlValue, xSecondery)
      .HasTitle = True
      .AxisTitle.Characters.Text = "%cummulée"
      End With
 

Fred0o

XLDnaute Barbatruc
Re-Bonjour

1585222841144.png


Tu as juste mal orthographié : xlSecondary
 

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin