Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Exécuter une macro Word à partir d'Excel (publipostage)

25 réponses
Avatar
mel63
Bonjour,

Je sais que cette question vous paraitra vu et revue mais cela fait 2 jours que je cherche sur internet et que je n'ai pas trouvé de solution à mon problème.

Je souhaite effectuer un publipostage avec Word à partir de données Excel. Jusque là tout est ok.
J'ai aussi fait une macro Word pour pouvoir créer un fichier word par facture créée. C'est ok aussi.

Sauf que j'aimerai pouvoir lancer ma macro Word à partir d'Excel. J'ai trouvé le code suivant :
Sub Facture()

Dim oWdApp As Word.Application

'Lancer Word
Set oWdApp = CreateObject("Word.Application")

With oWdApp
'Afficher Word si nécessaire...
.Visible = True
'Ouvrir le document Word
.Documents.Open ("source du doc")
'Exécuter la macro
'.Run "EnregFacture"

End With

'Libérer les ressources
Set oWdApp = Nothing

End Sub

Word s'ouvre bien mais c'est tout ! La macro de Word ne semble pas se lancer ...

En plus de ça, serait-il possible de pouvoir faire le publipostage à partir d'Excel en choisissant les lignes concernées par l'envoi ?

Merci d'avance pour votre aide (je sature !)

10 réponses

1 2 3
Avatar
Michd
Bonjour
'------------------------------
Je viens de tester ton code mais ça ne marche toujours pas ! La ligne Dim Chemin
As String, Fichier As String ne lui plait pas.
Et il me met toujours un bug à ".Run LaMacro".
Il ouvre mon fichier word mais n'exécute pas la macro ...
'------------------------------
La procédure fonctionne très bien. Il faut seulement modifier cette ligne de code. Word est
différent d'Excel. Tu dois plutôt utiliser cette ligne de code pour exécuter la macro.
.Run "EnregFacture"
La procédure au complet :
'-------------------------------------------------
Sub Test()
Dim oWdApp As Object
Dim Chemin As String, Fichier As String
'*********Définir les variables***********
Chemin = "F:Documents" '<====== à définir
Fichier = "test.docm" '<====== à définir
'************************************
Set oWdApp = CreateObject("Word.application")
With oWdApp
'Afficher Word si nécessaire...
.Visible = True
'Ouvrir le document Word
.Documents.Open (Chemin & Fichier)
'Exécuter la macro
.Run LaMacro
End With
'Libérer les ressources
Set oWdApp = Nothing
End Sub
'-------------------------------------------------
Si l'exécution de la macro bloque sur la déclaration des variables
Dim Chemin As String, Fichier As String
Es-tu certain d'avoir activé les macros dans ton application Word
Dans l'interface de calcul : Barre de menu du ruban / onglet développeur /
Section : Code / Commande : Sécurité des macros /
Dans la section du bas : coche l'option : "accès approuvé au modèle d'objet du projetVBA
Dans la section du haut : Activer toutes les macros - où l'option qui te convient.
MichD
Avatar
mel63
Le vendredi 13 Juillet 2018 à 11:54 par Michd :
Bonjour
'------------------------------
Je viens de tester ton code mais ça ne marche toujours pas ! La ligne
Dim Chemin
As String, Fichier As String ne lui plait pas.
Et il me met toujours un bug à ".Run LaMacro".
Il ouvre mon fichier word mais n'exécute pas la macro ...
'------------------------------
La procédure fonctionne très bien. Il faut seulement modifier
cette ligne de code. Word est
différent d'Excel. Tu dois plutôt utiliser cette ligne de code
pour exécuter la macro.
.Run "EnregFacture"
La procédure au complet :
'-------------------------------------------------
Sub Test()
Dim oWdApp As Object
Dim Chemin As String, Fichier As String
'*********Définir les variables***********
Chemin = "F:Documents" '<====== à définir
Fichier = "test.docm" '<====== à
définir
'************************************
Set oWdApp = CreateObject("Word.application")
With oWdApp
'Afficher Word si nécessaire...
.Visible = True
'Ouvrir le document Word
.Documents.Open (Chemin & Fichier)
'Exécuter la macro
.Run LaMacro
End With
'Libérer les ressources
Set oWdApp = Nothing
End Sub
'-------------------------------------------------
Si l'exécution de la macro bloque sur la déclaration des
variables
Dim Chemin As String, Fichier As String
Es-tu certain d'avoir activé les macros dans ton application Word
Dans l'interface de calcul : Barre de menu du ruban / onglet développeur
/
Section : Code / Commande : Sécurité des macros /
Dans la section du bas : coche l'option : "accès approuvé au
modèle d'objet du projetVBA
Dans la section du haut : Activer toutes les macros - où l'option qui te
convient.
MichD
Encore merci, je n'avais pas compris pour l'histoire du "chemin" et du "fichier" mais c'est bon j'ai compris !
Par contre c'est toujours la même histoire, la commande .Run EnregFacture (avec ou sans guillemets c'est pareil) ne lui plait pas.
Je pense que ça vient de mon fichier word. Pour programmer le publipostage je n'ai pas fais de macro, j'ai simplement fait une macro pour enregistrer les résultats du publipostage sous forme de fichiers word (parce qu'en PDF le fichier sortant n'est pas valide) pour avoir un document word par facture effectuée.
J'ai cherché pour programmer le publipostage à l'aide d'une macro mais je ne comprend rien aux codes que j'ai trouvés donc j'ai utilisé la fonction "publipostage" de word.
Avatar
Michd
Je te le répète, ta macro DANS WORD doit être dans un MODULE STANDARD. Fenêtre VBA en Word / barre
des menus / Insertion / Module / est-ce que ta macro est dans cette page blanche ? Il n'y a AUCUNE
RAISON pour que cette ligne de code ne s'exécute pas. À savoir si ta macro dans Word et OK, ça c'est
une autre histoire! Nul besoin d'avoir un lien entre ton fichier Excel et Word.
MichD
Avatar
Michd
Voici un exemple complet d'un publipostage fait directement et complètement dans Excel. Évidemment,
le document aux fins du publipostage existe déjà. Le fichier .zip contient 3 fichiers. Mets ces 3
fichiers dans le même répertoire et ouvre le fichier Excel. Le code est commenté pour faciliter
l'accès au code.
https://www.cjoint.com/c/HGnrXrMfgpi
MichD
Avatar
mel63
Le vendredi 13 Juillet 2018 à 14:16 par Michd :
Je te le répète, ta macro DANS WORD doit être dans un
MODULE STANDARD. Fenêtre VBA en Word / barre
des menus / Insertion / Module / est-ce que ta macro est dans cette page
blanche ? Il n'y a AUCUNE
RAISON pour que cette ligne de code ne s'exécute pas. À savoir si
ta macro dans Word et OK, ça c'est
une autre histoire! Nul besoin d'avoir un lien entre ton fichier Excel et Word.
MichD
Mais ma macro DANS WORD est dans un MODULE STANDARD. Et la ligne de code ne s'exécute PAS.
Et puisque mon publipostage word se base sur des données excel bien sûr qu'il y a un lien, je confirme la liaison à chaque ouverture du Word.
Bref ! je fais ce que je peux, je comprends ce que l'on m'explique mais ça ne marche pas !
Avatar
Jacquouille
Bonjour:
Dans ce cas-ci bien précis, voici ma devise: "Errare humanum est,
perseverare diabolicum".
-))
Ceci dit, un essais?
Ouvrir Excel et son enregistreur de macro, puis effectuer toutes les
opérations désirées.
Ensuite, comparer le texte de macro proposé et voir si cela fonctionne ou
pas.....
Bonne chance.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"mel63" a écrit dans le message de groupe de discussion :
Le vendredi 13 Juillet 2018 à 14:16 par Michd :
Je te le répète, ta macro DANS WORD doit être dans un
MODULE STANDARD. Fenêtre VBA en Word / barre
des menus / Insertion / Module / est-ce que ta macro est dans cette page
blanche ? Il n'y a AUCUNE
RAISON pour que cette ligne de code ne s'exécute pas. À savoir si
ta macro dans Word et OK, ça c'est
une autre histoire! Nul besoin d'avoir un lien entre ton fichier Excel et

Word.
MichD

Mais ma macro DANS WORD est dans un MODULE STANDARD. Et la ligne de code ne
s'exécute PAS.
Et puisque mon publipostage word se base sur des données excel bien sûr
qu'il y
a un lien, je confirme la liaison à chaque ouverture du Word.
Bref ! je fais ce que je peux, je comprends ce que l'on m'explique mais ça
ne
marche pas !
Avatar
Michd
Si cette macro ne s'exécute pas et que tu as suivi les recommandations données sur ce fil, je n'ai
plus d'autres alternatives. Dans cette macro, j'espère que tu as modifié laMacro pour le nom de ta
macro "EnregFacture" à cette ligne de code : .Run "EnregFacture"
As-tu un message d'erreur lors de l'exécution? Si oui, quel est-il?
'-------------------------------------------------
Sub Test()
Dim oWdApp As Object
Dim Chemin As String, Fichier As String
'*********Définir les variables***********
Chemin = "F:Documents" '<====== à définir
Fichier = "test.docm" '<====== à définir
'************************************
Set oWdApp = CreateObject("Word.application")
With oWdApp
'Afficher Word si nécessaire...
.Visible = True
'Ouvrir le document Word
.Documents.Open (Chemin & Fichier)
'Exécuter la macro
.Run "EnregFacture"
End With
'Libérer les ressources
Set oWdApp = Nothing
End Sub
'-------------------------------------------------
MichD
Avatar
isabelle
bonjour à tous,
pourquoi ne pas utiliser l'événement
Private Sub Document_Open()
pour exécuter votre macrodu fichier Word ?
isabelle
Le 2018-07-16 à 09:34, mel63 a écrit :
Le vendredi 13 Juillet 2018 à 14:16 par Michd :
Je te le répète, ta macro DANS WORD doit être dans un
MODULE STANDARD. Fenêtre VBA en Word / barre
des menus / Insertion / Module / est-ce que ta macro est dans cette page
blanche ? Il n'y a AUCUNE
RAISON pour que cette ligne de code ne s'exécute pas. À savoir si
ta macro dans Word et OK, ça c'est
une autre histoire! Nul besoin d'avoir un lien entre ton fichier Excel et

Word.
MichD

Mais ma macro DANS WORD est dans un MODULE STANDARD. Et la ligne de code ne
s'exécute PAS.
Et puisque mon publipostage word se base sur des données excel bien sûr qu'il y
a un lien, je confirme la liaison à chaque ouverture du Word.
Bref ! je fais ce que je peux, je comprends ce que l'on m'explique mais ça ne
marche pas !
Avatar
mel63
Le jeudi 12 Juillet 2018 à 12:16 par mel63 :
Bonjour,
Je sais que cette question vous paraitra vu et revue mais cela fait 2 jours que
je cherche sur internet et que je n'ai pas trouvé de solution à
mon problème.
Je souhaite effectuer un publipostage avec Word à partir de
données Excel. Jusque là tout est ok.
J'ai aussi fait une macro Word pour pouvoir créer un fichier word par
facture créée. C'est ok aussi.
Sauf que j'aimerai pouvoir lancer ma macro Word à partir d'Excel. J'ai
trouvé le code suivant :
Sub Facture()
Dim oWdApp As Word.Application
'Lancer Word
Set oWdApp = CreateObject("Word.Application")
With oWdApp
'Afficher Word si nécessaire...
.Visible = True
'Ouvrir le document Word
.Documents.Open ("source du doc")
'Exécuter la macro
'.Run "EnregFacture"
End With
'Libérer les ressources
Set oWdApp = Nothing
End Sub
Word s'ouvre bien mais c'est tout ! La macro de Word ne semble pas se lancer
...
En plus de ça, serait-il possible de pouvoir faire le publipostage
à partir d'Excel en choisissant les lignes concernées par l'envoi
?
Merci d'avance pour votre aide (je sature !)
Bonjour,
Je ne me demande plus comment faire marcher le publipostage word à partir d'excel ... Mon publipostage word, qui marchait pourtant si bien, ne fonctionne plus !
J'utilise le code VBA suivant, dans word, pour produire un enregistrement par nom (afin de garder une trace des factures sur mon ordinateur :
Sub TestPublipost()
' Déclaration des variables
Dim iR As Integer
Dim i As Integer
Dim oDoc As Document
Dim DocName As String
Dim oDS As MailMergeDataSource
' Affectation des objets
Set oDoc = ActiveDocument
Set oDS = oDoc.MailMerge.DataSource
iR = oDoc.MailMerge.DataSource.RecordCount
Debug.Print iR
For i = 1 To iR
With oDoc.MailMerge
'Définition du premier et dernier enregistrement
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
' Envoi des données dans un nouveau document
.Destination = wdSendToNewDocument
' Exécution du publipostage
.Execute
' Actualisation de l'enregistrement pour la sauvegarde
.DataSource.ActiveRecord = i
'Utilisation de deux champs pour obtenir le nom du document
DocName = .DataSource.DataFields(2).Value
DocName = DocName & "-" & .DataSource.DataFields(3).Value
Debug.Print DocName; i
End With
' Sauvegarde du document publiposté
With ActiveDocument
.SaveAs "c:temp" & DocName & ".doc"
.Close
End With
Next i
End Sub
J'ai modifié le champ : "c:temp" avec le chemin du fichier dans lequel je souhaite que l'enregistrement se fasse.
Mais impossible ! Alors que cela marchait très bien il y a deux semaines !.
C'est à n'y rien comprendre ...
Avatar
Michd
Bonjour,
Quelle est la valeur de "DocName" lorsque la procédure s'arrête dans la ligne de code suivante?
.SaveAs "c:temp" & DocName & ".doc"
Un nom de document ne peut pas contenir les symboles suivants : ? * : > < / |
MichD
1 2 3