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

Fusion pilotée par Excel

2 réponses
Avatar
DesseJ
Bonjour,

J'effectue un traitement sur Excel (par vba) pour obtenir une liste
coh=E9rente afin d'effectuer une fusion avec Word (2003) puis je lance
toujours =E0 partir d'excel la proc=E9dure suivante pour ex=E9cuter la
fusion :

Private Sub FusionWord()
Dim WordApp As Object
Set WordApp =3D CreateObject("Word.Application")
WordApp.Visible =3D True
WordApp.Documents.Open ("c:\temp\ficnom.doc")
WordApp.Documents("c:\temp\ficnom.doc").Saved =3D True
WordApp.Documents("c:\temp\ficnom.doc").Close
End Sub

Le document Word ficnom.doc est li=E9 au document ficnom.xls par OleDB.
Dans le document ficnom.doc, j'ai mis la macro suivante pour qu'elle
soit ex=E9cut=E9e =E0 l'ouverture du fichier :
Private Sub Document_Open()
Dim myMerge
Set myMerge =3D ActiveDocument.MailMerge
If myMerge.State =3D wdMainAndDataSource Then myMerge.Execute
End Sub

Lorsque je lance le traitement, ficnom.doc s'ouvre sans lancer la
fusion automatiquement.
Si j'ouvre directement le fichier ficnom, la fusion se lance.
En revanche, si je force la fusion avec la proc=E9dure suivante, cela
fonctionne parfaitement.

O=F9 ai-je commis une erreur, svp ?
Merci pour vos conseils,
Steph D.

'------------------
Private Sub Document_Open()
ActiveDocument.MailMerge.MainDocumentType =3D wdFormLetters

ActiveDocument.MailMerge.OpenDataSource Name:=3D _
"c:\temp\FicNom.xls", ConfirmConversions:=3DFalse, _
ReadOnly:=3DFalse, LinkToSource:=3DTrue, AddToRecentFiles:=3DFalse,=
_
PasswordDocument:=3D"", PasswordTemplate:=3D"",
WritePasswordDocument:=3D"", _
WritePasswordTemplate:=3D"", Revert:=3DFalse,
Format:=3DwdOpenFormatAuto, _
Connection:=3D _
"Provider=3DMicrosoft.Jet.OLEDB.4.0;Password=3D"""";User
ID=3DAdmin;Data Source=3Dc:\temp\FicNom.xls;Mode=3DRead;Extended
Properties=3D""HDR=3DYES;IMEX=3D1;"";Jet OLEDB:System database=3D"""";Jet
OLEDB:Registry Path=3D"""";Jet OLEDB:Database Password=3D"""";Jet OL" _
, SQLStatement:=3D"SELECT * FROM `PourFusion$`",
SQLStatement1:=3D"", SubType _
:=3DwdMergeSubTypeAccess

With ActiveDocument.MailMerge
.Destination =3D wdSendToNewDocument
.SuppressBlankLines =3D True
With .DataSource
.FirstRecord =3D wdDefaultFirstRecord
.LastRecord =3D wdDefaultLastRecord
End With
.Execute Pause:=3DFalse
End With
End Sub
'------------------

2 réponses

Avatar
Anacoluthe
Bonjour !

'DesseJ' nous a écrit ...
Private Sub FusionWord()
(...) WordApp.Documents.Open ("c:tempficnom.doc")
WordApp.Documents("c:tempficnom.doc").Close (...)
End Sub
Private Sub Document_Open()
(...) If myMerge.State = wdMainAndDataSource Then myMerge.Execute
End Sub

Lorsque je lance le traitement, ficnom.doc s'ouvre sans lancer la
fusion automatiquement.


Il est difficile de répondre sans voir le contexte du document principal
mais je pense que dans votre Document_Open() l'objet myMerge est
insuffisamment renseigné : imaginez ce que donne la fusion de
l'enregistrement zéro à l'enregistrement zéro...
Ce n'est pas le cas dans votre deuxième Document_Open() qui marche.

Ceci dit je ne comprends pas pourquoi vous exécutez la fusion dans
une macro Word avec le risque d'être asynchrone : il serait bien
plus simple de placer l'ouverture de votre document, le lancement
de la fusion et sa fermeture uniquement dans votre macro Excel !
Et donc sans aucune macro dans votre document principal Word...

Anacoluthe
« Il est très difficile d'imaginer quelque chose de simple. »
- Pierre MAC ORLAN

Avatar
DesseJ
Anacoluthe a répondu :

Bonjour !
Bonsoir


Il est difficile de répondre sans voir le contexte du document principal
mais je pense que dans votre Document_Open() l'objet myMerge est
insuffisamment renseigné : imaginez ce que donne la fusion de
l'enregistrement zéro à l'enregistrement zéro...
Ce n'est pas le cas dans votre deuxième Document_Open() qui marche.


Oui, je le pense également, car dans ce cas, le document s'ouvre sans
lancer la fusion. D'ailleurs, quand je regarde la barre d'outils
"Fusion et Publipostage", celle-ci est inactive comme si le lien entre
les deux fichiers Ficnom était perdu.


Ceci dit je ne comprends pas pourquoi vous exécutez la fusion dans
une macro Word avec le risque d'être asynchrone : il serait bien
plus simple de placer l'ouverture de votre document, le lancement
de la fusion et sa fermeture uniquement dans votre macro Excel !
Et donc sans aucune macro dans votre document principal Word...


Je voulais tout placer initialement dans Excel, mais j'avais (très
mal) lu et interprêté, après avoir farfouillé dans le newsgroup, un
vos posts :
"Avec un document principal déjà lié qui contient en AutoOpen un
ActiveDocument.MailMerge.Execute il n'y a même pas besoin
d'Automation : il suffit de mettre dans le fichier Excel un
lien hypertexte vers ce document pour déclencher la fusion
d'un clic depuis la feuille Excel ! Restons AMIS donc ;-) "
Je voulais mixer le tout pour simplifier l'automation afin d'avoir une
écriture de macro plus "élégante" en jouant sur le MailMerge.Execute
d'un document déjà lié. Mais il est bien plus simple, comme vous le
suggérez, soit de tout gérer au sein de la macro Excel, soit
d'ajouter un lien hypertexte dans le classeur qui fait appel à ce
document dans ce cas préalablement lié.

Merci de m'avoir éclairé
Bonne soirée et journée
Steph D.

« Il est très difficile d'imaginer quelque chose de simple. »
- Pierre MAC ORLAN



Tellement vrai !