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 :

[VBA-E] Lancement d'une macro située dans un autre fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 179
    Points : 58
    Points
    58
    Par défaut [VBA-E] Lancement d'une macro située dans un autre fichier
    Bonjour, je possède un fichier excel dit principal. A partir de ce fichier principal je souhaite lancer un ou plusieurs fichiers excels secondaires et lancer automatiquement une sub qui se trouve dans ce fichier secondaire.

    Mais mon code me fournit l'erreur d'exécution 1004 : erreur définie par l'application ou par l'objet.

    Quelle est la bonne méthode pour faire ce que je souhaite ? Est ce réalisable ?

    D'avance merci

    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
     
     
    Sub Traitement()
     
    'Je suis dans mon fichier principal
    Dim I As Integer
    Dim NomFichier
     
    If ActiveSheet.Range("B2").Value = "" Then
        MsgBox ("Aucun fichier de lieux de mesure n'a été sélectionné")
    Else
        derniereligne = ActiveSheet.Range("B65365").End(xlUp).Row
    'Pour chacunes des localisations de fichiers : 
        For I = 2 To derniereligne
            NomFichier = ActiveSheet.Cells(I, 2).Value
            Lancement = Chr(34) & NomFichier & "!" & "Module5.ProcédureGénérale" & Chr(34)
            Application.Run (Lancement)
        Next I
    End If
    End Sub
    Je précise que ActiveSheet.Cells(I, 2).Value contient l'adresse du fichier sur le disque sous la forme : E:\Toto\Dévelop\ExcelFile\Test1.xls

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Bonjour sat478,

    Ce que tu pourrais faire, si tu as déjà le lien complet dans les cellules de ta feuille, c'est d'ouvrir ton fichier, d'éxécuter ta macro et d'enfin refermer ton fichier. C'est plus long mais ca marche.

    gringo69

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu ajoutes à ton projet les références de l'autre classeur puis tu peux utiliser la macro comme si elle faisiat partie de ton fichier
    attention aux conflits de nom

  4. #4
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par sat478
    Bonjour, je possède un fichier excel dit principal. A partir de ce fichier principal je souhaite lancer un ou plusieurs fichiers excels secondaires et lancer automatiquement une sub qui se trouve dans ce fichier secondaire.

    Mais mon code me fournit l'erreur d'exécution 1004 : erreur définie par l'application ou par l'objet.

    Quelle est la bonne méthode pour faire ce que je souhaite ? Est ce réalisable ?

    D'avance merci

    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
     
     
    Sub Traitement()
     
    'Je suis dans mon fichier principal
    Dim I As Integer
    Dim NomFichier
     
    If ActiveSheet.Range("B2").Value = "" Then
        MsgBox ("Aucun fichier de lieux de mesure n'a été sélectionné")
    Else
        derniereligne = ActiveSheet.Range("B65365").End(xlUp).Row
    'Pour chacunes des localisations de fichiers : 
        For I = 2 To derniereligne
            NomFichier = ActiveSheet.Cells(I, 2).Value
            Lancement = Chr(34) & NomFichier & "!" & "Module5.ProcédureGénérale" & Chr(34)
            Application.Run (Lancement)
        Next I
    End If
    End Sub
    Je précise que ActiveSheet.Cells(I, 2).Value contient l'adresse du fichier sur le disque sous la forme : E:\Toto\Dévelop\ExcelFile\Test1.xls
    Bonjour,

    Question : Est-ce que tes fichiers sont déjà ouverts ? si non il faut d'abord les ouvrir pour pouvoir utiliser les macros contenues dans celui-ci.

    Question : Est-ce que la routine que tu veux exécuter est bien définie en tant que Public ? si non, tu ne pourras pas l'atteindre.

    Correction : Dans le cas d'une ouverture centralisée des fichiers Excel (=tous dans la même application Excel) le code de lancement de l'application est incorrect ...

    Dans l'exemple que tu nous donnes, cela revient à avoir la ligne de commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "E:\Toto\Dévelop\ExcelFile\Test1.xls!Module5.ProcédureGénérale"
    mais le code devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "Test1.xls!ProcédureGénérale"
    +

    Théo

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 179
    Points : 58
    Points
    58
    Par défaut
    Bonjour Théo

    alors pour répondre à tes questions :

    1) oui le fichier est déjà ouvert (j'avais oublié une ligne de code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks.Open Filename:=NomFichier
    2) la routine que je souhaite exécuter ce situe dans un module (Module5) et est définie par :

    3) j'ai modifié mon code afin de modifier ma ligne de commande.

    Pour cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    NomFichier = ActiveSheet.Cells(i, 2).Value
            Workbooks.Open Filename:=NomFichier
            Set NomFichier = ActiveWorkbook
     
            Lancement = Chr(34) & NomFichier.Name & "!" & "Module5.ProcédureGénérale" & Chr(34)
            Application.Run (Lancement)
    Mais j'ai toujours mon erreur 1004. Sais tu à quoi elle correspond ?

  6. #6
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par sat478
    3) j'ai modifié mon code afin de modifier ma ligne de commande.

    Pour cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NomFichier = ActiveSheet.Cells(i, 2).Value
            Workbooks.Open Filename:=NomFichier
            Set NomFichier = ActiveWorkbook
                    
            Lancement = Chr(34) & NomFichier.Name & "!" & "Module5.ProcédureGénérale" & Chr(34)
            Application.Run (Lancement)
    Mais j'ai toujours mon erreur 1004. Sais tu à quoi elle correspond ?
    Supprime ce qui est en rouge et retente...

    Sinon juste pour confirmer ... le Module5 est dans le fichier que tu ouvres ou dans le fichier principal où il y a les noms des autres fichiers Excel ???

    +

    Théo

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 179
    Points : 58
    Points
    58
    Par défaut
    Même avec suppression de "Module 5" l'erreur est persistante.

    Oui le module 5 se situe bien dans le fichier que j'ouvre et non pas dans le fichier principal de l'application

  8. #8
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Et en débuggage, il te surligne quelle ligne ?

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Salut Théo, Hello Sat,
    Je commencerais par afficher ce qu'il y a dans "Lancement" et ensuite, j'ajouterais un "DoEvents" sur la ligne suivant l'ouverture du fichier (Voir DoEvents dans l'aide pous savoir à quoi ça sert )
    Si ton fichier n'est pas encore totalement ouvert, la procédure se poursuit tout de même alors que la macro n'est pas encore accessible. Donc... DoEvents

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/10/2014, 13h31
  2. [AC-2000] Message d'erreur lors du lancement d'une macro contenue dans un module
    Par Tydher dans le forum VBA Access
    Réponses: 3
    Dernier message: 24/08/2011, 14h29
  3. [VBA-E] Lancement d'une macro en fonction du contenu d'une cellule
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2007, 15h13
  4. Réponses: 1
    Dernier message: 13/06/2006, 17h41
  5. [VBA] utiliser une macro contenue dans un autre classeur
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 01/02/2006, 18h46

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