[SOS] Multi courbes sur meme graphe

Benzema

XLDnaute Junior
Bonjour,

Je cherche a tracer plusieurs courbes sur 1 meme graphe.
En effet, jai plusieurs rapport avec les memes colonnes a tracer en X et Y a chaque fois, mon but est de pouvoir comparer tous ces rapports en tracant les courbes sur le meme graph.

J'ai essayer avec 1 boucle For mais il ya recouvrement du graphe par le dernier rapport, si quelqu'un as un exemple simple je suis preneur car je deviens fous...

Merci de votre aide et vos lumiere, car moi mon ampoule a grille ^^

Clem
 

Benzema

XLDnaute Junior
Re : [SOS] Multi courbes sur meme graphe

Ca marche je met mon fichier excel, mais il commence a etre assez fat, j'ai essaye de le commenter 1 peu, merci d'avance pour ton aide Pierrot,

Bonne journee,

Clem




Le code est pas mal long, en gros sur la feuille TX_WAN_11.... je saisie le nb de sheet que je veux traiter avec 1 input box puis les s cases (ligne 30) des colonnes a tracer (2 ordonnees 1 abscisse) jusque la ca marche.
Sauf que lorsque je veux changer de sheet (genre sheet 2) ca marche pas je suis oblige de rester sur la meme et ca retrace par dessus le precedant graph...


Merci de ton aide !







Sub tests()
' tests Macro
' Macro recorded 14.10.2010 by Amilien 19.10.2010

Dim c As ChartObject
Dim calc As Range, y As Range, y1 As Range, numreport As Integer

nbpages = InputBox("veuillez saisir le nombre de page a tracer")
'Si l'utilisateur clique sur le bouton Annuler,
'la fonction renvoie une chaîne de longueur nulle ("").
If nbpages = "" Then
MsgBox "annulé"
Exit Sub
Else
MsgBox nbpages
End If


With Sheets("Sheet1")
Set c = .ChartObjects.Add(.Range("G15").Left, .Range("G15").Top, 800, 400)
End With

For i = 1 To nbpages

'Calculate the number of values in a column
Set calc = Range("A:A").Find("not implemented", , xlValues, xlWhole, , , False)


'Y-axis selection---------------------------------------------------------------------------------

If Not calc Is Nothing Then
Set y_choice = Application.InputBox("Choose the Y axis column (address title's cell)", Type:=8)
'Calculate the number of values in a column
Set y = Range(y_choice.Offset(1, 0), Cells(calc.Row - 1, y_choice.Column))
y.Select
For Each v In y
v.Value = v.Value * 1 'String to number
Next
y.Name = "y": y_choice.Name = "y_choice"

End If

If Not calc Is Nothing Then
Set y1_choice = Application.InputBox("Choose the Y1 axis column (address title's cell)", Type:=8)

Set y1 = Range(y1_choice.Offset(1, 0), Cells(calc.Row - 1, y1_choice.Column))
y1.Select
For Each v In y1
v.Value = v.Value * 1 'String to number
Next
y1.Name = "yy": y1_choice.Name = "y1_choice"

End If


'X-axis selection----------------------------------------------------------------------------------

If Not calc Is Nothing Then
Set x_choice = Application.InputBox("Choose the X axis column (address title's cell)", Type:=8)
Set x = Range(x_choice.Offset(1, 0), Cells(calc.Row - 1, x_choice.Column))
x.Select
For Each v In x
v.Value = v.Value * 1 'String to number
Next
x.Name = "x": x_choice.Name = "x_choice"

End If







' Chart configurations ---------------------------------------------------------------------------------

With c.Chart
.ChartType = xlLineMarkers
.SetSourceData Source:=ActiveSheet.Range("y,yy"), PlotBy:=xlColumns
.SeriesCollection(1).XValues = "=TX_WLAN_11n_framed_802.11n_HT40!x"
.SeriesCollection(2).XValues = "=TX_WLAN_11n_framed_802.11n_HT40!yy"

.SeriesCollection(2).AxisGroup = 2
.HasTitle = True
.ChartTitle.Characters.Text = "XY Graph"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Range("x_choice")
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Range("y_choice")
.Legend.Position = xlBottom
.Legend.Font.size = 8
.Legend.Font.Bold = True
.ChartTitle.Text = "XY Graph"
.ChartTitle.Font.size = 8
.ChartTitle.Font.Bold = True
.Axes(xlCategory).TickLabels.Font.size = 8
.Axes(xlValue).TickLabels.Font.size = 8
.Axes(xlCategory, xlSecondary).HasTitle = False
.Axes(xlValue, xlSecondary).HasTitle = True
.Axes(xlValue, xlSecondary).AxisTitle.Characters.Text = Range("y1_choice")
.SeriesCollection(1).Name = Range("y_choice")
.SeriesCollection(2).Name = Range("y1_choice")
End With

Next


End Sub
 

Pièces jointes

  • HTML_TEST.zip
    23.8 KB · Affichages: 58
  • HTML_TEST.zip
    23.8 KB · Affichages: 58
  • HTML_TEST.zip
    23.8 KB · Affichages: 59

Pierrot93

XLDnaute Barbatruc
Re : [SOS] Multi courbes sur meme graphe

Bonjour,

il y a 41 graphiques sur ta feuille..... je ne comprends pas non plus la construction de ta base de donnée, celle ci étant mélangé avec du texte.... Pas top de travailler de telles données... Que cherches tu à faire exactement....
 

Benzema

XLDnaute Junior
Re : [SOS] Multi courbes sur meme graphe

Je n'ai pas le choix malheureusement, je dois elaborer une macro a partir des rapports de mesure, qui pour plus de visibilite, doit pouvoir porter sur 1 graph des donnees choisies (1 abscisse 2 ordonees) identiques a tous les rapports, afin de comparer les tests entre eux. Pour cela il faut que je puisse tracer les 2 memes courbes pour chaque rapport sur le meme graph

Je te joins une version avec 1 seul graphe et pas la boucle for pour simplifier les choses et garder que ce qui marche vraiment.
A partir de celui la jaimerai pouvoir ajouter les courbes des autres rapports sur le meme graphe pour centraliser les donnees et avoir une synthese possible.
Merci d'avance



Sub tests()
' tests Macro
' Macro recorded 14.10.2010 by Amilien 19.10.2010

Dim c As ChartObject
Dim calc As Range, y As Range, y1 As Range, numreport As Integer





'Calculate the number of values in a column
Set calc = Range("A:A").Find("not implemented", , xlValues, xlWhole, , , False)


'Y-axis selection---------------------------------------------------------------------------------

If Not calc Is Nothing Then
Set y_choice = Application.InputBox("Choose the Y axis column (address title's cell)", Type:=8)
'Calculate the number of values in a column
Set y = Range(y_choice.Offset(1, 0), Cells(calc.Row - 1, y_choice.Column))
y.Select
For Each v In y
v.Value = v.Value * 1 'String to number
Next
y.Name = "y": y_choice.Name = "y_choice"

End If

If Not calc Is Nothing Then
Set y1_choice = Application.InputBox("Choose the Y1 axis column (address title's cell)", Type:=8)

Set y1 = Range(y1_choice.Offset(1, 0), Cells(calc.Row - 1, y1_choice.Column))
y1.Select
For Each v In y1
v.Value = v.Value * 1 'String to number
Next
y1.Name = "yy": y1_choice.Name = "y1_choice"

End If


'X-axis selection----------------------------------------------------------------------------------

If Not calc Is Nothing Then
Set x_choice = Application.InputBox("Choose the X axis column (address title's cell)", Type:=8)
Set x = Range(x_choice.Offset(1, 0), Cells(calc.Row - 1, x_choice.Column))
x.Select
For Each v In x
v.Value = v.Value * 1 'String to number
Next
x.Name = "x": x_choice.Name = "x_choice"

End If







' Chart configurations ---------------------------------------------------------------------------------

With Sheets("Sheet1")
Set c = .ChartObjects.Add(.Range("G15").Left, .Range("G15").Top, 800, 400)
End With

With c.Chart
.ChartType = xlLineMarkers
.SetSourceData Source:=ActiveSheet.Range("y,yy"), PlotBy:=xlColumns
.SeriesCollection(1).XValues = "=TX_WLAN_11n_framed_802.11n_HT40!x"
.SeriesCollection(2).XValues = "=TX_WLAN_11n_framed_802.11n_HT40!yy"

.SeriesCollection(2).AxisGroup = 2
.HasTitle = True
.ChartTitle.Characters.Text = "XY Graph"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Range("x_choice")
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Range("y_choice")
.Legend.Position = xlBottom
.Legend.Font.size = 8
.Legend.Font.Bold = True
.ChartTitle.Text = "XY Graph"
.ChartTitle.Font.size = 8
.ChartTitle.Font.Bold = True
.Axes(xlCategory).TickLabels.Font.size = 8
.Axes(xlValue).TickLabels.Font.size = 8
.Axes(xlCategory, xlSecondary).HasTitle = False
.Axes(xlValue, xlSecondary).HasTitle = True
.Axes(xlValue, xlSecondary).AxisTitle.Characters.Text = Range("y1_choice")
.SeriesCollection(1).Name = Range("y_choice")
.SeriesCollection(2).Name = Range("y1_choice")
End With



End Sub
 

Pièces jointes

  • HTML_TEST.zip
    19.7 KB · Affichages: 40
  • HTML_TEST.zip
    19.7 KB · Affichages: 38
  • HTML_TEST.zip
    19.7 KB · Affichages: 42

Pierrot93

XLDnaute Barbatruc
Re : [SOS] Multi courbes sur meme graphe

Re,

regarde du coté de la méthode "newserie", ce bout de code peut peut être t'aider... plage de donnée à adapter...
Code:
Sub CreaGraph()
Dim c As ChartObject, s As Series
Set c = Feuil1.ChartObjects(1)
Set s = c.Chart.SeriesCollection.NewSeries
With s
    .Values = Feuil1.Range("M21:o21")
    .Name = Feuil1.Range("L21")
End With
End Sub

@+
 

Benzema

XLDnaute Junior
Re : [SOS] Multi courbes sur meme graphe

Merci de ta reponse,
Jai tente d'utiliser ton code en ajoutant:

Set c = Sheet1.ChartObjects(1)
Set s = c.Chart.SeriesCollection.NewSeries
With s
.XValues = "=Sheet2!x"
.XValues = "=Sheet2!yy"
.Name = Sheet2.Range("grph 2")
End With

A la suite de mon graphe, ca a pas l'air d'etre ca, apres je suis pas sur d'utiliser correctement seriescollection
 

Pierrot93

XLDnaute Barbatruc
Re : [SOS] Multi courbes sur meme graphe

Re,

si tu utilises "XValues", il faut que lui soit envoyé un objet "range"

Code:
.XValues =  Feuil5.Range("M21:o21")

Et tu ne pourra l'utiliser qu'une seule fois pour une même "SeriesCollection"...
 

Pierrot93

XLDnaute Barbatruc
Re : [SOS] Multi courbes sur meme graphe

Re,

ci-joint un exemple simple de création de graph puis ajout d'une série...

bon après midi
@+
 

Pièces jointes

  • classeur1.zip
    11.8 KB · Affichages: 111
  • classeur1.zip
    11.8 KB · Affichages: 108
  • classeur1.zip
    11.8 KB · Affichages: 98

Benzema

XLDnaute Junior
Re : [SOS] Multi courbes sur meme graphe

Merci de ton exemple, il convient parfaitement a ce que je cherche a faire,
j'ai un petit soucis en revanche et je dois avouer ne pas comprendre d'ou cela peut venir:

J'ai reutiliser ton code pour rajouter une serie pour ensuite l'adapter a mon probleme, j'ai donc uniquement changer les values entrees.

Lors de l'execution a l'aide d'un bouton comme dans ton exemple l'erreur
sur la ligne contenant le titre dit:

" Unable to set the name property of the serie class"


J'avoue ne pas comprendre pourquoi la case A1 de la sheet1 contient un string comme dans ton exemple, qui lui fonctionne parfaitement sur mon pc !

Merci de ton aide !

Sub rajoutSerie()
Dim c As ChartObject, s As Series
Set c = Sheet2.ChartObjects(1)


With c.Chart
Set s = .SeriesCollection.NewSeries
With s
.Values = Sheet2.Range("B31:B33")
.Name = Sheet2.Range("A1")
End With
End With
End Sub
 

Benzema

XLDnaute Junior
Re : [SOS] Multi courbes sur meme graphe

Merci de ta reponse,

J'ai essaye tes idees malheureusement ca ne marche pas !


Je te joins l'excel la case A1 contient un titre simple genre "sheet2" ou 1 titre du genre mais si je pouvais faire marcher ta fonction "Rajouter courbe" sur mon graph ca me permettrait de pas mal debloquer ma situation !

Bon aprem,

Clem
 

Pièces jointes

  • HTML_TEST.zip
    23.8 KB · Affichages: 49
  • HTML_TEST.zip
    23.8 KB · Affichages: 44
  • HTML_TEST.zip
    23.8 KB · Affichages: 49

Pierrot93

XLDnaute Barbatruc
Re : [SOS] Multi courbes sur meme graphe

Re,

ce code fonctionne chez moi :
Code:
Sub rajoutSerie()
Dim c As ChartObject, s As Series
Set c = Sheet2.ChartObjects(1)
With c.Chart
    Set s = .SeriesCollection.NewSeries
    With s
        .Values = Sheet1.Range("B31:B33")
        .Name = Sheet2.Range("A1").Text
    End With
End With
End Sub

Attention, j'utilise dans ce code le "codename" de la feuille (celui visible dans vba) et non le nom de la feuille (présent sur l'onglet)..

Dans ton fichier, plusieurs graphs....
 

Statistiques des forums

Discussions
312 680
Messages
2 090 865
Membres
104 681
dernier inscrit
Gtcheumawe