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

Documents Java Discussion :

[Jacob / Excel] Lancement de macros sous Excel


Sujet :

Documents Java

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Jacob / Excel] Lancement de macros sous Excel
    Bonjour,

    Sous excel pour lancer une macro incluse dans le fichier excel j'utilise le code ci-dessous. Cependant j'aimerai exécuter des macros qui ne se situent pas dans le fichier excel mais dans un fichier .xla définissant des macros supplémentaire.

    Savez-vous comment je peux faire ?

    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
     
      /**
       * Launch a macro in an excel file
       * 
       * @param file
       *          the excel file
       * @param macroName
       *          the name of the macro label like this 'Sheet1.Macro1'
       * @throws FrameWorkException
       *           en cas d'erreur
       */
      public static boolean launchMacro(final File file, final String macroName) throws FrameWorkException {
        ActiveXComponent excel = null;
        boolean macroLaunched = false;
        try {
          excel = new ActiveXComponent("Excel.Application");
          excel.setProperty("Visible", new Variant(false));
          excel.setProperty("EnableEvents", new Variant(false));
     
          Dispatch workbooks = excel.getProperty("WorkBooks").toDispatch();
          @SuppressWarnings("unused")
          Dispatch workbook = Dispatch.call(workbooks, "Open", new Object[] { file.getAbsolutePath() }).toDispatch();
          String macroFullName = file.getName() + "!" + macroName;
          @SuppressWarnings("unused")
          Variant result = Dispatch.call(excel, "Run", new Variant(macroFullName));
          Dispatch.call(workbook, "Save");
          macroLaunched = true;
          try {
            Thread.sleep(100);
          } catch (InterruptedException ie) {
          }
        } catch (ComFailException cfe) {
          // Traduction de l'excetion JACOB
          String msg = null;
          try {
            msg = cfe.getMessage().subSequence(
                cfe.getMessage().indexOf(JABOC_COM_EXCEPTION_KEY_WORD) + JABOC_COM_EXCEPTION_KEY_WORD.length(),
                cfe.getMessage().length()).toString();
          } catch (Throwable t) {
            msg = "Unknown error";
          }
          if ("".equals(msg.trim())) {
            msg = "Unknown error";
          }
          throw new FrameWorkException(MACRO_ERROR, new Object[] { macroName, msg });
        } finally {
          excel.invoke("Quit", new Variant[] {});
          ComThread.Release();
        }
        return macroLaunched;
      }

  2. #2
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai trouvé !!
    En modifiant la méthode en ce sens ça fonctionne. Le fonctionnement précédent ne marche plus mais en faisant qq ajustement tout simple ca devrai aller très vite...

    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
     
      public static boolean launchMacro(final File file, final String macroName) throws FrameWorkException {
        ActiveXComponent excel = null;
        boolean macroLaunched = false;
        try {
          excel = new ActiveXComponent("Excel.Application");
          excel.setProperty("Visible", new Variant(true));
          excel.setProperty("EnableEvents", new Variant(false));
     
    //      Dispatch addins = excel.getProperty("AddIns").toDispatch();
    //      Dispatch.call(addins, "Add", "P:\\MacroRED.xla", false);
     
          Dispatch workbooks = excel.getProperty("WorkBooks").toDispatch();
          @SuppressWarnings("unused")
          Dispatch workbook = Dispatch.call(workbooks, "Open", new Object[] { file.getAbsolutePath() }).toDispatch();
     
          Dispatch addins = excel.getProperty("AddIns").toDispatch();
          Variant xla = Dispatch.call(addins, "Add", "P:\\MacroRED.xla", false);
          Dispatch.put(xla.toDispatch(), "Installed", true);
     
    //      String macroFullName = file.getName() + "!" + macroName;
          String macroFullName = macroName;
          @SuppressWarnings("unused")
          Variant result = Dispatch.call(excel, "Run", new Variant(macroFullName));
          Dispatch.call(workbook, "Save");
          macroLaunched = true;
          try {
            Thread.sleep(100);
          } catch (InterruptedException ie) {
          }
        } catch (ComFailException cfe) {
          // Traduction de l'excetion JACOB
          String msg = null;
          try {
            msg = cfe.getMessage().subSequence(
                cfe.getMessage().indexOf(JABOC_COM_EXCEPTION_KEY_WORD) + JABOC_COM_EXCEPTION_KEY_WORD.length(),
                cfe.getMessage().length()).toString();
          } catch (Throwable t) {
            msg = "Unknown error";
          }
          if ("".equals(msg.trim())) {
            msg = "Unknown error";
          }
          throw new FrameWorkException(MACRO_ERROR, new Object[] { macroName, msg });
        } finally {
          excel.invoke("Quit", new Variant[] {});
          ComThread.Release();
        }
        return macroLaunched;
      }

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème exécution macro complémentaire
    Bonsoir,

    lorsque j’exécute votre fonction, le macro complémentaire s'enregistre dans le fichier excel cible
    mais il ne s’exécute pas, je sais pas peut-être j'ai pas bien spécifié le nom du macro
    dans mon cas,j'ai affecté au variable macroName la valeur "!Module1.Macro2"
    voilà le message d’erreur résultant : Description: Impossible d'exécuter la macro '!Module1.x'. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.

    je voudrais savoir le nom que tu as spécifié au macroName

    merci d'avance

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    Ce sujet tres ancien mais de memoire c'est :
    "Sheet1.Macro1"

    Astuce de debug : mettre excel visible et controler a chaque etape que tout semble bien se passer.

    Bon courage ce n'est pas evident.

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

Discussions similaires

  1. [XL-2010] Macro crée sous Excel 2007 fonctionnant pas sous Excel 2010
    Par makis007 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/02/2015, 17h03
  2. Macro sous Excel 2003 fonctionne pas sous Excel 2007 pourquoi
    Par Sherman750 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2012, 13h13
  3. Réponses: 10
    Dernier message: 17/02/2009, 15h51
  4. Activation des macros sous Excel
    Par Igloobel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/10/2005, 11h44
  5. macro sous excel
    Par julien13200 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2005, 15h49

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