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

C++ Discussion :

Pilotage d'une macro excel depuis builder ?


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Pilotage d'une macro excel depuis builder ?
    Bonjour à tous ...
    Voila, je bute sur un bout de code pourtant tout simple qui me permettrait de lancer une macro stocké sur un fichier texte pour un doc excel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Variant VBComp;
     
      // installation du composant
      VBComp = XLWorkbook.OlePropertyGet("VBProject").OlePropertyGet("VBComponents");
      VBComp.OleProcedure("Import", as_Fichier);
      // execution macro
      XL_Workbooks.OleProcedure("Run", "traduction");
      // destruction macro
      VBComp.OleFunction("Remove", VBComp.OleFunction("Item", "Module1"));
    Ce code doit lancer une macro excel contenu dans un txt (as_Fichier) hors le programme plante dés la première ligne en m'annonçant fièrement qu'une exception s'est produite ...
    Tous mes Variant sont déclaré en privé sous ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      private:
        // Variables de manipulation    
        Variant vLink;
        Variant vReadOnly;
        Variant vNomFeuille;
        Variant XL,XL_Workbooks,XLWorkbook,XL_Worksheet;
        Variant vFileName,vSheetName,vRange,vCell;
        Variant vWsName;
    Si quelqu'un à une idée de résolution ou un bout de code faisant la même chose, je suis preneur

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    si je ne me trompe pas, il faut lancer Excel ou récupérer un instance avant ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Variant vMSExcel;
    try {
        vMSExcel = Variant::GetActiveObject("Excel.Application");
    } catch(...) {
        vMSExcel = Variant::CreateObject("Excel.Application");
    }
    XLWorkbook = vMSExcel.OlePropertyGet("Workbooks").OleFunction("Add");

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En fait, je pilote Excel avant cette portion de code

    J'ouvre le documents, je lis des cellules, etc ....

    Ma variable XLWorkbook est donc bien initialisée.

    Merci de ta réponse

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je reposte un bout de code autonome fait pour tester le lancement de macro avec ouverture du fichier excel et simplification à l'extré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
    #include <ComObj.hpp>
    #include <io.h>
    #include "Class_Excel.h"
     
    Variant XL_Classeur, XL_TousClasseurs;
    Variant XL_Excel, XL_Instance;
    Variant vFileName;
    Variant vComposant;
     
    //ouverture d'excel
    XL_Instance = CreateOleObject("Excel.Application");
    XL_Instance.OlePropertySet("Visible",false);
    XL_TousClasseurs = XL_Instance.OlePropertyGet("Workbooks");
    //recupere le nom du fichier
    vFileName = "D:\\Simulateur SEPT\\Exe\\BDV\\BDV_SEPT.xls";
    //ouverture du fichier
    XL_Classeur = XL_TousClasseurs.OleFunction("Open", vFileName);
     
    // installation du Module
    vComposant = XL_Classeur.OlePropertyGet("VBProject").OlePropertyGet("VBComponents");
    vComposant.OleProcedure("Import", "D:\\Simulateur SEPT\\Exe\\BDV\\traduction.mac");
    // execution de la macro
    XL_Instance.OleProcedure("Run", "traduction");
    // destruction de la macro
    vComposant.OleFunction("Remove", vComposant.OleFunction("Item", "Module1"));
    // à partir d'ici il n'y a plus de macro n'y Module
    Le programme plante sur la ligne : vComposant = XL_Classeur.OlePropertyGet("VBProject").OlePropertyGet("VBComponents"); avec le message assez vague : "EOleSysError -> une exception s'est produite" ...
    Je pense avoir suivi la FAQ du site ...

    Si quelqu'un à une petite idée ???

Discussions similaires

  1. [Manipulation Excel] Executer une macro Excel depuis Access
    Par sebastien_oasis dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/05/2007, 16h21
  2. Piloter une macro/Excel depuis une application VB
    Par pjbou dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/04/2007, 17h01
  3. lancer une macro excel depuis une appli access
    Par LostIN dans le forum Access
    Réponses: 1
    Dernier message: 22/08/2006, 12h10
  4. Lancer une macro Excel depuis Access
    Par pascal913 dans le forum Access
    Réponses: 12
    Dernier message: 31/07/2006, 16h31
  5. Lancer une macro Excel depuis Access
    Par marcobosio dans le forum Access
    Réponses: 6
    Dernier message: 05/06/2006, 21h51

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