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

macro publipostage

22 réponses
Avatar
gup
Bonjour,

Dans un fichier excel, j'ai plusieurs zone nommées. Ces zones servent de
source pour des publipostage de document word. Les documents word
possèdent déjà les champs de fusion, ainsi que la source de données.
Dans le fichier Excel, je souhaite en cliquant sur un bouton, lancer
automatiquement la fusion du document word vers l'imprimante.
Lorsque j'ouvre manuellement le document word, et que je lance la
fusion, tout marche.

Lorsque je clique sur mon bouton depuis le fichier excel, word s'ouvre,
mais la fusion du document ne se fait pas, tout est très long, et fini
par bloquer.

Je suis sous Office 2000.

Quelqu'un pourrait m'expliquer comment faire ceci s'il vous plait ?

Cordialement

10 réponses

1 2 3
Avatar
Daniel.C
> Si le fichier word est long à s'ouvrir (environ 1 minute), c'est parce que je
l'ouvre dans ma macro avant, et qu'il ne doit pas être fini de fermer
(vérifié en commentant la partie avant l'ouverture de word). Comment puis-je
attendre la fermeture complète du classeur source de publipostage et démarrer
seulement après l'ouverture du document word s'il vous plait ?



Pourquoi le fermes-tu si tu dois le rouvrir ?


Le lancement de la fusion vers l'imprimante est très long (de l'ordre d'une
minute). De quoi cela pourrait-il venir s'il vous plait ?



Y a-t-il une différence quand tu lances la fusion manuellement ? Ou par
macro depuis Word ?

Daniel
Avatar
gup
Daniel.C wrote:
Si le fichier word est long à s'ouvrir (environ 1 minute), c'est parce
que je l'ouvre dans ma macro avant, et qu'il ne doit pas être fini de
fermer (vérifié en commentant la partie avant l'ouverture de word).
Comment puis-je attendre la fermeture complète du classeur source de
publipostage et démarrer seulement après l'ouverture du document word
s'il vous plait ?



Pourquoi le fermes-tu si tu dois le rouvrir ?




Je l'ouvre depuis excel, pour le remplir, puis le referme. Au moment ou
j'ouvre le document word, il se rouvre tout seul.


Le lancement de la fusion vers l'imprimante est très long (de l'ordre
d'une minute). De quoi cela pourrait-il venir s'il vous plait ?



Y a-t-il une différence quand tu lances la fusion manuellement ? Ou par
macro depuis Word ?



Lorsque je lance la macro word depuis word, tout est très rapide, ca
sort directement à l'imprimante.
Avatar
Daniel.C
> Daniel.C wrote:
Si le fichier word est long à s'ouvrir (environ 1 minute), c'est parce que
je l'ouvre dans ma macro avant, et qu'il ne doit pas être fini de fermer
(vérifié en commentant la partie avant l'ouverture de word). Comment
puis-je attendre la fermeture complète du classeur source de publipostage
et démarrer seulement après l'ouverture du document word s'il vous plait ?



Pourquoi le fermes-tu si tu dois le rouvrir ?




Je l'ouvre depuis excel, pour le remplir, puis le referme. Au moment ou
j'ouvre le document word, il se rouvre tout seul.




Je ne suis pas sûr de comprendre...


Le lancement de la fusion vers l'imprimante est très long (de l'ordre
d'une minute). De quoi cela pourrait-il venir s'il vous plait ?



Y a-t-il une différence quand tu lances la fusion manuellement ? Ou par
macro depuis Word ?



Lorsque je lance la macro word depuis word, tout est très rapide, ca sort
directement à l'imprimante.



Peux-tu poster le code de la macro Word ?

Daniel
Avatar
gup
Voici le code de la macro word.


With ActiveDocument.MailMerge
.OpenDataSource Name:="G:Source.xls" _
, ConfirmConversions:úlse, ReadOnly:úlse,
LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="",
PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="",
Revert:úlse, _
Format:=wdOpenFormatAuto, Connection:="Publipostage_Convoc", _
SQLStatement:="", SQLStatement1:=""
.DataSource.QueryString = _
"SELECT * FROM G:Source.xls WHERE ((Dossier <> ''))" & ""
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True

With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="",
PageType:=wdPrintAllPages, _
Collate:=True, Background:=True, PrintToFile:úlse,
PrintZoomColumn:=0, _
PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
ActiveWindow.Close
Avatar
Daniel.C
> Voici le code de la macro word.


With ActiveDocument.MailMerge
.OpenDataSource Name:="G:Source.xls" _
, ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="", PasswordTemplate:="",
_
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:úlse,
_
Format:=wdOpenFormatAuto, Connection:="Publipostage_Convoc", _
SQLStatement:="", SQLStatement1:=""
.DataSource.QueryString = _
"SELECT * FROM G:Source.xls WHERE ((Dossier <> ''))" & ""
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True

With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="",
PageType:=wdPrintAllPages, _
Collate:=True, Background:=True, PrintToFile:úlse,
PrintZoomColumn:=0, _
PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
ActiveWindow.Close



Bonjour.

Visiblement, c'est la liaison Excel/Word qui ralentit l'exécution. Je
te propose pour commencer d'essayer de ne pas fermer le document Word
dans la première macro. J'ai modifié le code de la macro postée par
michdenis pour prendre en compte cette modification :

Sub Test()
Dim Wd As Object
Dim Dc As Object
Dim MaMacro As String
Dim Chemin As String
Dim Fichier As String

Chemin = "G:"
Fichier = "Convocation.doc"

Set Wd = GetObject(, "Word.Application")
Wd.Visible = True

If Dir(Chemin & Fichier) <> "" Then
Set Dc = Wd.Documents(Fichier)
Dc.Activate
Else
MsgBox "Fichier introuvable"
Exit Sub
End If

MaMacro = "'" & Fichier & "'!publi"
Wd.Run MaMacro

Dc.Close False
Wd.Quit
Set Dc = Nothing: Set Wd = Nothing
End Sub

Si tu es d'accord, j'essaierai de trouver un moyen de démarrer le
publipostage une fois la liaison Excel/Word interrompue.
Une autre approche serait d'exécuter la macro Word au démarrage du
document.
Daniel
Avatar
Daniel.C
Essaie également - je ne peux pas le tester - le document Word étant
ouvert :

Sub Test()
Dim Wd As Object
Dim Dc As Object
Dim MaMacro As String
Dim Chemin As String
Dim Fichier As String

Chemin = "G:"
Fichier = "Convocation.doc"

Set Wd = GetObject(, "Word.Application")
Wd.Visible = True

If Dir(Chemin & Fichier) <> "" Then
Set Dc = Wd.Documents(Fichier)
Dc.Activate
Else
MsgBox "Fichier introuvable"
Exit Sub
End If

With Dc.MailMerge
.OpenDataSource Name:="G:Source.xls" _
, ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="",
PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="",
Revert:úlse, _
Format:=wdOpenFormatAuto, Connection:="Publipostage_Convoc", _
SQLStatement:="", SQLStatement1:=""
.DataSource.QueryString = _
"SELECT * FROM G:Source.xls WHERE ((Dossier <> ''))" & ""
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True

With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
Wd.PrintOut Filename:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="",
PageType:=wdPrintAllPages, _
Collate:=True, Background:=True, PrintToFile:úlse,
PrintZoomColumn:=0, _
PrintZoomRow:=0, PrintZoomPaperWidth:=0,
PrintZoomPaperHeight:=0
Wd.ActiveWindow.Close
Dc.Close False
Wd.Quit
Set Dc = Nothing: Set Wd = Nothing
End Sub

Daniel


Voici le code de la macro word.


With ActiveDocument.MailMerge
.OpenDataSource Name:="G:Source.xls" _
, ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="", PasswordTemplate:="",
_
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:úlse,
_
Format:=wdOpenFormatAuto, Connection:="Publipostage_Convoc", _
SQLStatement:="", SQLStatement1:=""
.DataSource.QueryString = _
"SELECT * FROM G:Source.xls WHERE ((Dossier <> ''))" & ""
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True

With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="",
PageType:=wdPrintAllPages, _
Collate:=True, Background:=True, PrintToFile:úlse,
PrintZoomColumn:=0, _
PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
ActiveWindow.Close


Avatar
gup
> Sub Test()
Dim Wd As Object
Dim Dc As Object
Dim MaMacro As String
Dim Chemin As String
Dim Fichier As String

Chemin = "G:"
Fichier = "Convocation.doc"




Il faut ici avoir toujours une fenetre word ouverte. Ceci n'est pas génant.

Set Wd = GetObject(, "Word.Application")



Wd.Visible = True

If Dir(Chemin & Fichier) <> "" Then



Ici, l'instruction sans Open ne fonctionne pas chez moi. Mauvais
paramètre, même si je rajoute le chemin.

Set Dc = Wd.Documents(Fichier)
Dc.Activate
Else
MsgBox "Fichier introuvable"
Exit Sub
End If

MaMacro = "'" & Fichier & "'!publi"



Le chargement du fichier source du publipostage est très long.

Wd.Run MaMacro

Dc.Close False
Wd.Quit
Set Dc = Nothing: Set Wd = Nothing
End Sub

Si tu es d'accord, j'essaierai de trouver un moyen de démarrer le
publipostage une fois la liaison Excel/Word interrompue.



Pas de souci. Je suis d'accord pour tout essayer. Merci à toi de m'aider.

Une autre approche serait d'exécuter la macro Word au démarrage du
document.



J'essaie ca.
Avatar
gup
En mettant la macro word à l'ouverture du document, si j'ouvre
manuellement le document, pas de souci, très rapide. Si j'ouvre avec ma
macro Excel, même résultat, très long.
Avatar
gup
Daniel.C wrote:
Essaie également - je ne peux pas le tester - le document Word étant
ouvert :

Sub Test()
Dim Wd As Object
Dim Dc As Object
Dim MaMacro As String
Dim Chemin As String
Dim Fichier As String

Chemin = "G:"
Fichier = "Convocation.doc"

Set Wd = GetObject(, "Word.Application")
Wd.Visible = True

If Dir(Chemin & Fichier) <> "" Then
Set Dc = Wd.Documents(Fichier)
Dc.Activate
Else
MsgBox "Fichier introuvable"
Exit Sub
End If

With Dc.MailMerge
.OpenDataSource Name:="G:Source.xls" _
, ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:úlse, _
Format:=wdOpenFormatAuto, Connection:="Publipostage_Convoc", _
SQLStatement:="", SQLStatement1:=""
.DataSource.QueryString = _
"SELECT * FROM G:Source.xls WHERE ((Dossier <> ''))" & ""
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True

With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
Wd.PrintOut Filename:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="",
PageType:=wdPrintAllPages, _
Collate:=True, Background:=True, PrintToFile:úlse,
PrintZoomColumn:=0, _
PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
Wd.ActiveWindow.Close
Dc.Close False
Wd.Quit
Set Dc = Nothing: Set Wd = Nothing
End Sub

Daniel




J'ai déjà essayé de mettre le contenu de la macro word dans la macro
Excel, mais sans succès, le même résultat.
Avatar
Daniel.C
> Ici, l'instruction sans Open ne fonctionne pas chez moi. Mauvais paramètre,
même si je rajoute le chemin.

Set Dc = Wd.Documents(Fichier)
Dc.Activate





La macro suppose que le document Word est ouvert. J'avais cru
comprendre qu'il était fermé par une précédente macro et je te
proposais de ne pas le fermer.



Le chargement du fichier source du publipostage est très long.




On est d'accord, ici, rien de changé au niveau du publipostage.

Daniel
1 2 3