Créer un graphique sans utiliser de Range
Bonjour à tous,
C’est sans doute une question idiote, mais comment fait-on pour créer un graphique sans utiliser une plage de donnée ?
Je m’explique : j’ai trois variables créer et définit dans VBA(Single) et j’aimerais faire un Pie chart avec, donc en soit rien de compliqué... Le problème c’est que ni SeriesCollection ni SetSourceData n’ont l’air de marcher...
Quelqu’un aurait-il une piste de réflexion ???
Merci de votre aide !
PS : je n’ai pas ajoute de fichier, le problème étant simple je ne pense pas que cela soit pertinent
Bonjour
si j'ai bien compris la demande.... à ma connaissance, il n'est possible de faire un graphique qu'avec des éléments qui se trouve sur une feuille excel.
donc si tu as toutes tes données dans des variables du code Excel... il faudra les coller quelque part dans une feuille pour faire le graphique....
Fred
Bonjour,
Oui effectivement c'était bien la question. Dommage alors :) Merci !
J'attends de voir si d'autres réponses peuvent être apportées, sinon je clôturerais et ferais des graph via la méthode normale.
Bonjour,
Je m’explique : j’ai trois variables créer et définit dans VBA(Single) et j’aimerais faire un Pie chart avec, donc en soit rien de compliqué... Le problème c’est que ni SeriesCollection ni SetSourceData n’ont l’air de marcher...
PS : je n’ai pas ajoute de fichier, le problème étant simple je ne pense pas que cela soit pertinent
Je crois qu'au contraire, si vous nous montriez ce que vous avez fait (sans données confidentielles et avec le code) il serait plus facile de se rendre compte de ce qui ne va pas.
Cdlt
Bonjour,
Ci-dessous la partie du code pertinente. La partie intéressante se situe après les appels de sous subs.
J’obtiens trois valeurs : Total_Production, Total_Scheduled et Total_Unscheduled, et j’aimerais en faire un PieChart.
Le code ci-dessous fonctionne, cependant je suis oblige de déclarer une Range rgData, puis de l’associer au graphique avec SetSourceData, et après seulement je peux la modifier avec la SerieCollection.
Je me demande donc s’il est possible de ne pas passer par cette déclaration de Range qui au final est inutile, non ?
Merci !
Option Explicit
Public Total_Production, Total_Scheduled, Total_Unscheduled, Availability, Deviation As Single
Public Week_Choice, Line_Start, Offset_Tab As Integer
Sub Update_OEE()
Dim ii, jj, last_line As Integer
Dim CH As Chart
Dim CO As ChartObject
Dim rgGraph, rgData As Range
Dim ns1, ns2 As Series
With ThisWorkbook.Sheets("Record_List")
last_line = .Range("C" & .Rows.Count).End(xlUp).row
Line_Start = 3
Week_Choice = 17
Offset_Tab = 7 'Between the two tab
For ii = 3 To last_line
If WorksheetFunction.WeekNum(.Cells(ii, 1), vbMonday) = Week_Choice Then
Line_Start = ii
Exit For
End If
Next
For jj = Line_Start To last_line - 1
If .Cells(jj, 2).Value = "Start process - ¹¤ÒÕ¿ªÊ¼" And .Cells(jj + 1, 2) <> "Finish process - ¹¤ÒÕ½áÊø" Then
ThisWorkbook.Sheets("Record_List").Unprotect Password:="Tint1"
.Cells(jj, 4).Value = "Unscheduled Event - ·Ç¼Æ»®Ê¼þ" ' If something happen while a batch is processing, the batch has to be done again, so the stopped process become unscheduled event
ThisWorkbook.Sheets("Record_List").Protect Password:="Tint1"
End If
Next
Call Calcul_Production 'Update the data for Total_Production
Call Calcul_Scheduled 'Update the data for Total_Scheduled
Call Calcul_Unscheduled 'Update the data for Total_Unscheduled
With ThisWorkbook.Sheets("Sheet1")
Set rgGraph = .Range(.Cells(11, 10), .Cells(21, 16)) 'The range of data where the graph is going to be put
Set rgData = .Range(.Cells(4, ii + 1), .Cells(4, ii + 6)) 'The range of data used by the graph
Set CO = .ChartObjects.Add(200, 10, 300, 150)
End With
Set CH = CO.Chart
CH.ChartType = xlPie
CH.SetSourceData rgData
With ThisWorkbook.Sheets("Sheet1").ChartObjects(1)
.Top = rgGraph.Top
.Left = rgGraph.Left
.Height = rgGraph.Height
.Width = rgGraph.Width
.Activate
End With
ActiveChart.SeriesCollection(1).Name = "OEE"
ActiveChart.SeriesCollection(1).Values = Array(Total_Production, Total_Scheduled, Total_Unscheduled)
'ActiveChart.SeriesCollection(2).Name = "Scheduled Event - ¼Æ»®Ê¼þ"
'ActiveChart.SeriesCollection(2).Values = Total_Scheduled
'ActiveChart.SeriesCollection(3).Name = "Unscheduled Event - ·Ç¼Æ»®Ê¼þ"
'ActiveChart.SeriesCollection(3).Values = Total_Unscheduled
End With
End Sub