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

Pb de fusion vers Word en VBA

2 réponses
Avatar
steph.theo
Bonjour,

Je veux effectuer une fusion automatique depuis Access 2007 ...
Et je n'y arrive pas !

J'ai d'abord test=E9 l'exemple de l'aide :

Dim docNew As Document

Set docNew =3D Documents.Add

With docNew.MailMerge
.MainDocumentType =3D wdFormLetters
.OpenDataSource _
Name:=3D"C:\Program Files\Microsoft Office" & _
"\Office\Samples\Northwind.mdb", _
LinkToSource:=3DTrue, AddToRecentFiles:=3DFalse, _
Connection:=3D"TABLE Orders"
End With

Mais le probl=E8me est qu'une fen=E8tre s'ouvre ds Word pour me demander
sur quel table travailler ...
Et puis ca plante une fois sur 2 en m'indiquant que la Base ne peut
=EAtre ouverte ...

L=E0 j'en suis l=E0 ... et ca ne marche toujours pas ...

Bon il me reste la solution de cr=E9er des =E9tats dans Access je sais
mais le syst=E8me de fusion dans Word me permettrait d'avoir plus de
souplesse et de facilit=E9 dans la cr=E9ation ....

Merci de votre aide


Private Sub CommandeLettreWord_Click()

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
'Utilisation d'une requete cr=E9ation pour g=E9n=E9rer la table
TableVisiteClassement que je veux utiliser avec Word

DoCmd.SetWarnings False
DoCmd.OpenQuery "VisiteClassement"
DoCmd.SetWarnings True

MsgBox "Export Fait"

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
'Commander la fusion dans word


Dim wdapp As Word.Application

'D=E9marrer Word
Set wdapp =3D CreateObject("Word.application")

With wdapp
.Visible =3D True

'ouvrir le document
.Documents.Open "E:\Visite.docx"

'Diriger le publipostage vers un nouveau document
.ActiveDocument.MailMerge.OpenDataSource Name:=3D _
"E:\CDT.accdb" _
, ConfirmConversions:=3DFalse, ReadOnly:=3DFalse,
LinkToSource:=3DTrue, _
AddToRecentFiles:=3DFalse, PasswordDocument:=3D"",
PasswordTemplate:=3D"", _
WritePasswordDocument:=3D"", WritePasswordTemplate:=3D"",
Revert:=3DFalse, _
Format:=3DwdOpenFormatAuto, Connection:=3D _
"Provider=3DMicrosoft.ACE.OLEDB.12.0;User ID=3DAdmin;Data Source=3D=
E:
\CDT.accdb;Mode=3DRead;Extended Properties=3D"""";Jet OLEDB:System
database=3D"""";Jet OLEDB:Registry Pat" _
, SQLStatement:=3D"SELECT * FROM `TableVisiteClassement`",
SQLStatement1:=3D _
"", SubType:=3DwdMergeSubTypeAccess

.ActiveDocument.MailMerge.Destination =3D wdSendToNewDocument
.ActiveDocument.MailMerge.Execute
.ActiveDocument.SaveAs FileName:=3D"E:\test.docx"
.ActiveDocument.Close
.ActiveDocument.Close

End With

'fermer et lib=E9rer les objets
wdapp.Quit
Set wdapp =3D Nothing


End Sub

2 réponses

Avatar
Goupil
Salut,

Personnellement, je crée un requête création de table.
Cette requête crée une table dans une base externe.
Ensuite, on lance l'ouverture d'un document Word déjà fusionné avec cette
table et le tour est joué.

Pour éviter un message d'avertissement, il est conseillé de désactiver les
warnings dans la base de registre pour ne pas être obligé chaque fois de
cliquer deux fois sur OK.

"SQLSecurityCheck"=dword:00000000

1.
Démarrez l'Éditeur du Registre.

2.
Recherchez la clé de Registre suivante et cliquez dessus :

HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0WordOptions

3.
Cliquez sur Edition, pointez sur Nouveau, puis cliquez sur Valeur
DWORD.

4.
Sous Nom, tapez :

SQLSecurityCheck

5.
Double-cliquez sur SQLSecurityCheck.

6.
Dans la zone Données de la valeur, tapez :

00000000

7.
Cliquez sur OK.





a écrit dans le message de news:

Bonjour,

Je veux effectuer une fusion automatique depuis Access 2007 ...
Et je n'y arrive pas !

J'ai d'abord testé l'exemple de l'aide :

Dim docNew As Document

Set docNew = Documents.Add

With docNew.MailMerge
.MainDocumentType = wdFormLetters
.OpenDataSource _
Name:="C:Program FilesMicrosoft Office" & _
"OfficeSamplesNorthwind.mdb", _
LinkToSource:=True, AddToRecentFiles:úlse, _
Connection:="TABLE Orders"
End With

Mais le problème est qu'une fenètre s'ouvre ds Word pour me demander
sur quel table travailler ...
Et puis ca plante une fois sur 2 en m'indiquant que la Base ne peut
être ouverte ...

Là j'en suis là ... et ca ne marche toujours pas ...

Bon il me reste la solution de créer des états dans Access je sais
mais le système de fusion dans Word me permettrait d'avoir plus de
souplesse et de facilité dans la création ....

Merci de votre aide


Private Sub CommandeLettreWord_Click()

============================================================================= 'Utilisation d'une requete création pour générer la table
TableVisiteClassement que je veux utiliser avec Word

DoCmd.SetWarnings False
DoCmd.OpenQuery "VisiteClassement"
DoCmd.SetWarnings True

MsgBox "Export Fait"

====================== 'Commander la fusion dans word


Dim wdapp As Word.Application

'Démarrer Word
Set wdapp = CreateObject("Word.application")

With wdapp
.Visible = True

'ouvrir le document
.Documents.Open "E:Visite.docx"

'Diriger le publipostage vers un nouveau document
.ActiveDocument.MailMerge.OpenDataSource Name:= _
"E:CDT.accdb" _
, ConfirmConversions:úlse, ReadOnly:úlse,
LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="",
PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="",
Revert:úlse, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID­min;Data Source=E:
CDT.accdb;Mode=Read;Extended Properties="""";Jet OLEDB:System
database="""";Jet OLEDB:Registry Pat" _
, SQLStatement:="SELECT * FROM `TableVisiteClassement`",
SQLStatement1:= _
"", SubType:=wdMergeSubTypeAccess

.ActiveDocument.MailMerge.Destination = wdSendToNewDocument
.ActiveDocument.MailMerge.Execute
.ActiveDocument.SaveAs FileName:="E:test.docx"
.ActiveDocument.Close
.ActiveDocument.Close

End With

'fermer et libérer les objets
wdapp.Quit
Set wdapp = Nothing


End Sub
Avatar
steph.theo
Merci Goupil ...

J'avais en effet utilisé une requete création de table ... mais au
sein de la même base de données et il se produisait parfois des
verrouillages ...

Je vais tester la suppression du message d'avertissement SQL.

Bon maintenant mon code marche avec :

Mais j'ai encore un petit soucis : c'est sur la fin ...
Je fusionne et ferme le document avec

objWord.MailMerge.Execute
objWord.Close savechanges:=wdDoNotSaveChanges

Est ce que je peut manipuler l'autre document en VBA c'est à dire
celui qui a été créé par la fusion ???

Merci



Private Sub CommandeLettreWord_Click()


'Confirmation
If MsgBox("Confirmer la création de la lettre", vbYesNo,
"Confirmation") <> vbYes Then Exit Sub

'Valide l'enregistrement en cours afin qu'il soit exporté lors de la
requete création
DoCmd.RunCommand acCmdSaveRecord

'Exécution de la requete création
DoCmd.SetWarnings False
DoCmd.OpenQuery "VisiteClassement"
DoCmd.SetWarnings True

'Ouverture du doc WORD
Dim objWord As Word.Document
Set objWord = GetObject("E:Visite.docx", "Word.Document")

' Rend Word visible important puisque la fusion se fait à l'écran.
objWord.Application.Visible = True

' Sélectionne la source de données pour la fusion

objWord.MailMerge.OpenDataSource _
Name:="E:Base.accdb", _
LinkToSource:=True, _
Connection:="TABLE ExportPublipostage", _
SQLStatement:="SELECT * FROM [ExportPublipostage]"

' Exécution de la fusion.
objWord.MailMerge.Destination = wdSendToNewDocument
objWord.MailMerge.Execute
objWord.Close savechanges:=wdDoNotSaveChanges

Set objWord = Nothing

End Sub