Renommer un graphe ? (utilisation de graphes multiples)
Bonjour,
J'essaie de récupérer des données que j'ai filtré pour les mettres dans des graphes, je voudrai pouvoir ajouter les données sur le même graphe, il faut donc que je puisse identifier chaque graphe. Le problème c'est que je n'arrive pas à trouver comment nommer un graphe et je n'ai pas eu beaucoup de résultats dans mes recherches. Du coup, est-ce possible ?
Concrétement je veux faire deux graphes pour la charge (un avec les V et A / temps en (h), un avec les V / Ah charge) et un pour la décharge (V/Ah décharge).
Je dois pouvoir mettre à jour les graphes depuis une autre feuille, il faut donc que je puisse les identifier.
Je joint le fichier (se réferer à la macro Graphe du module 1 (en bas du module)).
Merci à ceux qui y jetteront un oeil.
Mmm j'ai essayé de le formuler comme ceci, et j'ai ce message d'erreur. Quelqu'un sait d'où cela viens ?
Erreur d'exécution '450':
Nombre d'arguments incorrect ou affectation de propriété incorrecte
Set GrapheCharge = Worksheets("TableauCourbes").ChartObjects.Add
Sub Graphe()
Dim GrapheCharge As ChartObject
g = 0
lastColC = Cells(2, Columns.Count).End(xlToLeft).Column
For c = 1 To lastColC
If Cells(1, c) = "Charge" Then
lastRowC = Cells(Rows.Count, c).End(xlUp).Row
If g = 0 Then
Set GrapheCharge = Worksheets("TableauCourbes").ChartObjects.Add
End If
With GrapheCharge.Chart
.SetSourceData (Range(Cells(2, c + 5), Cells(lastRowC, c + 6)))
.ChartType = xlLine
End With
End If
If Cells(1, c) = "Décharge" Then
End If
Next c
End Sub
Trouvé (Il manquait les dimensions) :
Set GrapheCharge = Worksheets("TableauCourbes").ChartObjects.Add(300, 400, 220)
J'essaye d'ouvrir plusieurs graphe, mais il semble qu'il n'en ouvre qu'un, ou qu'il écrit plusieurs fois sur le même (je ne sais pas pourquoi, Excel éxécute intégralement le code lorsque je place des interruptions, donc je ne peux pas suivre pas à pas.
Sub Graphe()
Dim GrapheCharge As ChartObject
Dim GrapheDecharge As CharObject
g = 0
lastColC = Cells(2, Columns.Count).End(xlToLeft).Column
For c = 1 To lastColC
If Cells(1, c) = "Charge" Then
lastRowC = Cells(Rows.Count, c).End(xlUp).Row
If g = 0 Then
Set GrapheCharge = Worksheets("TableauCourbes").ChartObjects.Add(300, 1, 400, 220)
End If
With GrapheCharge.Chart
.SetSourceData (Range(Cells(2, c + 5), Cells(lastRowC, c + 6)))
.ChartType = xlLine
End With
Worksheets("TableauCourbes").Activate
End If
If Cells(1, c) = "Décharge" Then
If g = 0 Then
Set GrapheDecharge = Worksheets("TableauCourbes").ChartObjects.Add(300, 501, 400, 220)
End If
With GrapheDecharge.Chart
.SetSourceData (Range(Cells(2, c + 5), Cells(lastRowC, c + 6)))
.ChartType = xlLine
End With
Worksheets("TableauCourbes").Activate
End If
Decalage = Decalage + 30
Next c
End Sub
Bonjour,
Je ne sais pas vraiment ce que tu veux faire, mais essaie ce code pour le graphique Charge.
Cdlt.
Option Explicit
Public Sub DEMO()
Dim ws As Worksheet
Dim rngChart As Range
Dim lastRow As Long
Dim ch As ChartObject
Dim chCharge As ChartObject
Dim chDecharge As ChartObject
Dim c As Long
Set ws = ActiveWorkbook.Worksheets("TableauCourbes")
On Error Resume Next
For Each ch In ws.ChartObjects
ch.Delete
Next ch
On Error GoTo 0
With ws
lastRow = .Cells(Rows.Count, 10).End(xlUp).Row
Set rngChart = .Range(.Cells(2, 16), .Cells(lastRow, 17))
Set chCharge = .ChartObjects.Add(300, 1, 400, 220)
chCharge.Name = "Graphique Charge"
With chCharge.Chart
.SetSourceData Source:=rngChart
.ChartType = xlLine
End With
End With
End Sub
Bonjour Jean-Eric,
J'essaie de faire un graphe pour la charge et un graphe pour la décharge (d'où les tests pour savoir s'il y a besoin de les créer), ensuite je veux mettre dans les tableaux respectifs, tous les cycles de charge ou décharge de la feuille (et d'autres feuilles du même classeur mais on verra après).
Donc dans l'idée le graphe charge aurait avec les données de ce fichier, 1 courbe
Le graphe décharge en aurait 2
J'essai donc de les nommer pour pouvoir remplir les graphes, même en changeant de feuille (j'avais pensé faire avec le graphe actif, mais si on change de feuille on ne pourra plus rapeller le premier, il faut donc que j'arrive à les identifier).
PS: J'ai fait quelques petites erreurs sur le code que j'ai corrigé, je vais essayer d'adapter votre code, j'ai toujours la même erreur sur une ligne de mon code.
Bonjour,
Je viens de me replonger dessus ce matin.
Pour le moment, le programme créer un nouveau graphe pour chaque cycle, je vais regarder si j'arrive à lui dire que si le graphe éxiste, il faut qu'il ajoute les infos sur le graphe éxistant.
Je posterai si j'avance ou si je réussi à finir cette macro (ne pas tenir compte de gd et gc, c'etait juste un test).
Le code à l'heure actuelle :
Public Sub DEMO()
Dim WS As Worksheet
Dim rngChart As Range
Dim lastRow As Long
Dim ch As ChartObject
Dim chCharge As ChartObject
Dim chDecharge As ChartObject
Dim c As Long
gc = 0
gd = 0
Set WS = ActiveWorkbook.Worksheets("TableauCourbes")
'On Error Resume Next
'For Each ch In WS.ChartObjects
'ch.Delete
'Next ch
'On Error GoTo 0
lastColC = Cells(2, Columns.Count).End(xlToLeft).Column
For c = 1 To lastColC
lastRowC = 0
If Cells(1, c) = "Charge" And gc = 0 Then
'Premier graphe de charge (Volts / Ah)
With WS
lastRowC = .Cells(Rows.Count, c - 1).End(xlUp).Row
Set rngChart = .Range(.Cells(2, c + 4), .Cells(lastRowC, c + 5))
Set chCharge = .ChartObjects.Add(300, 1, 400, 220)
chCharge.Name = "Graphique Charge"
With chCharge.Chart
.SetSourceData Source:=rngChart
.ChartType = xlLine
End With
End With
ElseIf Cells(1, c) = "Décharge" And gd = 0 Then
'Graphe de décharge (Volts / Ah)
With WS
lastRowC = .Cells(Rows.Count, c - 1).End(xlUp).Row
Set rngDeChart = Union(.Range(.Cells(2, c + 4), .Cells(lastRowC, c + 4)), .Range(.Cells(2, c + 6), .Cells(lastRowC, c + 6)))
Set chDecharge = .ChartObjects.Add(600, 1, 400, 220)
chDecharge.Name = "Graphique Decharge"
With chDecharge.Chart
.SetSourceData Source:=rngDeChart
.ChartType = xlLine
End With
End With
End If
Next c
End Sub
Re,
Je ne trouve pas comment formuler un test pour vérifier si le classeur éxiste. J'ai fait quelques tentatives mais je n'ai pas du prendre la formule adaptée.
J'essaie de vérifier si les graphes éxistent déjà, auquel cas Excel rajoute la courbe.
Du coup si quelqu'un voit un moyen de vérifier l'éxistence des graphes, cela m'aiderait beaucoup, Merci.
Public Sub DEMOV1()
Dim WS As Worksheet
Dim rngChart As Range
Dim lastRow As Long
Dim ch As ChartObject
Dim chCharge As ChartObject
Dim chDecharge As ChartObject
Dim c As Long
gc = 0
gd = 0
Set WS = ActiveWorkbook.Worksheets("TableauCourbes")
'On Error Resume Next
'For Each ch In WS.ChartObjects
'ch.Delete
'Next ch
'On Error GoTo 0
lastColC = Cells(2, Columns.Count).End(xlToLeft).Column
For c = 1 To lastColC
lastRowC = 0
If Cells(1, c) = "Charge" Then
'Premier graphe de charge (Volts / Ah)
With WS
lastRowC = .Cells(Rows.Count, c - 1).End(xlUp).Row
Set rngChart = .Range(.Cells(2, c + 4), .Cells(lastRowC, c + 4))
Set chCharge = .ChartObjects.Add(300, 1, 400, 220)
chCharge.Name = "Graphique Charge"
With chCharge.Chart
.SetSourceData Source:=rngChart
.ChartType = xlLine
.SeriesCollection(1).XValues = Range(Cells(3, c + 5), Cells(lastRowC, c + 5))
End With
End With
'Deuxième graphe de charge (Volts et Ampères / Temps en h)
With WS
lastRowC = .Cells(Rows.Count, c - 1).End(xlUp).Row
Set rngChart = Union(Range(Cells(2, c + 3), Cells(lastRowC, c + 3)), Range(Cells(2, c + 4), Cells(lastRowC, c + 4)))
Set chCharge = .ChartObjects.Add(500, 1, 400, 220)
chCharge.Name = "Graphique Charge Tension et Courant / Temps(h)"
With chCharge.Chart
.SetSourceData Source:=rngChart
.ChartType = xlLine
.SeriesCollection(1).XValues = Range(Cells(3, c), Cells(lastRowC, c))
End With
End With
ElseIf Cells(1, c) = "Décharge" Then
'Graphe de décharge (Volts / Ah)
With WS
lastRowC = .Cells(Rows.Count, c - 1).End(xlUp).Row
Set rngDeChart = .Range(.Cells(2, c + 4), .Cells(lastRowC, c + 4))
Set chDecharge = .ChartObjects.Add(700, 1, 400, 220)
chDecharge.Name = "Graphique Decharge"
With chDecharge.Chart
.ChartType = xlLine
.SetSourceData Source:=rngDeChart
.SeriesCollection(1).XValues = Range(Cells(3, c + 6), Cells(lastRowC, c + 6))
End With
End With
End If
Next c
End Sub
La partie du code qui bug, j'essaie de rajouter une nouelle coiurbe et lui attribuer des valeurs mais il semble que la ligne où j'essaie de compter, d = Charts("Graphique.....).SeriesCollection.Count , erreur d'éxecution 9.
Je pense pourtant avoir vérifier les erreurs de syntaxes et autres, mais là rien ne me vient à l'esprit.
ElseIf ed = 1 Then
d = Charts("Graphique Decharge").SeriesCollection.Count
d = d + 1
Charts("Graphique Decharge").SeriesCollection.NewSeries
Charts("Graphique Decharge").SeriesCollection(d).Values = Range(Cells(2, c + 4), Cells(lastRowC, c + 4))
Charts("Graphique Decharge").SeriesCollection(d).XValues = Range(Cells(3, c + 6), Cells(lastRowC, c + 6))
End If
End If
Next c
Réponse à ma question précedente :
Le code que j'utilise pour savoir si le graphe éxiste :
With Sheets("TableauCourbes")
For gd = 1 To .ChartObjects.Count
existe = .ChartObjects(gd).Name = "Graphique Decharge"
If existe = True Then
ed = 1
End If
Next gd
End With