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/Ole/Excel/Tableau croisé dynamique


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 49
    Par défaut Delphi/Ole/Excel/Tableau croisé dynamique
    Bonjour,

    Je suis en liaison OLE entre une application Delphi et Excel 2003. Je tente de créer un tableau croisé dynamique mais le code généré par l'enregistreur de macro ne passe pas sur Delphi même avec les corrections d'usage.
    Quelqu'un sait comment ajouter un champ en ligne ou en colonne à un Tableau croisé, via un OLE DElphi ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 49
    Par défaut Delphi/Ole/Excel/Tableau croisé dynamique
    Bonjour,

    Pour ceux que cela intéresse voici mon code Delphi qui résout mon problème:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
     
              // Instanciation d'Excel
              XlApp := Createoleobject('Excel.Application');
              XlApp.ScreenUpdating := false;
              XlApp.Visible := False;
              DecimalSeparator := ',';
     
              // Importer le fichier texte dans Excel via OLE
              XlApp.Workbooks.OpenText('U:\pv_suivi_extract.txt',,,xlDelimited,,
                           False, False, True, False, False,False,
                           VarArrayOf([VarArrayOf([1,4]),
                                       VarArrayOf([2,2]),
                                       VarArrayOf([3,2]),
                                       VarArrayOf([4,2]),
                                       VarArrayOf([5,2]),
                                       VarArrayOf([6,2]),
                                       VarArrayOf([7,1]),
                                       VarArrayOf([8,2]),
                                       VarArrayOf([9,1]),
                                       VarArrayOf([10,2]),
                                       VarArrayOf([11,2]),
                                       VarArrayOf([12,2])]));
     
     
              // formatage des données
              XlApp.Workbooks[1].WorkSheets[1].Columns['A:L'].Select;
              XlApp.Workbooks[1].WorkSheets[1].Columns['A:L'].EntireColumn.AutoFit;
     
     
              // Générer les tableaux croisés dynamiques & les graphiques croisés dynamiques
     
              // TCD_UD
              XlApp.Workbooks[1].WorkSheets[1].Range['A1'].Select;
              XlApp.Selection.CurrentRegion.Select;
     
              XlApp.Workbooks[1].PivotCaches.Add(xlDatabase, QuotedStr('pv_suivi_extract')+'!R1C1:R7909C12').CreatePivotTable('', 'Tableau croisé dynamique3');
              XlApp.Workbooks[1].ActiveSheet.PivotTables('Tableau croisé dynamique3').PivotFields('MOIS').Orientation := xlRowField;
              XlApp.Workbooks[1].ActiveSheet.PivotTables('Tableau croisé dynamique3').PivotFields('MOIS').Position := 1;
     
              XlApp.Workbooks[1].ActiveSheet.PivotTables('Tableau croisé dynamique3').PivotFields('UD').Orientation := xlRowField;
              XlApp.Workbooks[1].ActiveSheet.PivotTables('Tableau croisé dynamique3').PivotFields('UD').Position := 2;
     
              XlApp.Workbooks[1].ActiveSheet.PivotTables('Tableau croisé dynamique3').PivotFields('Site').Orientation := xlColumnField;
              XlApp.Workbooks[1].ActiveSheet.PivotTables('Tableau croisé dynamique3').PivotFields('Site').Position := 1;
     
              XlApp.Workbooks[1].ActiveSheet.PivotTables('Tableau croisé dynamique3').PivotFields('Montant_pv').Orientation := xlDataField;
              XlApp.Workbooks[1].WorkSheets[1].Name := 'tcd_UD';
     
              XlApp.Workbooks[1].ActiveSheet.PivotTables('Tableau croisé dynamique3').Format(13);
              XlApp.Workbooks[1].ActiveSheet.PivotTables('Tableau croisé dynamique3').PivotFields('Nombre de MONTANT_PV').Function := 0;
     
     
     
              // constantes Excel pour la mise en forme des tableaux croisés dynamiques
              {
              format:
              0: xlPTClassic
              1: xlPTNone
              2: xlReport1
              3: xlReport10
              4: xlReport2
              5: xlReport3
              6: xlReport4
              7: xlReport5
              8: xlReport6
              9: xlReport7
              10: xlReport8
              11: xlReport9
              12: xlTable1
              13: xlTable10
              14: xlTable2
              15: xlTable3
              16: xlTable4
              17: xlTable5
              18: xlTable6
              19: xlTable7
              20: xlTable8
              21: xlTable9
              }
     
              // constantes Excel pour la fonction utilisée pour les données (au centre du tableau)
              {
              function:
              0: somme
              1: nb
              2: moyenne
              etc...
              }
    Comme on peut le voir dans le code, j'ai préféré importer un fichier texte généré par Delphi (à partir d'une requête sur base Oracle) que d'écrire directement le recordset de ma requête dans les cellules Excel (OLE est vraiment trop lent)

    Bon courage à tous.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Merci pour avoir partagé l'information.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. livre sur Excel (tableau croisé dynamique..)
    Par broule dans le forum Conception
    Réponses: 2
    Dernier message: 27/03/2010, 14h44
  2. excel tableau croisé dynamique
    Par JEFF28 dans le forum Excel
    Réponses: 2
    Dernier message: 19/12/2008, 15h19
  3. Excel Tableau Croisé Dynamique + Graphique
    Par levnath dans le forum Langage
    Réponses: 0
    Dernier message: 03/11/2008, 16h47
  4. [Excel] Tableau croisé dynamique
    Par jbrasselet dans le forum Excel
    Réponses: 1
    Dernier message: 11/01/2008, 13h57
  5. VBA - EXCEL (tableau croisé dynamique)
    Par cilv1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/09/2007, 12h41

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