Comment utiliser des variables VBA excel dans une macro word?

Anonyme
2020-03-31T08:53:45+00:00

Bonjour,

Je débute dans la création de macro et cherche désespérément comment récupérer des variables que j'ai déclarées dans une macro excel dans une autre macro word qui gère mon publipostage.

Le fichier excel qui contient la source des données et duquel je lance ma macro word, contient déjà des variables ( chemin de destination, nom de l’export PDF que je souhaite donner) et dont j’aurais besoin pour sauvegarder dans un dossier le résultat de la fusion, exporté en PDF. .

 Comment puis-je procéder?

Quelqu'un as-t-il un début de solution?

Toute aide sera précieuse !

D'avance merci !

Microsoft 365 et Office | Word | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire
Réponse acceptée par l’auteur de la question
DanielCo 107.7K Points de réputation
2020-03-31T14:49:49+00:00

Dans Excel, je t'avais indiqué :

    wordApp.Visible = True

    Set WordDoc = wordApp.Documents.Open("C:\Users\clouh\Desktop\ETIPX -001.docm")

    WordObj.Run "EXPORT_PDF_ETIPX", Chemin_du_dossier_de_sauvegarde

En fait, il fallait mettre :

    wordApp.Visible = True

    Set WordDoc = wordApp.Documents.Open("C:\Users\clouh\Desktop\ETIPX -001.docm")

    wordApp.Run "EXPORT_PDF_ETIPX", Chemin_du_dossier_de_sauvegarde

Avec ce code, la msgbox apparaît bien dans Word.

Si ça ne fonctionne toujours pas, dis-le et je te retournerai les fichiers.

Daniel

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

11 réponses supplémentaires

  1. Anonyme
    2020-03-31T11:05:47+00:00

    Rebonjour Daniel.

    Effectivement, j'avais dans le but de mieux lire ce que je fait, scinder dans un autre module la partie qui lance la macro depuis excel que j'ai omis de vous copier. La macro sera bien commander depuis excel !

    Ci dessous le code :

    Sub lancerMacroWord_ETI_PX()

           'choix du dossier de sauvegarde

     Dim objShell As Object, objFolder As Object, oFolderItem As Object

        Dim Chemin_du_dossier_de_sauvegarde As String

        Set objShell = CreateObject("Shell.Application")

        Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir le répertoire de sauvegarde des étiquettes dans CHANTIER", &H1&)

        On Error Resume Next

        Set oFolderItem = objFolder.Items.Item

        Chemin_du_dossier_de_sauvegarde = oFolderItem.Path

            'définition des noms des planches étiquettes panneaux

            Dim nom_ETIPX As String

            Dim CH_ETIPX As String

            nom_ETIPX = Sheets("Calep").Range("D1").Value

            CH_ETIPX = Chemin_du_dossier_de_sauvegarde & "" & nom_ETIPX

            'word est fermé

        Set wordApp = CreateObject("Word.Application")

        wordApp.Visible = Thrue

        'chemin du modèle étiquettes panneaux

        wordApp.Documents.Open ("C:\Users\clouh\Desktop\ETIPX -001.docm")

        'macro à exécuter dans le modèle précédement sélectionné

        wordApp.Run "PUBLIPOSTAGE_PX.EXPORT_PDF_ETIPX"

        'quitter word

        wordApp.Quit

    End Sub

    J'avais déclaré ici seulement une partie des variable pour ne pas me perdre.

    Je recopie tout dans le même module de ma macro excel, fait quelque tests et reviens vers vous.

    Je tiens sincèrement à vous remercier de l'attention et du temps que vous m'accordez.

    Bien cordialement

    Hugo

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. DanielCo 107.7K Points de réputation
    2020-03-31T10:43:49+00:00

    Si j'ai bien compris, la macro Word n'est pas commandée par Excel. Dans ce cas, il difficile de passer des variables autrement qu'en utilisant un fichier texte par exemple. Essai, en modifiant la macro Excel avec ce code :

      Dim WordDoc As Object

      Set WordApp = CreateObject("word.Application")

      WordApp.Visible = True

      Set WordDoc = WordApp.Documents.Open("C:\Users\clouh\Desktop\ETIPX - Copie.docm")

      WordObj.Run "EXPORT_PDF_ETIPX", Chemin_du_dossier_de_sauvegarde

     (La dernière ligne provoque l'exécution de la macro Word)

    Et en modifiant la macro Word :

    Sub EXPORT_PDF_ETIPX(Chemin)

      MsgBox Chemin

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2020-03-31T10:15:08+00:00

    Bonjour Daniel.

    Tout d’abord merci infiniment de votre réponse rapide !

    J'ai dans un premier temps recopier ( bêtement) dans un nouveau module excel :

    [code]

    Sub MacroExcel()

      Dim Variable As String

      Variable = "toto"

      MacroWord Variable

    End Sub

    [/code]

    et dans word :

    [code]

    Sub MacroWord(Var)

      MsgBox Var

    End Sub

    [/code]

    Mais j'obtiens une erreur.

    J'ai ensuite copier les 2 partie du code dans excel, et la j'ai bien une msgbox avec le nom de la variable "toto".

    Je ne sais pas comment utiliser votre exemple dans mes documents.

    Dans excel j'ai pour l'instant ce code :

    [code]

    Sub publipost_ETI()

    'choix du dossier de sauvegarde

     Dim objShell As Object, objFolder As Object, oFolderItem As Object

        Dim Chemin_du_dossier_de_sauvegarde As String

        Set objShell = CreateObject("Shell.Application")

        Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir le répertoire de sauvegarde des étiquettes dans CHANTIER", &H1&)

        On Error Resume Next

        Set oFolderItem = objFolder.Items.Item

        Chemin_du_dossier_de_sauvegarde = oFolderItem.Path

    'définition des noms des planches étiquettes

        Dim nom_ETIPX As String

        Dim nom_ETIQUINC As String

        Dim nom_ETIDEBIT As String

        Dim CH_ETIPX As String

        Dim CH_ETIQUINC As String

        Dim CH_ETIDEBIT As String

        'Dim wApp As Object

        '  Set wApp = CreateObject("Word.Application")

                nom_ETIPX = Sheets("Calep").Range("D1").Value

                nom_ETIQUINC = Sheets("Calep").Range("D2").Value

                nom_ETIDEBIT = Sheets("Calep").Range("D3").Value

                CH_ETIPX = Chemin_du_dossier_de_sauvegarde & "" & nom_ETIPX

                CH_ETIQUINC = Chemin_du_dossier_de_sauvegarde & "" & nom_ETIQUINC

                CH_ETIDEBIT = Chemin_du_dossier_de_sauvegarde & "" & nom_ETIDEBIT

           ' MsgBox ("Le chemin de sauvegarde des étiquettes sera : " & Chemin_du_dossier_de_sauvegarde)

           ' MsgBox ("Le nom des étiquettes panneaux sera : " & vbCr & nom_ETIPX & vbCr & vbCr & "Le nom des étiquettes quincailerie sera : " & vbCr & nom_ETIQUINC & vbCr & vbCr & "Le nom des étiquettes débit sera : " & vbCr & nom_ETIDEBIT)

           ' MsgBox ("Le chemin complet des étiquettes panneaux sera : " & vbCr & CH_ETIPX)

           ' MsgBox ("Le chemin complet des étiquettes quincaillerie sera : " & vbCr & CH_ETIQUINC)

           ' MsgBox ("Le chemin complet des étiquettes débit sera : " & vbCr & CH_ETIDEBIT)

          'Ouvrir le modèle word

       'Set wordapp = CreateObject("word.Application")

      'wordapp.Visible = True

      'wordapp.Documents.Open "C:\Users\clouh\Desktop\ETIPX - Copie.docm"

    '

    End Sub

    [/code]

    et dans word celui la ( je redéclare pour l'instant mon chemin se sachant pas récupérer mes variables) :

    [code]

    Sub EXPORT_PDF_ETIPX()

    'Boite de dialogue pour choisir la source de publipostage ETI PX

    'MsgBox "Source des étiquettes"

    Dim finput As FileDialog

    Dim SRC_XL_PX As String

    Set finput = Application.FileDialog(msoFileDialogOpen)

    '.Title = "Choix du modèle"

    finput.Show

        SRC_XL_PX = finput.SelectedItems(1)

        ''''''''''''''''''''

        'Boite de dialogue pour choisir la destination de publipostage ETI PX

       ' MsgBox "Destination des étiquettes"

        Dim Repertoire_destination As FileDialog

    Set Repertoire_destination = Application.FileDialog(msoFileDialogFolderPicker)

    Repertoire_destination.Show

        '''''''''''''''''''''''

       'SELECTION_AUTO_SOURCE_ETIPX

    '

    '

         ActiveDocument.MailMerge.OpenDataSource Name:=SRC_XL_PX, _

            ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _

            AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _

            WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _

            Format:=wdOpenFormatAuto, Connection:= _

            "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source= SRC_XL_PX;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB" _

            , SQLStatement:="SELECT * FROM 'Etipx (2)$'", SQLStatement1:="", _

            SubType:=wdMergeSubTypeAccess

        With ActiveDocument.MailMerge

            .Destination = wdSendToNewDocument

            .SuppressBlankLines = True

            With .DataSource

                .FirstRecord = wdDefaultFirstRecord

                .LastRecord = wdDefaultLastRecord

            End With

            .Execute Pause:=False

        End With

        '''''

        ChangeFileOpenDirectory _

            "C:\Users\clouh\Desktop\Destination sauvegarde\TEST 3003-1"

       ActiveDocument.ExportAsFixedFormat OutputFileName:= _

                    "C:\Users\clouh\Desktop\Destination sauvegarde\TEST 3003-1\4589 TAT ETIPX-687.pdf" _

            , ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _

            wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _

            Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _

            CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _

            BitmapMissingFonts:=True, UseISO19005_1:=False

            ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges

    End Sub

    [/code]

    Je cherche à redéfinir : "C:\Users\clouh\Desktop\Destination sauvegarde\TEST 3003-1"

    par ma variable excel  : Chemin_du_dossier_de_sauvegarde

    et également : "C:\Users\clouh\Desktop\Destination sauvegarde\TEST 3003-1\4589 TAT ETIPX-687.pdf"

    par ma variable excel  : CH_ETIPX

    D'avance merci pour votre aide.

    Bien cordialement

    Hugo

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. DanielCo 107.7K Points de réputation
    2020-03-31T09:10:37+00:00

    Bonjour,

    Un exemple pour transmettre la chaîne "toto" entre deux macros :

    Sub MacroExcel()

      Dim Variable As String

      Variable = "toto"

      MacroWord Variable

    End Sub

    Sub MacroWord(Var)

      MsgBox Var

    End Sub

    Cordialement.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire