Positionnement zone graphique ds fichier XLS

Résolu
Signaler
Messages postés
20
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
11 juin 2009
-
Messages postés
20
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
11 juin 2009
-
Bonjour,
Dans une feuille Excel je souhaite incorporer un graphique sous un tableau.
Avec l' "Option Strict On" activée (sur Excel.Shapes ou Excel.ChartArea) je ne parviens pas à faire tourner mon outil : "Impossible de définir la propriété Top/Height/Width de la classe"
Si je désactive l'option, xlapp.ActiveSheet.Shapes(1).Incrementleft(-179.25)  ou .Shapes(1).left=1 , remplissent leurs offices.

Mon souhait serait de comprendre comment utiliser correctement les propriétés  afin repositionner mon graphe. Ci-dessous mon code

OptionStrictOn
OptionExplicitOn

Imports System.ComponentModel
Imports System.IO
Imports Microsoft.Office.Interop
Imports ACRODISTXLib

PublicClass Main

       Dim xlapp AsNew
Excel.Application
[…]
   PrivateSub Creation_Graphique(ByRef
sheet As Excel.Worksheet, ByVal strName_sheet AsString, ByVal
strDate AsString)
        Dim
Obj_Graph As Excel.Chart
        Dim
Plage_Etiquette, Plage_données As Excel.Range
        Dim
Obj_SerieCol As Excel.Series
        Dim
Graph_titre As Excel.ChartTitle
        Dim
Graph_Area As Excel.ChartArea

'Création ma zone graphique
        xlapp.Charts.Add()

'Repositionnement
'avec Excel.Shapes ou ChartArea

'Anomalie
Impossible de définir la propriété Top/Height/Width de la classe

'En désactivant le Option strict on :
'xlapp.ActiveSheet.Shapes(1).IncrementLeft(-179.25)
'xlapp.ActiveSheet.Shapes(1).IncrementTop(67.5)
'ou
'xlapp.ActiveSheet.Shapes(1).left = 1
'xlapp.ActiveSheet.Shapes(1).top = 150

'Personnalisation rapide de mon graphe

        Obj_Graph =
xlapp.ActiveChart

        With
Obj_Graph
            .HasLegend = False
            .ChartType =
Excel.XlChartType.xlColumnClustered
           
.Location(Excel.XlChartLocation.xlLocationAutomatic, strName_sheet)
        EndWith

        xlapp.ActiveChart.HasTitle =
True

        Plage_Etiquette =
xlapp.Range("A3:A8")
        Plage_données = xlapp.Range("D3:D8")

 

'Alimentation des données et valeurs

        Obj_SerieCol = CType(xlapp.ActiveChart.SeriesCollection(1), Excel.Series)
        Obj_SerieCol.XValues =
Plage_Etiquette
        Obj_SerieCol.Values =
Plage_données
       
Obj_SerieCol.Border.ColorIndex = 2

'Changement du Titre
        Graph_titre =
xlapp.ActiveChart.ChartTitle
        Graph_titre.Text = Recap du " & strDate
    EndSub

2 réponses

Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Bonjour

Je pense que tu ne peux pas invoquer le graphique au moyen de la collection Shapes() avant que ton graphique soit incorporé dans ta feuille de calcul.

Peux-tu décaler ton bloc With vers le haut, juste après l'instruction créant le graphique, comme ce qui suit :

xlapp.Charts.Add()
Obj_Graph = xlapp.ActiveChart
With Obj_Graph
            .HasLegend =
False
            .ChartType = Excel.XlChartType.xlColumnClustered
            .Location(Excel.XlChartLocation.xlLocationAutomatic, strName_sheet)
End
With
<?XML:NAMESPACE PREFIX = O /??>
Là, le graphique est incorporé, et fait partie de la collection Shapes de ta feuille de calcul.

Amicalement
Messages postés
20
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
11 juin 2009
1
Tout d'abord, merci pour ton explicaiton.Cela m'a permis de me creuser la tête dans la bonne direction (après 2 jours de galère).
Voici donc le code corrigé et fonctionnel pour un Office 2003,si cela interesse quelqu'un:


         

       
Dim Obj_Graph As Excel.Chart
        Dim Plage_Etiquette, Plage_données As Excel.Range
        Dim Obj_SerieCol As Excel.Series
        Dim obj_ChartObj As Excel.ChartObject

        sheet.Activate()

        Plage_Etiquette = xlapp.Range("A3:A8")
        Plage_données = xlapp.Range("D3:D8")

        xlapp.Charts.Add()
        Obj_Graph = xlapp.ActiveChart

        With Obj_Graph
            .HasLegend = False
            .ChartType = Excel.XlChartType.xlColumnClustered
            .Location(Where:=Excel.XlChartLocation.xlLocationAsObject, Name:=strName_sheet)
        End With

        Obj_SerieCol = CType(xlapp.ActiveChart.SeriesCollection(1), Excel.Series)
        Obj_SerieCol.XValues = Plage_Etiquette
        Obj_SerieCol.Values = Plage_données
        Obj_SerieCol.Border.ColorIndex = 2

        'Changement du Titre
        obj_ChartObj = CType(sheet.ChartObjects(1), Excel.ChartObject)
        obj_ChartObj.Chart.HasTitle = True
        obj_ChartObj.Chart.ChartTitle.Text = "Retards  de saisie à Fin " & strDate

        'Repositionnement de la zone graphique
        obj_ChartObj.Locked = False
        obj_ChartObj.Left = 12
        obj_ChartObj.Top = 125
        obj_ChartObj.Width = 400
        obj_ChartObj.Height = 250