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&#233;ation modification et suppression de diagramme &#224; histogramme">comment cr&#233;er, modifier et supprimer un histogramme
</question>

<answer>
<p>avec l&apos;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>&apos;Il existe plusieurs types de graphiques:</p>
<p>&apos;     * LineDiagram (Lin&#233;aires)</p>
<p>&apos;     * PieDiagram (Secteurs)</p>
<p>&apos;     * AreaDiagram (Surfaces)</p>
<p>&apos;     * BarDiagram (Barres)</p>
<p>&apos;     * XYDiagram (Nuages de points)</p>
<p></p>
<p>&apos;Description de la m&#233;thode addNewByName:</p>
<p>&apos;     .addNewByName(aName ,aRect ,aRanges ,bColumnHeaders , bRowHeaders)</p>
<p>&apos;     aName permet de nommer le graphique.</p>
<p>&apos;     aRect Sp&#233;cifie la position et les dimensions du graphique.</p>
<p>&apos;     aRanges Sp&#233;cifie la plage source du graphique.</p>
<p>&apos;     bColumnHeaders: La 1ere ligne de la source est utilis&#233;e pour d&#233;finir les &#233;tiquettes si la valeur True est attribu&#233;e.</p>
<p>&apos;     bRowHeaders: La 1ere colonne de la source est utilis&#233;e pour d&#233;finir les &#233;tiquettes si la valeur True est attribu&#233;e.</p>
<p></p>
<p>&apos;il est important de noter que les coordonn&#233;es d&apos;une cellule dans calc </p>
<p>&apos;sont de la forme (colonne, ligne) et que la num&#233;rotation commence &#224; 0</p>
<p></p>
<listing>&apos;=====================================================================================
&apos;S_CreerDiagrammeHisto() 

&apos;objectif :
&apos;	Cr&#233;er un histogrammes
&apos;
&apos;=====================================================================================
Sub S_CreerDiagrammeHisto() 

	Dim	erreur_num
	Dim	erreur_txt
	Dim	erreur_ligne 
	
	Dim oCalc As object
	Dim oFeuilles as Object
	Dim oFeuilleTab As Object &apos;feuille qui va contenir le graphique
	Dim oFeuilleData As Object &apos;feuille qui contient les donn&#233;es

	Dim oRanges As new [EMAIL PROTECTED] com.sun.star.table.CellRangeAddress}
	Dim numFeuille As Integer 	&apos;indice de la feuille dans le classeur

	dim source(0) As new [EMAIL PROTECTED] com.sun.star.table.CellRangeAddress} &apos;une plage de donn&#233;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	&apos;la collection de diagramme dans oFeuille
	Dim oChart AS Object	&apos;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	&apos;un point de donn&#233;es (une portion de camembert)
	
On Error GoTo Erreurs	

	oFeuilTab = &quot;Diagramme_Histo&quot;
	oFeuilData = &quot;Donn&#233;es_histo&quot;
	oCalc = ThisComponent
	oFeuilles = oCalc.sheets 
	oFeuilleTab = oFeuilles.getByName(oFeuilTab)
	oFeuilleData = oFeuilles.getByName(oFeuilData)  

	&apos;Le graphique sera positionn&#233; dans la feuille Diagramme_Histo 
	oCharts = oFeuilleTab.Charts 
	
	&apos;--- Sp&#233;cfie la position et les dimensions du graphique ---
	Rect.X = 1000 &apos;horizontal
	Rect.Y = 1500 &apos;vertical
	Rect.Width = 24000 &apos;Largeur
	Rect.Height = 13000 &apos;Hauteur
	&apos;----------------------------------------------------------

	&apos;--- Sp&#233;cifie la source du graphique ---
	&apos;Les donn&#233;es sont dans la plage A2:D6
	&apos;La premi&#232;re colonne correspond &#224; l&apos;axe des abscisses 
	&apos;Les autres colonnes contiennent les valeurs d&apos;ordonn&#233;es
	&apos;La premi&#232;re ligne contient les &#233;tiquettes des s&#233;ries
	&apos;on r&#233;cup&#232;re l&apos;indice de la feuille
	numFeuille = oFeuilleData.RangeAddress.sheet
	Source(0).Sheet = numFeuille	&apos;la position de la feuille peut chang&#233;e
	Source(0).StartColumn = 0 &apos;Colonne A
	Source(0).StartRow = 1  &apos; Ligne 2
	Source(0).EndColumn = 3 &apos;Colonne D
	&apos;le nombre de ligne
	NbLignes = F_LongueurTable(oFeuilData, 1, 1)
	Source(0).EndRow = 1 +  NbLignes - 1 &apos;le nombre de ligne peut varier
	&apos;---------------------------------------
	
	&apos;Cr&#233;ation du graphique
	leNom = &quot;MonGraphique&quot;
	oCharts.addNewByName(leNom , Rect , Source() ,True , True) 

	&apos;Place le graphique dans la feuille de calcul
	oChart = oCharts.getByName(&quot;MonGraphique&quot;).EmbeddedObject 
	&apos;bloque l&apos;affichage des mise &#224; jour, la mise &#224; jour est beaucoup plus rapide	
	oChart.LockControllers()	
	With oChart
		&apos;Type de graphique (histogramme)
		.Diagram = oChart.createInstance(&quot;[EMAIL PROTECTED] com.sun.star.chart.BarDiagram}&quot;)

		&apos;Modifie la couleur de fond du graphique
		.Diagram.wall.FillColor =RGB(200,200,150)
		  
		&apos;Sp&#233;cifie la valeur maxi de l&apos;&#233;tiquette des ordonn&#233;es
		.Diagram.YAxis.Max = 300
		&apos;Sp&#233;cifie la pas de l&apos;&#233;tiquette des ordonn&#233;es
		.Diagram.YAxis.StepMain = 50
		
		&apos;Attribue un titre &#224; l&apos;axe des abscisses
		.Diagram.HasXAxisTitle = True 
		.Diagram.YAxisTitle.string = &quot;Chiffre d&apos;affaire&quot; 
		 
		&apos;Attribue un titre &#224; l&apos;axe des ordonn&#233;es  
		.Diagram.HasYAxisTitle = True 
		.Diagram.XAxisTitle.string = &quot;Commerciaux&quot; 
		 
		&apos;La premiere colonne contient les &#233;tiquettes des s&#233;ries 
		.DataSourceLabelsInFirstColumn = True
		&apos;La premiere ligne contient les &#233;tiquettes des s&#233;ries 
		.DataSourceLabelsInFirstRow = True
		  
		&apos;Rotation des &#233;tiquettes pour l&apos;axe des abscisses
		.Diagram.XAxis.TextRotation = 9000 &apos;90 degr&#233;s
		  
		&apos;red&#233;finit la taille des &#233;tiquettes pour les abscisses et les ordonn&#233;es
		.Diagram.YAxis.CharHeight = 10
		.Diagram.XAxis.CharHeight = 10
		 
		&apos;Attribue un titre au graphique puis un couleur &#224; la cha&#238;ne de caract&#232;res
		.Title.String = &quot;CA par commercial&quot;
		.Title.CharColor = RGB(200,0,0)
	End With


	&apos;afficher l&apos;&#233;tiquette de donn&#233;es 
	oDiag =	oFeuilleTab.drawpage.getByIndex(3).model.diagram
	oDiag.setPropertyValue(&quot;DataCaption&quot;,1)
	&apos;modifier les propri&#233;t&#233;s des &#233;tiquettes de donn&#233;es (caract&#232;re de taille 8)
	for i = 0 to 2 &apos;(on a trois colonnes de donn&#233;es)
		for j = 0 to NbLignes - 2 &apos;la num&#233;rotation commence &#224; 0 et on a compt&#233; l&apos;intitul&#233;
			oDataPoint = oDiag.getDataPointProperties(j, i)
			oDataPoint.setPropertyValue(&quot;CharHeight&quot;, 8,0) &apos;taille des caract&#232;res dans l&apos;&#233;tiquette
		next j
	next i
	&apos;d&#233;bloque l&apos;affichage des mise &#224; jour
	oChart.unlockControllers()	
	Exit Sub
Erreurs:
	erreur_num=err()
	erreur_txt=error(erreur_num)
	erreur_ligne = Erl()
	MsgBox(&quot;erreur n&#176; &quot; + erreur_num + &quot; &#224; la ligne &quot; + erreur_ligne + chr(10) + erreur_txt, 1 + 16, &quot;S_CreerDiagrammeHisto() &quot;) 
End Sub

&apos;=====================================================================================
&apos;S_MajDiagrammeHisto()

&apos;objectif :
&apos;	Mettre &#224; jour le graphique
&apos;
&apos;=====================================================================================

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} &apos;une plage de donn&#233;es
	Dim actualRange As new [EMAIL PROTECTED] com.sun.star.table.CellRangeAddress} &apos;une plage de donn&#233;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	&apos;la collection de diagramme dans oFeuille
	Dim oChart AS Object	&apos;le diagramme sur lequel on travail
	Dim oDiag As Object
	Dim oDataPoint As Object	&apos;un point de donn&#233;es (une portion de camembert)
	
On Error GoTo Erreurs	

	oFeuilTab = &quot;Diagramme_Histo&quot;
	oFeuilData = &quot;Donn&#233;es_histo&quot;

	oCalc = ThisComponent
	oFeuilles=oCalc.sheets
	oFeuille = oFeuilles.getByName(oFeuilTab)
	
	
	&apos;il n&apos;y a qu&apos;un graphique sur la feuille de calcul
	oCharts = oFeuille.Charts
	oChart = oCharts.getByName(&quot;MonGraphique&quot;)
	&apos;xray oChart
	&apos;on r&#233;cup&#232;re la plage de donn&#233;es
	oRanges = oChart.Ranges
	&apos;on r&#233;cup&#232;re les propri&#233;t&#233;s de la plage de donn&#233;es
	actualrange = oRanges(0)
	Feuille = actualRange.sheet
	ColonneDeb = actualRange.StartColumn
	ColonneFin = actualRange.EndColumn
	ligneDeb = actualRange.StartRow
	LigneFin = actualRange.EndRow
	&apos;on compte le nombre de lignes de la nouvelle plage de donn&#233;es
	&apos;sur laquelle on veut faire pointer le diagramme
	NbLignes = F_LongueurTable(oFeuilData, LigneDeb, ColonneDeb + 1)
	&apos;on d&#233;finit la zone de donn&#233;es utilis&#233;e pour actualiser le diagramme :
	newRange.sheet = Feuille
	newRange.StartColumn = ColonneDeb
	newRange.EndColumn = ColonneFin
	newRange.startRow = ligneDeb
	newRange.EndRow = ligneDeb + NbLignes - 1
	&apos;on applique les propri&#233;t&#233;s de la nouvelle plage &#224; la plage de donn&#233;es du graphique
	oRanges(0) = newRange
	ochart.setRanges(oRanges)

	Exit Sub
Erreurs:
	erreur_num=err()
	erreur_txt=error(erreur_num)
	erreur_ligne = Erl()
	MsgBox(&quot;erreur n&#176; &quot; + erreur_num + &quot; &#224; la ligne &quot; + erreur_ligne + chr(10) + erreur_txt, 1 + 16, &quot;S_MajDiagrammeHisto()&quot;) 
End Sub


&apos;=====================================================================================
&apos;S_SupDiagrammeHisto()

&apos;objectif :
&apos;	Supprimer tous les graphiques de la page
&apos;
&apos;=====================================================================================

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	&apos;la collection de diagramme dans oFeuille
	Dim oChart AS Object	&apos;le diagramme sur lequel on travail

	Dim leNom As String
		
On Error GoTo Erreurs
	
	oFeuilTab = &quot;Diagramme_Histo&quot;


	oCalc = ThisComponent
	oFeuilles=oCalc.sheets
	oFeuille = oFeuilles.getByName(	oFeuilTab)
	oCharts = oFeuille.Charts
	&apos;xray oPilotDonnees
	&apos;supprimer le graphique cr&#233;&#233; par la macro
	&apos;oCharts.removebyname(&quot;MonGraphique&quot;)
	&apos;supprimer legraphique cr&#233;&#233; manuellement
	&apos;oCharts.removebyname(&quot;object1&quot;)


	&apos;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(&quot;erreur n&#176; &quot; + erreur_num + &quot; &#224; la ligne &quot; + erreur_ligne + chr(10) + erreur_txt, 1 + 16, &quot;S_SupDiagrammeHisto()&quot;) 
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]

Répondre à