[UDF] Excel Graphic Add

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 693
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

[UDF] Excel Graphic Add

#1

Message par walkson » ven. 24 févr. 2017 15:06

Bonjour,
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
Fichiers joints
Excel Graphic Add.zip
(38.42 Kio) Téléchargé 125 fois
Excel Graphic Add.zip
(38.42 Kio) Téléchargé 125 fois
Modifié en dernier par walkson le sam. 08 avr. 2017 17:07, modifié 2 fois.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Avatar du membre
Papytom
Niveau 1
Niveau 1
Messages : 11
Enregistré le : dim. 25 mai 2014 11:01
Localisation : 13 & 48
Contact :
Status : Hors ligne

Re: [UDF] Excel Graphic Add

#2

Message par Papytom » jeu. 06 avr. 2017 18:47

Salut Walkson

je passais par là, et comme je suis toujours sous XP avec excel 2002, je me suis empressé de tester ton UDF.
La création des graphiques = OK sauf
les graphiques sont en 310 % ???
ramenés à 100%, les titres dans les graphiques 2 et 3 sont sur 2 lignes

la sauvegarde ne fonctionne qu'en PNG
et pour sauvegarder les 3 graphiques j'ai modifié le nom des sauvegardes, sinon tu ne sauve que le graph3
j'empêche le shellexecute qui bloque la boucle

graphiqueExcel($oAppl, $SheetData, $Data, $SourceData, $ChartType, $Tracerpar, $FormatGraphic, "png", @ScriptDir & "\current_salesE" & $i & ".png")
ToolTip("Sauvegarde ", 50, 250)
;ShellExecuteWait(@ScriptDir & "\current_salesE"&$i&".png")

sinon, c'est un super UDF
http://papytom.free.fr
"Duas habet et bene pendentes"

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 693
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: [UDF] Excel Graphic Add

#3

Message par walkson » sam. 08 avr. 2017 17:03

Bonjour Papytom et merci
J'aurais du vérifier avant mais il faut Excel 2007 pour sauvegarder en PDF à cause de ExportAsFixedFormat qui n'existe pas sous Excel 2003.
Pour les graphiques en 310 %, je n'ai pas ce problème. Les marges du PageSetup ont été réduites au maximum comme suit
        With $oAppl.ActiveChart.PageSetup
                .LeftMargin = $oAppl.Application.InchesToPoints(0)
                .RightMargin = $oAppl.Application.InchesToPoints(0)
                .TopMargin = $oAppl.Application.InchesToPoints(0.1)
                .BottomMargin = $oAppl.Application.InchesToPoints(0.1)
                .HeaderMargin = $oAppl.Application.InchesToPoints(0)
                .FooterMargin = $oAppl.Application.InchesToPoints(0)
                .FitToPagesWide = 1
                .FitToPagesTall = 1
        EndWith
Afin d'avoir une meilleur visibilité. Est ce du à cela ?
Sans avoir Excel 2003, il m'est difficile de tester...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Avatar du membre
Papytom
Niveau 1
Niveau 1
Messages : 11
Enregistré le : dim. 25 mai 2014 11:01
Localisation : 13 & 48
Contact :
Status : Hors ligne

Re: [UDF] Excel Graphic Add

#4

Message par Papytom » jeu. 13 avr. 2017 16:27

Salut Walkson

Je n'ai pas la solution, mais je sais d'où vient le pb.
Si tu lances excel, quel que soit le paramétrage de l'affichage de l'écran, de 800x600 à 1980x1200, la fenêtre excel s'ouvre toujours à 100%
elle s'adapte au paramétrage.
alors que l'affichage de tes graphiques est rigide et la fenêtre excel ne s'adapte pas au paramétrage de l'écran d'où les pourcentages différents selon le paramétrage.

ce n'est à mon avis pas vraiment gênant, mais cela te donne une bonne raison de te creuser les méninges.
http://papytom.free.fr
"Duas habet et bene pendentes"

Répondre