hello,
houla il y a pas mal d'erreurs dans le code, ça sent le bricolage avec des bouts de code pris à droite à gauche.
D'autre part tu aurais du nous dire tout de suite ce que tu voulais faire (avec un exemple des données d'entrée dans un fichier calc). Je ne vois pas trop non plus comment tu veux intégrer deux colonnes ( date et temps ) pour définir l'abscisse du graphique. Il faut certainement concaténer ses deux colonnes pour avoir une colonne date -time.
Plutôt que de corriger les erreurs, voilà ce que je te propose :
une procédure qui trace un graphique avec 3 arguments :
Le titre du graphique qui sera aussi le nom de l'objet graphique créé.
Le rectangle où sera tracé le graphique
Les plages de sources de données :
La première celle des abscisses
La ou les suivantes celle(s) des ordonnées :
Code : Tout sélectionner
Sub TraceGraphique(Titre,Rect,Source)
' J.P Juillet 2018
Dim Charts,myChart As Object
Dim i as Integer
Charts = ThisComponent.Sheets(1).Charts
If NOT Charts.hasByName(Titre) Then
Charts.addNewByName(Titre, Rect, Source(), True, True)
End If
myChart = Charts.getByName(Titre).EmbeddedObject
With myChart
.Diagram = .createInstance("com.sun.star.chart.XYDiagram")
'Lissage des lignes (0: pas de lissage, 1: spline cubique, 2: spline B)
.Diagram.SplineType = 0
'Change le symbole des points
.Diagram.SymbolType = com.sun.star.chart.ChartSymbolType.SYMBOL1
'Modifie la couleur de fond du graphique
.Diagram.wall.FillColor =RGB(150,150,150)
'Attribue un titre à l'axe des abscisses
.Diagram.HasXAxisTitle = True
.Diagram.XAxisTitle.string = "Temps"
'Attribue un titre à l'axe des ordonnées
.Diagram.HasYAxisTitle = True
.Diagram.YAxisTitle.string = "Vitesses"
'La première ligne contient les étiquettes des séries
.DataSourceLabelsInFirstColumn = False
.DataSourceLabelsInFirstRow = True
'Rotation des étiquettes pour l'axe des abscisses
.Diagram.XAxis.TextRotation = 9000 '90 degrés
'redéfinit la taille des étiquettes pour les abscisses et les ordonnées
.Diagram.YAxis.CharHeight = 8
myChart.Diagram.XAxis.CharHeight = 8
'Attribue un titre au graphique puis un couleur à la chaîne de caractères
myChart.Title.String = Titre
myChart.Title.CharColor = RGB(200,0,0)
myChart.HasLegend = True
.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOM
.Legend.FillStyle = com.sun.star.drawing.FillStyle.SOLID
.Legend.FillColor = RGB(210, 210, 210)
.Legend.CharHeight = 8
End With
End Sub
et voici un exemple d'utilisation où je trace deux graphiques :
le premier avec comme abscisse la colonne A et deux courbes (colonne C et D )
le deuxième avec comme abscisse la colonne A et deux courbes (colonne C et E )
Je n'utilise pas la colonne B (voir début de mon message).
Code : Tout sélectionner
Sub TracerGraphiques()
Dim Odoc,OSheet As Object
Dim Rect As New com.sun.star.awt.Rectangle
Dim Source(2) As New com.sun.star.table.CellRangeAddress
Rect.X = 100
Rect.Y = 1000
Rect.Width = 25000
Rect.Height = 10000
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
'selection of X data
Source(0) = oSheet.getCellRangeByName("A1:A13").getRangeAddress()
'selection of Y data
Source(1) = oSheet.getCellRangeByName("C1:C13").getRangeAddress()
Source(2) = oSheet.getCellRangeByName("D1:D13").getRangeAddress()
TraceGraphique("Graphique1",Rect,Source)
Rect.Y = 12000
Source(2) = oSheet.getCellRangeByName("E1:E13").getRangeAddress()
TraceGraphique("Graphique2",Rect,Source)
End Sub
avec ceci en entrée :
TracerGraphiques-1.png
j'obtiens ceci en sortie :
TracerGraphiques-2.png
Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.