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

Macros et VBA Excel Discussion :

Impossible d'executer une macro d'un autre fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut Impossible d'executer une macro d'un autre fichier
    Bonjour,

    Je me retourne vers vous car je n'arrive pas a executer une macro dans un autre fichier xls en utilisant les fonctions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CallByName Application, "Run", VbMethod, _
            DirPath & "BT.xls!Module1.FichierSimulation, Frame"
    ou avec celle la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result = Application.RunDirPath & "BT.xls!Module1.FichierSimulation, Frame")
    Ma macro s'appelle "FichierSimulation" et elle est definie dans le Module1 du fichier BT.xls et Frame est un parametre que je passe a la macro.

    j'ai tj une erreure du type 1004 cad Macro introuvable et je ne comprends pas pourquoi il ne la trouve pas.

    Si qq a une idee sur ce type de probleme ou comment resoudre ce probleme, j'ai beau cherche dans le forum et je n'ai trouve pourquoi ca ne focntionne pas.

    Merci d'avance

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Il faut encadrer le nom de la procédure et son parametre avec des apostrophes, ainsi que le chemin complet du fichier. Le nom du module est superflu. il n'y a pas de virgule entre le parametre et le nom de la procedure. Enfin si le parametre est de type String il faut l'encadrer avec deux "".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CallByName Application, "Run", VbMethod, _
    "'" & DirPath & "BT.xls'!'FichierSimulation ""Frame""'"
    Ou plus simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'" & DirPath & "BT.xls'!'FichierSimulation ""Frame""'")
    Par contre tu ne peux pas récupérer le résultat d'une fonction comportant des parametres lorsque elle est appelée avec Run, mais bon ca se contourne si nécessaire.

    Cordialement,

    Tirex28/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    Merci pour ta reponse, mais j'ai tj le meme probleme avec ou sans les guillemets dans les 2 cas j'ai 1004 runtime error Application define or object define-error.
    Or la macro existe bien et si j'ouvre le fichier, je peux l'executer sans probleme. De plus oui , je veux recuperer les reponses de l'execution de cette macro.

    Merci d'avance

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Re,
    Citation Envoyé par tirex28
    Application.Run "'" & DirPath & "BT.xls'!'FichierSimulation ""Frame""'")
    Oups, il y avait une parenthese en trop qui trainait a la fin.

    Vérifie que le chemin est correct et se termine bien par "\" et que tu n'oublie aucun ' ou ".

    Pour ce qui est de la recuperation du resultat il faut tricher un peu. Dans le module qui contient ta fonction FichierSimulation tu déclare une variable et une autre fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim R
    Public Function ResultatFichierSimulation()
        ResultatFichierSimulation = R 'Renvoie le resultat de la fonction
    End Function
     
    Public Function FichierSimulation(lesparametres)
        Dim MonResultat 'Une variable temporaire
        'Le code déterminant le résultat
        R = MonResultat                 'Mise a jour de la variable module
        FichierSimulation = MonResultat 'Sortie de la fonction
    End Function
    Il suffit ensuite d'appeler les deux fonctions l'une apres l'autre avec la méthode Run.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Rfs
    With Application
        .Run "'" & dirpath & "BT.xls'!'FichierSimulation ""Frame""'"
        Rfs = .Run("'" & dirpath & "BT.xls'!ResultatFichierSimulation")
    End With
    Cordialement,

    Tirex28/

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut
    Salut Tirex,

    Desole mais j'ai tj la meme erreur 1004 macro not founded. Il ouvre bien le fichier (il le trouve a l'adresse indiquee), mais c'est comme si il ne trouvait pas la macro dans ce fichier (comme aucune autre d'ailleurs). Il ne faut pas lui dire d'enable les macros lorsqu'il ouvre le fichier ? et si oui comment faire ?

    Merci

  6. #6
    Membre régulier Avatar de zebulon2212
    Inscrit en
    Juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2006
    Messages : 77
    Points : 88
    Points
    88
    Par défaut
    Tu certifie les macros de ton classeur et une fois le certificat enregistrer et accepter, tu n'aura plus de probleme

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut
    Salut ,

    Mes macros sont a Low Level Security. Je ne sais pas comment les certifiees, et si je veux creer une Digital Signature il ne me presente rien comme certificat.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonsoir,

    Citation Envoyé par gilles06
    Il ouvre bien le fichier (il le trouve a l'adresse indiquee),
    Je n'avais pas capté que le fichier était fermé .. meme si ca ne change rien en ce qui me concerne ca continue de fonctionner(xl2003).

    Essaye de procéder par étape:
    - Ouverture du fichier
    - Lancement de la 1ere fonction
    - Lancement de la 2eme fonction pour récupérer le résultat de la 1ere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim DirPath As String
    Dim MyBook As Workbook
    Dim Rfs
     
    DirPath = "C:\....\"
     
    With Application
        .EnableEvents = False
        Set MyBook = .Workbooks.Open(DirPath & "BT.xls")
        .Run MyBook.Name & ".xls!'FichierSimulation ""Frame""'"
        Rfs = .Run(MyBook.Name & ".xls!ResultatFichierSimulation")
        .EnableEvents = True
    End With
    Citation Envoyé par gilles06
    Il ne faut pas lui dire d'enable les macros lorsqu'il ouvre le fichier ? et si oui comment faire ?
    Normalement les macros sont automatiquement actives dans un classeur ouvert par macro, tu peux le verifier avec cette instruction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Affiche vrai si les macros sont activés quand on ouvre un classeur par macro
    MsgBox Application.AutomationSecurity = msoAutomationSecurityLow = True
    Cordialement,

    Tirex28/

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut
    Salu Tirex,

    Tu as raison sur le fait qu'il faut que le fichier soit ouvert pour qu'il trouve la macro, et de plus lorsque je cherchais a activer la macro je lui mettais le chemin complet or il ne faut pas.
    Je l'ai implemente comme ca et ca fonctionne tres bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Application.RunDirPath & "BT.xls!Module1.FichierSimulation, Frame")
    Par contre ne pas oublier d'ouvrir le fichier avant.

    merci a tous

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/02/2014, 18h45
  2. [WD-2003] Executer une macro d'un autre document
    Par Kiki-31 dans le forum VBA Word
    Réponses: 2
    Dernier message: 21/06/2011, 13h14
  3. [XL-2010] Executer une macro depuis un autre classeur
    Par debdev dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/05/2011, 13h28
  4. [VBA-XL2007] Problème de lancement d'une macro d'un autre fichier au format xlsm
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/09/2008, 22h13
  5. Executer une macro dans un autre classeur
    Par nautygirl dans le forum Général VBA
    Réponses: 2
    Dernier message: 30/07/2007, 15h34

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