IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

[Delphi 5] Graphique sous Excel


Sujet :

API, COM et SDKs Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut [Delphi 5] Graphique sous Excel
    Bonjour,

    je crée des graphiques sour excel via Delphi5 mais je ne trouve pas la
    commande pour determiner les valeurs de l'axe des abscisses.

    En cherchant, je trouve les constante xlvalue et xlcategorie, hors, ces
    constantes ne sont pas connus via delphi5.

    D'autre utilise l'unite excel2000 : je ne l'ai pas...

    je ne trouve pas non plus la valeur de xlcategorie... pas plus que
    celle xlvalue

    Pouvez vous m'aider?

    je tourne en rond

    merci

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 874
    Points
    5 874
    Par défaut
    salut

    regarde du cote des propriete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        ChartObject.Chart.SeriesCollection(i).Name
        ChartObject.Chart.SeriesCollection(i).XValues

    @+ Phil

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    déjà vu ...

    il ne reconnait pas XlValues.

    merci quand meme

    je pense que cela est un rapport avec la version de Delphi mais ça m'aide pas plus.

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 874
    Points
    5 874
    Par défaut
    salut

    c'est des variant il ne devrais meme pas bonché le compilo
    tu l'utilise comment ?



    @+ Phil

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      XRange:=vExcelApplication.Range['B2:B6;B8'];
      YRange:=vExcelApplication.Range['C2:C6;C8'];
      Chart1:=vXLClasseur.ActiveSheet.chartobjects.add[100,250,500,300];
      vXLClasseur.ActiveSheet.chartobjects[1].chart.ChartType := 65 ;
      vXLClasseur.ActiveSheet.chartobjects[1].Select ;
     
      Chart1.Chart.SeriesCollection.Add(YRange);
      Chart1.chart.seriescollection[1].name:='Exposants et co-exposants';
      Chart1.Chart.SeriesCollection(1).XValues:=XRange;
      Chart1.Chart.HasTitle:=true;
      Chart1.Chart.HasLegend:=true;
      Chart1.Chart.ChartTitle.Text:='Nombre d''exposants';

    ça compile, pas de soucis

    par contre à l'execution, j'ai l'erreur

    "Impossible de définir la propriété XlValues de la classe Series"

    et bien entendu si je met en commentaire la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Chart1.Chart.SeriesCollection(1).XValues:=XRange;
    plus d'erreur

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 874
    Points
    5 874
    Par défaut
    salut

    voila comment je fait .
    je pense que tu as oublié de lui assigner les données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     CurrentSheet := ExcelApp.ActiveWorkbook.ActiveSheet;
      ChartObject  := CurrentSheet.ChartObjects.Add(0,0,1,1);
      ChartObject.Top    := _top;
      ChartObject.Left   := _left;
      ChartObject.Width  := _width;
      ChartObject.Height := _Height;
    	// type de graphique
      ChartObject.Chart.ChartType := xlLine;
      ChartObject.Chart.HasDataTable := FALSE;
    
      DataSheet := ExcelApp.ActiveWorkbook.Sheets['Datas'];
      
    ChartObject.Chart.SetSourceData(Source:=DataSheet.Range['A3',MaxLetter+'19'], PlotBy:=xlRows);
    
    	// séries de données
      for i := 1 to ChartObject.Chart.SeriesCollection.Count do
      begin
        ChartObject.Chart.SeriesCollection(i).Name    := DataSheet.Range['A2','A2'].Offset[i, 0].Value;
        ChartObject.Chart.SeriesCollection(i).XValues := DataSheet.Range['B2', MaxLetter+'2'].Value;
      end;
    ensuite pour ce qui est de la presentation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    	// légende
    	ChartObject.Chart.Legend.AutoScaleFont := FALSE;
    	ChartObject.Chart.Legend.Font.Size := 10;
    	ChartObject.Chart.Legend.Position := xlBottom;
    	// zone de tracé
    	ChartObject.Chart.ChartArea.AutoScaleFont := FALSE;
    	ChartObject.Chart.ChartArea.Font.Size := 10;
    	ChartObject.Chart.PlotArea.Interior.ColorIndex := xlNone;
    	// axe horizontal
    	ChartObject.Chart.Axes(xlCategory).AxisBetweenCategories := FALSE;
    	ChartObject.Chart.Axes(xlCategory).ReversePlotOrder := FALSE;
    	// axe vertival
    	
            ChartObject.Chart.Axes(xlValue).MinimumScale := ValMin;
    	ChartObject.Chart.Axes(xlValue).MaximumScale := ValMax;
           
    
    	ChartObject.Chart.Axes(xlValue).MinorUnit := 10;
    	ChartObject.Chart.Axes(xlValue).MajorUnit := 20;
    	ChartObject.Chart.Axes(xlValue).Crosses := xlMaximum;
    	ChartObject.Chart.Axes(xlValue).ReversePlotOrder := False;
    	ChartObject.Chart.Axes(xlValue).ScaleType := xlLinear;
    @+ Phil

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Voilà ce que ça donnerai adapté à mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Chart1.Chart.SetSourceData(Source:=vExcelApplication.Range('C2:C6;C8'), PlotBy:=xlColumns);
    sauf qu'il ne reconnais pas XlColumns (identificateur non declaré)
    et donc ça compile pas

    je vais voir si je peut pas trouver ça valeur...

    et si quelqu'un là ausis , je suis preneuse

    merci de ton aide!

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 874
    Points
    5 874
    Par défaut
    salut

    voila la valeur

    @+ Phil

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Non, cela ne marche pas mieux : ça compile mais cela genere une erreur.

    j'ai trouvé pour que cela fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
      XRange:=vExcelApplication.Range['B2:B7'];
      YRange:=vExcelApplication.Range['C2:C7'];
    
      
      //XRange:=vExcelApplication.Range['B2:B6;B8'] faisant planté le reste...
    
      Chart1:=vXLClasseur.ActiveSheet.chartobjects.add[100,250,500,300];
      vXLClasseur.ActiveSheet.chartobjects[1].chart.ChartType := 65 ;
      vXLClasseur.ActiveSheet.chartobjects[1].Select ;
    
      Chart1.Chart.SeriesCollection.Add(YRange);
      Chart1.chart.seriescollection[1].name:='Exposants et co-exposants';
    
    
      Chart1.Chart.SeriesCollection(1).XValues:=XRange;
    
      Chart1.Chart.SeriesCollection(1).Values:=YRange;
      //Rajout de cette ligne
    Il a donc fallu que je reorganise les valeurs source dans ma fiche Excel (en effet ma plage est passé de B2:B6;B8 à B2:B7

    et que je rajoute une ligne

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    en fait c'est à moitié resolu car je n'arrive pas à comprendre pourquoi B2,B6;B8 arrive à tout faire planter alors que la commande marche bien...

  11. #11
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 874
    Points
    5 874
    Par défaut
    salut

    pour des plage non contigu tu doit utiliser l'instruction suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Union(CurrentSheet.Range['B2','B6'], CurrentSheet.Range['D2','D6'])
    remarque que les champs doivent etre de meme longueur
    je n'ai pas essayer en verticale mais je suppose que cela doit fonctionner aussi


    @+ Phil

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    ben je comprend pas vraiment ta ligne de code...

    Pour mon cas, la plage de cellule concerné se trouve dans les cellule B2 - B3 - B4 - B5 - B6 et B8

    (je me suis arrangé autrement mais ça me travaille de ne pas pouvoir le specifier dans delphi)

    sinon, tu parles de "même Logueur"? je comprend pas non plus... (pour l'axe des ordonnées j'ai des valeurs, ça peut etre 1 ou 300 ou 20 etc...)

    voilà mon exemple si tu comprend mieux

    pour l'axe des abscisses (même soucis pour l'axe des ordonnées d'ailleurs)

    On a

    2005 (B2)
    2004 (B3)
    2003 (B4)
    2002 (B5)
    2001 (B6)
    --Ligne à ne pas prendre en compte (B7)
    2006 (B8)

    L'axe prend les valeurs de 2001 à 2006

    qui plus est , j'ai du faire une reorg pour qu'ils me prennent les valeurs dans l'ordre croissant...(2001- 2002 - 2003 - etc)

    Bilan : j'y arrive mais grace à de la bricol...
    c'est pas top top

  13. #13
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 874
    Points
    5 874
    Par défaut
    salut

    dans ton cas je ferai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChartObject.Chart.SetSourceData(Source:=ExcelApp.Union(CurrentSheet.Range['B17','B29'], CurrentSheet.Range['D17','D29']), PlotBy:=xlColumns);
    ce qui va te creer N selection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ChartObject.Chart.SeriesCollection(1).Name    := CurrentSheet.Range['B15','B15'].Value;
    	ChartObject.Chart.SeriesCollection(1).XValues := CurrentSheet.Range['A17','A29'].Value;
    	ChartObject.Chart.SeriesCollection(1).Interior.ColorIndex := 1;
    	ChartObject.Chart.SeriesCollection(2).Name   := CurrentSheet.Range['D15','D15'].Value;
    	ChartObject.Chart.SeriesCollection(2).XValues := CurrentSheet.Range['A17','A29'].Value;
    	ChartObject.Chart.SeriesCollection(2).Interior.ColorIndex := 2;
    il faudrait que tu definisse un jeux d'essai afin de pouvoir comprendre dans quelle sens ce trouve tes données

    @+ Phil

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    sauf que le setsourcedata ne marche pas chez moi...
    donc, vaut mieux ma petite bricole.

    tu utilise quelle version de Delphi?

  15. #15
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 874
    Points
    5 874
    Par défaut
    salut

    j'utilise delphi 6 pro
    mais le probleme viens pas de la puisque c'est de l'ole
    les commande sont celle de ecxel

    c'est bizard ton truc

    @+ Phil

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    effectivement

    il doit y avoir un grain de sable kkes part mais là je vois pas.

    Bon l'essentiel c'est que ça marche, d'une façon où une autre...

    quand j'aurai du temps, je re regarderai...

    je serais quand meme curieuse de le tester avec delphi 6 pour voir ce que cela fait

Discussions similaires

  1. Ouvrir un graphique sous Excel
    Par Fred2209 dans le forum C++Builder
    Réponses: 6
    Dernier message: 01/12/2006, 21h02
  2. [VB.NET] Création de graphique sous excel
    Par krfa1 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/06/2006, 11h11
  3. Réaliser un graphique sous Excel
    Par vdbadr dans le forum Contribuez
    Réponses: 1
    Dernier message: 30/05/2006, 16h37
  4. [VBA-E]Deplacer un graphique sous Excel
    Par gaudy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/04/2006, 07h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo