Je vous propose cet UDF qui me permet de faire la jonction entre une requête Sqlite et la réalisation d’un graphique des données obtenues.
Il n’est pas aisé de réaliser cet UDF tant il y a d’options et de configurations dans les graphiques Excel. Les choix ont donc été orientés par mes besoins mais correspondent à ce que chacun peut espérer : le type de graphique, le style, les couleurs…. Les graphiques peuvent être sauvegardés en PNG ou en PDF.
La particularité est l’utilisation d’un array pour l’ensemble des options, 28 au total. Tous sont optionnelles, y compris l’array lui-même et dans ce cas Excel configure à sa guise. Mais si les options sont utilisées, l’array devra être déclaré : « Local $FormatGraphic[28] ».
Autre particularité, la sélection des données pour le graphique. Soit elle est classique du genre "B15:B23;C15:E23", soit elle utilise que les colonnes et l’écriture sera du genre "B/C/D/E"
Dans le Zip, vous avez l’exemple, la fonction et les includes pour les constantes.
Vous avez le détail des options. L’UDF et l’exemple sont commentés.
Pour rappel, les constantes VBA ex. xlLineMarkers deviennent sous Autoit $xlLineMarkers
L’UDF a été testé sous Excel 2007 et doit fonctionner pour les versions plus ressentes (2003 semble poser quelques problèmes. Voir le post de Papytom à la suite).
Merci pour vos retours et observations.
L'exemple:
#include <Array.au3>
#include <Excel.au3>
#include "FuncgraphiqueExcel.au3"
Local $Array[9][4]= [["Produis","Dupont","Dupuis","Dutours"], _
["Clous",102,215,312], _
["Vis",312,300,318], _
["Chevilles",404,40,75], _
["Rivets",50,521,523], _
["Tournevis",50,521,523], _
["Bédanes",102,21,123], _
["Ciseaux",80,131,233], _
["Marteaux",402,201,24]]
Local $oAppl = _Excel_Open()
Local $oWorkbook = _Excel_BookNew($oAppl,1)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $Array, "B15")
Local $FormatGraphic[28]
For $i = 1 To 3
ToolTip("graphique " & $i,50,250)
$Tracerpar = $xlColumns ;$xlColumns = 2 $xlRows = 1
If $i = 1 Then
$ChartType = $xlColumnClustered ;xlLineMarkers ;xlLine ;xlBarClustered ;xlBarStacked etc...
$title = ""
$FormatGraphic[26] = 100 ;marge gauche 100 points et recentrage sur Graph1
$FormatGraphic[27] = 50 ;marge haute 50 points et recentrage sur Graph1
Else
$FormatGraphic[26] = Default ;pas de modification de la marge sur les autres Graph
$FormatGraphic[27] = Default
EndIf
If $i = 2 Then
$ChartType = $xlBarStacked
$title = "cumulé "
EndIf
If $i = 3 Then
$title = "en pourcentage "
$Tracerpar = $xlRows
$ChartType = $xlBarStacked100
EndIf
$SheetData = "Feuil1"
$Data = "B15"
;3 formes identiques
$SourceData = "B/C/D/E"
;$SourceData = "B15:E23"
;$SourceData = "B15:B23;C15:E23"
$FormatGraphic[0] = 34 ;areacolor ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[1] = 12 ;areafont ;nombre ;taille Font
$FormatGraphic[2] = "Résultat " & $title & @MDAY &"-"& @MON &"-"& @YEAR
$FormatGraphic[3] = 30 ;areaTitle_font ;nombre ;taille Font
$FormatGraphic[4] = 32 ;areaTitle_color
$FormatGraphic[5] = $xlContinuous ;XlLineStyle => xlDot xlDash xlDashDot etc...
$FormatGraphic[6] = 50 ;areaBoder_color
$FormatGraphic[7] = 4 ;areaLine_weight
$FormatGraphic[8] = $msoLineSingle ;areaLine_style ; MsoLineStyle =>msoLineThickThin msoLineSingle msoLineStyleMixed msoLineThickBetweenThin etc...
$FormatGraphic[9] = 10 ;axeCategorie_font ;nombre ;taille Font
$FormatGraphic[10] = 11
$FormatGraphic[11] = 5
$FormatGraphic[12] = $xlDot ;axeCategorie_style
$FormatGraphic[13] = 1
$FormatGraphic[15] = 3 ;axeValue_color
$FormatGraphic[16] = 1
$FormatGraphic[19] = $xlContinuous ;zonetracageBorder_style
$FormatGraphic[20] = 6 ;zonetracageBorder_color
$FormatGraphic[21] = 4
graphiqueExcel($oAppl, $SheetData, $Data, $SourceData, $ChartType, $Tracerpar, $FormatGraphic, "PDF", @ScriptDir & "\current_salesE.pdf")
ToolTip("Sauvegarde ",50,250)
ShellExecuteWait(@ScriptDir & "\current_salesE.pdf")
Next
ToolTip("")
#cs
Détail des options
$FormatGraphic[0] = areacolor ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[1] = areafont ;nombre ;taille Font
$FormatGraphic[2] = areaTitle ;Texte
$FormatGraphic[3] = areaTitle_font ;nombre ;taille Font
$FormatGraphic[4] = areaTitle_color ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[5] = areaBoder_style ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
$FormatGraphic[6] = areaBoder_color ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[7] = areaLine_weight ;nombre
$FormatGraphic[8] = areaLine_style ; MsoLineStyle =>msoLineThickThin msoLineSingle msoLineStyleMixed msoLineThickBetweenThin etc...
------------------------------------------------------------------------------------------------
;abscisses
$FormatGraphic[9] = axeCategorie_font ;nombre ;taille Font
$FormatGraphic[10] = axeCategorie_color ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[11] = axeCategorie_linecolor ;nombre
$FormatGraphic[12] = axeCategorie_style ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
$FormatGraphic[13] = axeCategorie_weight ;nombre
------------------------------------------------------------------------------------------------
;ordonnées
$FormatGraphic[14] = axeValue_font ;nombre ;taille Font
$FormatGraphic[15] = axeValue_color ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[16] = axeValue_linecolor ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[17] = axeValue_style ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
$FormatGraphic[18] = axeValue_weight ;nombre
-----------------------------------------------------------------------------------------------
$FormatGraphic[19] = zonetracageBorder_style ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
$FormatGraphic[20] = zonetracageBorder_color ;nombre
$FormatGraphic[21] = zonetracageBorder_weight ;nombre
-------------------------------------------------------------------------------------------------
$FormatGraphic[22] = courbes Default => ignoré; True => mis en oeuvre
$FormatGraphic[23] = courbes_lineweight si True ;nombre
$FormatGraphic[24] = courbes_markersize si True ;nombre
$FormatGraphic[25] = courbes_linestyle si True ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
-------------------------------------------------------------------------------------------------
$FormatGraphic[26] = zonetracage_left ;nombre en point ;augmente marge gauche et recentre la zone tracage
$FormatGraphic[27] = zonetracage_Top ;nombre en point ;augmente marge haute et recentre la zone tracage
#ce
#include <Excel.au3>
#include "FuncgraphiqueExcel.au3"
Local $Array[9][4]= [["Produis","Dupont","Dupuis","Dutours"], _
["Clous",102,215,312], _
["Vis",312,300,318], _
["Chevilles",404,40,75], _
["Rivets",50,521,523], _
["Tournevis",50,521,523], _
["Bédanes",102,21,123], _
["Ciseaux",80,131,233], _
["Marteaux",402,201,24]]
Local $oAppl = _Excel_Open()
Local $oWorkbook = _Excel_BookNew($oAppl,1)
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $Array, "B15")
Local $FormatGraphic[28]
For $i = 1 To 3
ToolTip("graphique " & $i,50,250)
$Tracerpar = $xlColumns ;$xlColumns = 2 $xlRows = 1
If $i = 1 Then
$ChartType = $xlColumnClustered ;xlLineMarkers ;xlLine ;xlBarClustered ;xlBarStacked etc...
$title = ""
$FormatGraphic[26] = 100 ;marge gauche 100 points et recentrage sur Graph1
$FormatGraphic[27] = 50 ;marge haute 50 points et recentrage sur Graph1
Else
$FormatGraphic[26] = Default ;pas de modification de la marge sur les autres Graph
$FormatGraphic[27] = Default
EndIf
If $i = 2 Then
$ChartType = $xlBarStacked
$title = "cumulé "
EndIf
If $i = 3 Then
$title = "en pourcentage "
$Tracerpar = $xlRows
$ChartType = $xlBarStacked100
EndIf
$SheetData = "Feuil1"
$Data = "B15"
;3 formes identiques
$SourceData = "B/C/D/E"
;$SourceData = "B15:E23"
;$SourceData = "B15:B23;C15:E23"
$FormatGraphic[0] = 34 ;areacolor ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[1] = 12 ;areafont ;nombre ;taille Font
$FormatGraphic[2] = "Résultat " & $title & @MDAY &"-"& @MON &"-"& @YEAR
$FormatGraphic[3] = 30 ;areaTitle_font ;nombre ;taille Font
$FormatGraphic[4] = 32 ;areaTitle_color
$FormatGraphic[5] = $xlContinuous ;XlLineStyle => xlDot xlDash xlDashDot etc...
$FormatGraphic[6] = 50 ;areaBoder_color
$FormatGraphic[7] = 4 ;areaLine_weight
$FormatGraphic[8] = $msoLineSingle ;areaLine_style ; MsoLineStyle =>msoLineThickThin msoLineSingle msoLineStyleMixed msoLineThickBetweenThin etc...
$FormatGraphic[9] = 10 ;axeCategorie_font ;nombre ;taille Font
$FormatGraphic[10] = 11
$FormatGraphic[11] = 5
$FormatGraphic[12] = $xlDot ;axeCategorie_style
$FormatGraphic[13] = 1
$FormatGraphic[15] = 3 ;axeValue_color
$FormatGraphic[16] = 1
$FormatGraphic[19] = $xlContinuous ;zonetracageBorder_style
$FormatGraphic[20] = 6 ;zonetracageBorder_color
$FormatGraphic[21] = 4
graphiqueExcel($oAppl, $SheetData, $Data, $SourceData, $ChartType, $Tracerpar, $FormatGraphic, "PDF", @ScriptDir & "\current_salesE.pdf")
ToolTip("Sauvegarde ",50,250)
ShellExecuteWait(@ScriptDir & "\current_salesE.pdf")
Next
ToolTip("")
#cs
Détail des options
$FormatGraphic[0] = areacolor ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[1] = areafont ;nombre ;taille Font
$FormatGraphic[2] = areaTitle ;Texte
$FormatGraphic[3] = areaTitle_font ;nombre ;taille Font
$FormatGraphic[4] = areaTitle_color ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[5] = areaBoder_style ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
$FormatGraphic[6] = areaBoder_color ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[7] = areaLine_weight ;nombre
$FormatGraphic[8] = areaLine_style ; MsoLineStyle =>msoLineThickThin msoLineSingle msoLineStyleMixed msoLineThickBetweenThin etc...
------------------------------------------------------------------------------------------------
;abscisses
$FormatGraphic[9] = axeCategorie_font ;nombre ;taille Font
$FormatGraphic[10] = axeCategorie_color ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[11] = axeCategorie_linecolor ;nombre
$FormatGraphic[12] = axeCategorie_style ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
$FormatGraphic[13] = axeCategorie_weight ;nombre
------------------------------------------------------------------------------------------------
;ordonnées
$FormatGraphic[14] = axeValue_font ;nombre ;taille Font
$FormatGraphic[15] = axeValue_color ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[16] = axeValue_linecolor ;nombre ;format ColorIndex de 1 à 56
$FormatGraphic[17] = axeValue_style ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
$FormatGraphic[18] = axeValue_weight ;nombre
-----------------------------------------------------------------------------------------------
$FormatGraphic[19] = zonetracageBorder_style ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
$FormatGraphic[20] = zonetracageBorder_color ;nombre
$FormatGraphic[21] = zonetracageBorder_weight ;nombre
-------------------------------------------------------------------------------------------------
$FormatGraphic[22] = courbes Default => ignoré; True => mis en oeuvre
$FormatGraphic[23] = courbes_lineweight si True ;nombre
$FormatGraphic[24] = courbes_markersize si True ;nombre
$FormatGraphic[25] = courbes_linestyle si True ;XlLineStyle =>xlContinuous xlDot xlDash xlDashDot etc...
-------------------------------------------------------------------------------------------------
$FormatGraphic[26] = zonetracage_left ;nombre en point ;augmente marge gauche et recentre la zone tracage
$FormatGraphic[27] = zonetracage_Top ;nombre en point ;augmente marge haute et recentre la zone tracage
#ce