Bonjour,
j'ai terminé une première version d'un classeur Calc permettant de créer
, modifier, supprimer un histogramme, un diagramme à secteur, un pilote
de données et des sous-totaux.
Je transmets un snippet concernant uniquement les histogrammmes.
Je viens juste de transmettre le snippet à dev@api.openoffice.org mais
comme c'est en français je ne pense pas que ça les intéresse.
Est-il possible de déposer quelque part le classeur pour connaître votre
avis, ce qui peut être améliorer et savoir si il est utile de le diffuser.
Laurence
<?xml version="1.0"?>
<!--
$RCSfile: $
last change: $Revision: $ $Author: $ $Date: $
(c)2003 by the copyright holders listed with the author-tags.
If no explicit copyright holder is mentioned with a certain author,
the author him-/herself is the copyright holder. All rights reserved.
Public Documentation License Notice:
The contents of this Documentation are subject to the
Public Documentation License Version 1.0 (the "License");
you may only use this Documentation if you comply with
the terms of this License. A copy of the License is
available at http://www.openoffice.org/licenses/PDL.html
The Original Documentation can be found in the CVS archives
of openoffice.org at the place specified by RCSfile: in this header.
The Initial Writer(s) of the Original Documentation are listed
with the author-tags below.
The Contributor(s) are listed with the author-tags below
without the marker for being an initial author.
All Rights Reserved.
-->
<snippet language="OOBasic" application="Calc">
<keywords>
<keyword>BarDiagram</keyword>
<keyword>addNewByName</keyword>
<keyword>Diagram</keyword>
<keyword>getDataPointProperties</keyword>
<keyword>Chart</keyword>
<keyword>Rectangle</keyword>
<keyword>LockControllers</keyword>
</keywords>
<authors>
</authors>
<question heading="création modification et suppression de diagramme à histogramme">comment créer, modifier et supprimer un histogramme
</question>
<answer>
<p>avec l'aide de la Documentation Sun Chapitre 9 : Diagrammes,</p>
<p>de la liste prog@fr.openoffice.org et du site http://ooo.developpez.com/faq/?page=Graphique</p>
<p>'Il existe plusieurs types de graphiques:</p>
<p>' * LineDiagram (Linéaires)</p>
<p>' * PieDiagram (Secteurs)</p>
<p>' * AreaDiagram (Surfaces)</p>
<p>' * BarDiagram (Barres)</p>
<p>' * XYDiagram (Nuages de points)</p>
<p></p>
<p>'Description de la méthode addNewByName:</p>
<p>' .addNewByName(aName ,aRect ,aRanges ,bColumnHeaders , bRowHeaders)</p>
<p>' aName permet de nommer le graphique.</p>
<p>' aRect Spécifie la position et les dimensions du graphique.</p>
<p>' aRanges Spécifie la plage source du graphique.</p>
<p>' bColumnHeaders: La 1ere ligne de la source est utilisée pour définir les étiquettes si la valeur True est attribuée.</p>
<p>' bRowHeaders: La 1ere colonne de la source est utilisée pour définir les étiquettes si la valeur True est attribuée.</p>
<p></p>
<p>'il est important de noter que les coordonnées d'une cellule dans calc </p>
<p>'sont de la forme (colonne, ligne) et que la numérotation commence à 0</p>
<p></p>
<listing>'=====================================================================================
'S_CreerDiagrammeHisto()
'objectif :
' Créer un histogrammes
'
'=====================================================================================
Sub S_CreerDiagrammeHisto()
Dim erreur_num
Dim erreur_txt
Dim erreur_ligne
Dim oCalc As object
Dim oFeuilles as Object
Dim oFeuilleTab As Object 'feuille qui va contenir le graphique
Dim oFeuilleData As Object 'feuille qui contient les données
Dim oRanges As new [EMAIL PROTECTED] com.sun.star.table.CellRangeAddress}
Dim numFeuille As Integer 'indice de la feuille dans le classeur
dim source(0) As new [EMAIL PROTECTED] com.sun.star.table.CellRangeAddress} 'une plage de données
Dim LigneDeb As Long
Dim ColonneDeb As Long
Dim Feuille As Long
Dim ColonneFin As Long
Dim LigneFin As Long
Dim i As Long
Dim j As Long
Dim oCharts As Object 'la collection de diagramme dans oFeuille
Dim oChart AS Object 'le diagramme sur lequel on travail
Dim Rect As New [EMAIL PROTECTED] com.sun.star.awt.Rectangle}
Dim leNom As String
Dim oDiag As Object
Dim oDataPOint As Object 'un point de données (une portion de camembert)
On Error GoTo Erreurs
oFeuilTab = "Diagramme_Histo"
oFeuilData = "Données_histo"
oCalc = ThisComponent
oFeuilles = oCalc.sheets
oFeuilleTab = oFeuilles.getByName(oFeuilTab)
oFeuilleData = oFeuilles.getByName(oFeuilData)
'Le graphique sera positionné dans la feuille Diagramme_Histo
oCharts = oFeuilleTab.Charts
'--- Spécfie la position et les dimensions du graphique ---
Rect.X = 1000 'horizontal
Rect.Y = 1500 'vertical
Rect.Width = 24000 'Largeur
Rect.Height = 13000 'Hauteur
'----------------------------------------------------------
'--- Spécifie la source du graphique ---
'Les données sont dans la plage A2:D6
'La première colonne correspond à l'axe des abscisses
'Les autres colonnes contiennent les valeurs d'ordonnées
'La première ligne contient les étiquettes des séries
'on récupère l'indice de la feuille
numFeuille = oFeuilleData.RangeAddress.sheet
Source(0).Sheet = numFeuille 'la position de la feuille peut changée
Source(0).StartColumn = 0 'Colonne A
Source(0).StartRow = 1 ' Ligne 2
Source(0).EndColumn = 3 'Colonne D
'le nombre de ligne
NbLignes = F_LongueurTable(oFeuilData, 1, 1)
Source(0).EndRow = 1 + NbLignes - 1 'le nombre de ligne peut varier
'---------------------------------------
'Création du graphique
leNom = "MonGraphique"
oCharts.addNewByName(leNom , Rect , Source() ,True , True)
'Place le graphique dans la feuille de calcul
oChart = oCharts.getByName("MonGraphique").EmbeddedObject
'bloque l'affichage des mise à jour, la mise à jour est beaucoup plus rapide
oChart.LockControllers()
With oChart
'Type de graphique (histogramme)
.Diagram = oChart.createInstance("[EMAIL PROTECTED] com.sun.star.chart.BarDiagram}")
'Modifie la couleur de fond du graphique
.Diagram.wall.FillColor =RGB(200,200,150)
'Spécifie la valeur maxi de l'étiquette des ordonnées
.Diagram.YAxis.Max = 300
'Spécifie la pas de l'étiquette des ordonnées
.Diagram.YAxis.StepMain = 50
'Attribue un titre à l'axe des abscisses
.Diagram.HasXAxisTitle = True
.Diagram.YAxisTitle.string = "Chiffre d'affaire"
'Attribue un titre à l'axe des ordonnées
.Diagram.HasYAxisTitle = True
.Diagram.XAxisTitle.string = "Commerciaux"
'La premiere colonne contient les étiquettes des séries
.DataSourceLabelsInFirstColumn = True
'La premiere ligne contient les étiquettes des séries
.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 = 10
.Diagram.XAxis.CharHeight = 10
'Attribue un titre au graphique puis un couleur à la chaîne de caractères
.Title.String = "CA par commercial"
.Title.CharColor = RGB(200,0,0)
End With
'afficher l'étiquette de données
oDiag = oFeuilleTab.drawpage.getByIndex(3).model.diagram
oDiag.setPropertyValue("DataCaption",1)
'modifier les propriétés des étiquettes de données (caractère de taille 8)
for i = 0 to 2 '(on a trois colonnes de données)
for j = 0 to NbLignes - 2 'la numérotation commence à 0 et on a compté l'intitulé
oDataPoint = oDiag.getDataPointProperties(j, i)
oDataPoint.setPropertyValue("CharHeight", 8,0) 'taille des caractères dans l'étiquette
next j
next i
'débloque l'affichage des mise à jour
oChart.unlockControllers()
Exit Sub
Erreurs:
erreur_num=err()
erreur_txt=error(erreur_num)
erreur_ligne = Erl()
MsgBox("erreur n° " + erreur_num + " à la ligne " + erreur_ligne + chr(10) + erreur_txt, 1 + 16, "S_CreerDiagrammeHisto() ")
End Sub
'=====================================================================================
'S_MajDiagrammeHisto()
'objectif :
' Mettre à jour le graphique
'
'=====================================================================================
Sub S_MajDiagrammeHisto()
Dim erreur_num
Dim erreur_txt
Dim erreur_ligne
Dim oCalc As object
Dim oFeuilles as Object
Dim oFeuille As Object
Dim oRanges As Object
Dim oFeuilData As String
Dim oFeuilTab As String
Dim newRange As new [EMAIL PROTECTED] com.sun.star.table.CellRangeAddress} 'une plage de données
Dim actualRange As new [EMAIL PROTECTED] com.sun.star.table.CellRangeAddress} 'une plage de données
Dim LigneDeb As Long
Dim ColonneDeb As Long
Dim Feuille As Long
Dim ColonneFin As Long
Dim LigneFin As Long
Dim oCharts As Object 'la collection de diagramme dans oFeuille
Dim oChart AS Object 'le diagramme sur lequel on travail
Dim oDiag As Object
Dim oDataPoint As Object 'un point de données (une portion de camembert)
On Error GoTo Erreurs
oFeuilTab = "Diagramme_Histo"
oFeuilData = "Données_histo"
oCalc = ThisComponent
oFeuilles=oCalc.sheets
oFeuille = oFeuilles.getByName(oFeuilTab)
'il n'y a qu'un graphique sur la feuille de calcul
oCharts = oFeuille.Charts
oChart = oCharts.getByName("MonGraphique")
'xray oChart
'on récupère la plage de données
oRanges = oChart.Ranges
'on récupère les propriétés de la plage de données
actualrange = oRanges(0)
Feuille = actualRange.sheet
ColonneDeb = actualRange.StartColumn
ColonneFin = actualRange.EndColumn
ligneDeb = actualRange.StartRow
LigneFin = actualRange.EndRow
'on compte le nombre de lignes de la nouvelle plage de données
'sur laquelle on veut faire pointer le diagramme
NbLignes = F_LongueurTable(oFeuilData, LigneDeb, ColonneDeb + 1)
'on définit la zone de données utilisée pour actualiser le diagramme :
newRange.sheet = Feuille
newRange.StartColumn = ColonneDeb
newRange.EndColumn = ColonneFin
newRange.startRow = ligneDeb
newRange.EndRow = ligneDeb + NbLignes - 1
'on applique les propriétés de la nouvelle plage à la plage de données du graphique
oRanges(0) = newRange
ochart.setRanges(oRanges)
Exit Sub
Erreurs:
erreur_num=err()
erreur_txt=error(erreur_num)
erreur_ligne = Erl()
MsgBox("erreur n° " + erreur_num + " à la ligne " + erreur_ligne + chr(10) + erreur_txt, 1 + 16, "S_MajDiagrammeHisto()")
End Sub
'=====================================================================================
'S_SupDiagrammeHisto()
'objectif :
' Supprimer tous les graphiques de la page
'
'=====================================================================================
Sub S_SupDiagrammeHisto()
Dim erreur_num
Dim erreur_txt
Dim erreur_ligne
Dim oCalc As object
Dim oFeuilles as Object
Dim oFeuille As Object
Dim oFeuilTab As String
Dim oCharts As Object 'la collection de diagramme dans oFeuille
Dim oChart AS Object 'le diagramme sur lequel on travail
Dim leNom As String
On Error GoTo Erreurs
oFeuilTab = "Diagramme_Histo"
oCalc = ThisComponent
oFeuilles=oCalc.sheets
oFeuille = oFeuilles.getByName( oFeuilTab)
oCharts = oFeuille.Charts
'xray oPilotDonnees
'supprimer le graphique créé par la macro
'oCharts.removebyname("MonGraphique")
'supprimer legraphique créé manuellement
'oCharts.removebyname("object1")
'supprime tous les graphiques de la feuille
For i = 0 To oCharts.Count - 1
oChart = oCharts(i)
leNom=oChart.name
oCharts.removebyname(leNom)
Next i
Exit Sub
Erreurs:
erreur_num=err()
erreur_txt=error(erreur_num)
erreur_ligne = Erl()
MsgBox("erreur n° " + erreur_num + " à la ligne " + erreur_ligne + chr(10) + erreur_txt, 1 + 16, "S_SupDiagrammeHisto()")
End Sub</listing>
</answer>
<versions>
</versions>
<operating-systems>
<operating-system name="Win32"/>
</operating-systems>
<changelog>
<change author-id="" date="2007-02-26">Initial version</change>
</changelog>
</snippet>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]