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

VBA Word Discussion :

Executer macro excel via word [WD-2003]


Sujet :

VBA Word

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut Executer macro excel via word
    Bonjour à tous!

    Je travaille sur un fichier word qui doit ouvrir un fichier excel et executer une macro (AjoutActivite) présente dans un module (NouvelleActivite) de ce fichier excel.

    En m'inspirant du forum, j'ai écrit un bout de programme, mais il bloque à l'application de la macro excel, et je ne vois pas pourquoi. J'obtiens une "erreur d'execution" me disant qu'il est "impossible d'executer la macro spécifiée". Bien sur, quand je clique sur le bouton d'aide, j'ai une fenêtre qui s'ouvre avec rien dedans.

    Remarque : Si je lance la macro depuis le fichier excel que je viens d'ouvrir, elle fonctionne (=> ça vient pas d'excel);

    Voici mon code, si quelqu'un avait une idée? Merci d'avance aux bonnes âmes du forum !

    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
    Sub FichierWord()
    
    'Déclaration des variables
    Dim Reponse As Integer 'variable de test sur l'existence ou non d'une analyse
    Dim xl As Object
    Dim wb As Object
    Dim Chemin As String 'chemin d'accès du doc actif et du fichier excel vierge
    Dim CheminExcel As String 'chemin d'accès + nom du fichier excel vierge
    Dim NomWord As String 'nom du fichier Word
    Dim NomExcel As String 'nom du fichier Excel
    Dim NomGeneral As String 'nom du fichier sans extension
    
    'Boîte de dialogue pour tester si une analyse existe déjà
    Reponse = MsgBox("L'analyse a-t-elle déjà été engagée?", vbYesNoCancel, "Analyse Environnementale")
    
        If Reponse = 6 Then 'si l'analyse existe déjà
        MsgBox "y'a déjà une analyse"
            
        ElseIf Reponse = 7 Then 'si l'analyse n'existe pas encore
            'Ouvre et renomme le fichier vierge Excel
                'Détermine le chemin d'accès des documents
                Chemin = ActiveDocument.Path
                'Détermine le nom du fichier Word
                NomWord = ActiveDocument.Name
                'Enlève l'extension du nom de fichier général
                NomGeneral = replace(NomWord, ".doc", "")
                'Détermine le chemin d'accès + le nom du doc excel à ouvrir
                CheminExcel = Chemin + "\Analyse_environnementaleWord.xls"
                'Création de l'objet excel
                Set xl = CreateObject("Excel.Application")
                'Active la fenêtre Excel
                xl.Visible = True
                'Ouvre le doc excel vierge
                Set wb = xl.Workbooks.Open(FileName:=CheminExcel)
            'Créée 1 onglet Excel par activité du fichier word
            Application.Run "xl!NouvelleActivite!AjoutActivite" 'Ligne de l'erreur
    
            'Renomme le fichier excel A LA FIN
            NomExcel = Chemin + "\" + NomGeneral + ".xls"
            With xl.Workbooks("Analyse_environnementaleWord.xls")
                  .SaveAs NomExcel
            End With
      
        ElseIf Reponse = 2 Then Exit Sub 'si annuler alors on sort
        
        End If
    
    
    End Sub

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Je viens de faire ce test qui fonctionne chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set xl = CreateObject("Excel.Application")
    'Active la fenêtre Excel
    xl.Visible = True
    'Ouvre le doc excel vierge
    cheminexcel = "D:\AGR\VBA Excel\Images.xls"
    Set wb = xl.Workbooks.Open(Filename:=cheminexcel)
    xl.Run "Images.xls!AjoutActivite"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut
    Rhââââ!
    Ca marche!



    Ca fait 3 heures que je tourne, et c'était 3 fois rien, comme d'hab! Il me semblait bien que c'était la référence à mon classeur qui n'allait pas, mais toute seule, je m'en sortais pas!

    Bin en tous cas, merci beaucoup. Je vais pouvoir m'en retourner dans mes pénates le coeur léger!

    Alex

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Si je peux me permettre, tu ne devrais pas faire du latebinding dans ton code.

    Le latebinding est la déclaration d'objet en tant qu'objet et de les affecter ensuite dans ton code.
    La solution la plus simple est d'utiliser le Earlybinding, c'est à dire faire référence à la bibliothèque dès le début.

    Outils => Référence => Micosoft Excel xx.x Library

    Différence : LateBinding

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub TestLate()
    Dim xlApp as Object
    Dim xlWb As Object
     
    set xlApp = CreatObject("Excel.application")
    Set xlWb = xlapp.Workbooks.Open ("MonFichier")
     
     
    end Sub
    Dans ce code, tu dois être certaine du code que tu écris.

    Si tu fais du EalyBinding

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub TestEarly()
    Dim xlApp as Excel.application
    Dim xlWb As Excel.WorkBook
     
    Set xlApp = New Excel.Application
    Set xlWb = xlApp.WorkBooks.Open ( "MonFichier")
     
    End sub
    Dans ce deuxième exemple, l'intellisense de VBe va t'aider à écrire ton code.

    Maintenant, pour la macro, si elle est contenue dans le fichier que tu ouvres, il n'est pas utile d'utiliser le xlApp.Run en EarlyBinding, le nom de la macro suffit

    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut
    Oui oui, permets-toi, y'a pas de pb!

    Ton explication est intéressante et claire. J'avais bien fait des tentatives de "Earlybinding", mais sans savoir ce que c'est (j'ai vu apparaître ces termes mais sans comprendre ce qu'il y avait derrière). J'ai dû joyeusement mélanger tout ça, du coup, c'était pas très concluant...

    Là j'ai pas le temps, mais je testerai ça prochainement et je posterai un code tout propre pour mes copains galériens du VBA

  6. #6
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Merci Heureux-oli pour ces précisions, j'ignorai tout du Earlybinding, et j'utilisais donc toujours du Latebinding, pour piloter les autres applications.
    J'en prend bonne note

    je posterai un code tout propre pour mes copains galériens du VBA

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut
    Comme promis, voici le code tout propre et qui marche, earlybinding inclus :


    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
    Sub FichierExcel()
     
    'Déclaration des variables
    Dim Reponse As Integer 'variable de test sur l'existence ou non d'une analyse
    Dim xlApp As Excel.Application
    Dim xlWb As Excel.Workbook
    Dim Chemin As String 'chemin d'accès du doc actif et du fichier excel vierge
    Dim CheminExcel As String 'chemin d'accès + nom du fichier excel vierge
    Dim NomWord As String 'nom du fichier Word
    Dim NomExcel As String 'nom du fichier Excel
    Dim NomGeneral As String 'nom du fichier sans extension
     
    Dim NbTableaux As Integer 'Nb total de tableaux
    Dim NbActivites As Integer 'nb tot d'activités
    Dim i As Integer 'Variable pour la boucle sur les activités
    Dim NomActivite As String 'Nom de l'activité
    Dim NbLignesAspectImpact As Integer 'nb de lignes du tableau aspect/impact
    Dim couples As String
     
    Dim xlWs As Excel.Worksheet
     
     
    'Boîte de dialogue pour tester si une analyse existe déjà
    Reponse = MsgBox("L'analyse a-t-elle déjà été engagée?", vbYesNoCancel, "Analyse Environnementale")
     
        If Reponse = 6 Then 'si l'analyse existe déjà
        MsgBox "y'a déjà une analyse"
     
        ElseIf Reponse = 7 Then 'si l'analyse n'existe pas encore
            'Ouvre le fichier vierge Excel
                'Détermine le chemin d'accès des documents
                Chemin = ActiveDocument.Path
                'Détermine le nom du fichier Word
                NomWord = ActiveDocument.Name
                'Enlève l'extension du nom de fichier général
                NomGeneral = replace(NomWord, ".doc", "")
                'Détermine le chemin d'accès + le nom du doc excel à ouvrir
                CheminExcel = Chemin + "\Analyse_environnementaleWord.xls"
                'Création de l'objet excel
                Set xlApp = CreateObject("Excel.Application")
                'Active la fenêtre Excel
                xlApp.Visible = True
                'Ouvre le doc excel vierge
                Set xlWb = xlApp.Workbooks.Open(FileName:=CheminExcel)
     
                    'lance la macro ajout activité
                        xlApp.Run "Analyse_environnementaleWord.xls!AjoutActivite"
     
     
        ElseIf Reponse = 2 Then Exit Sub 'si annuler alors on sort
     
        End If
     
    End Sub

    Merci encore pour votre aide !

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

Discussions similaires

  1. Lancer Macro Excel depuis word
    Par Tintou dans le forum VBA Word
    Réponses: 1
    Dernier message: 21/02/2008, 17h17
  2. [VB.NET][VBA-E]Execution d'une macro excel via application
    Par Yolak dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/12/2007, 07h46
  3. Executer macro excel via VBS
    Par zoubli dans le forum VBScript
    Réponses: 17
    Dernier message: 20/12/2006, 13h00
  4. Executer macros Excel via Access
    Par Echizen1 dans le forum Access
    Réponses: 7
    Dernier message: 20/09/2006, 15h09
  5. supprimer popup macro (excel) via access
    Par Echizen1 dans le forum Access
    Réponses: 9
    Dernier message: 15/09/2006, 17h07

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