Lorsque je lance un publipostage via VBA depuis l'interface Excel sur un
Objet Word Application, ça marche parfaitement, mais qu'une fois.
Lors d'un deuxième essai (Excel restant ouvert), un message m'informe que le
serveur distant est inexistant ou n'est pas disponible.
En fait j'ai fermé l'accès à la source de données pour l'objet Word, mais
comme Excel reste actif, j'ai l'impression que lui ne coupe pas la liaison
ODBC qu'il a avec Word quand bien même que l'objet Word est fermé.
Voilà mon code.... Si quelqu'un peu m'aider, un grand merci
Private Sub CommandButton1_Click()
'Variable pour l'application Word
Dim WdObjet As Word.Application
'Gestion erreur si Word n'est pas ouvert
On Error GoTo Fin
'Déclaration de l'objet word déjà ouvert
Set WdObjet = GetObject("Word.Application")
'Remise de la procédure d'erreur en vigueur pour le reste du code
On Error GoTo 0
'Sélection de la feuille article
With WdObjet
'rend invisible l'ouverture de word
.Visible = True
.Documents.Open "C:\Temp\DocPrinPubli.doc"
'Crée la connexion avec la source de données
ActiveDocument.MailMerge.OpenDataSource
Name:="C:\Temp\BDClient.xls", _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="",
_
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False,
_
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data
Source=C:\Temp\BDClient.xls;Mode=Read;Extended
Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet
OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine
Type=35;Jet" _
, SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="",
SubType:= _
wdMergeSubTypeAccess
'Fusion vers un nouveau document
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
'Devrait fermer le lien avec la source de donnée
Documents("C:\Temp\DocPrinPubli.doc").MailMerge.DataSource.Close
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gloops
Hello,
Vu l'heure je ne vais pas m'éterniser, mais il y un truc qui m'intrigue, c'est qu'il n'y a pas de point devant Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Si je ne m'abuse cette macro tourne sous Excel, donc on cherche un objet Documents dans Excel, il n'existe pas. La procédure d'erreur consiste simplement à réouvrir Word. Il pourrait être intéressant d'écrire une procédure d'erreur plus évoluée qui affiche le numéro d'erreur, et ouvre Word si le numéro d'erreur correspond à application non ouverte. En mettant un stop dans la procédure d'erreur on peut débuguer tranquillement, surtout si la procédure d'erreur se termine par Resume Next et qu'on continue en pas à pas. Une fois qu'on a corrigé on retire le Resume Next, parce qu'il n'a lieu d'être qu'en phase de débuguage.
En mettant un point devant l'instruction citée ci-dessus, l'objet Documents se référera à With wdObject, ce qui me paraît plus orthodoxe.
Pas le temps de regarder si il y en a d'autres comme ça, surtout que le manque d'indentations rendent difficile la distinction entre les propriétés et méthodes de wdObject et les arguments de OpenDataSource. __________________________________ Pap a écrit, le 06/10/2004 17:15 :
Hello,
Lorsque je lance un publipostage via VBA depuis l'interface Excel sur un Objet Word Application, ça marche parfaitement, mais qu'une fois.
Lors d'un deuxième essai (Excel restant ouvert), un message m'informe que le serveur distant est inexistant ou n'est pas disponible.
En fait j'ai fermé l'accès à la source de données pour l'objet Word, mais comme Excel reste actif, j'ai l'impression que lui ne coupe pas la liaison ODBC qu'il a avec Word quand bien même que l'objet Word est fermé.
Voilà mon code.... Si quelqu'un peu m'aider, un grand merci
Private Sub CommandButton1_Click() 'Variable pour l'application Word Dim WdObjet As Word.Application 'Gestion erreur si Word n'est pas ouvert On Error GoTo Fin 'Déclaration de l'objet word déjà ouvert Set WdObjet = GetObject("Word.Application") 'Remise de la procédure d'erreur en vigueur pour le reste du code On Error GoTo 0 'Sélection de la feuille article With WdObjet 'rend invisible l'ouverture de word .Visible = True .Documents.Open "C:TempDocPrinPubli.doc" 'Crée la connexion avec la source de données ActiveDocument.MailMerge.OpenDataSource Name:="C:TempBDClient.xls", _ ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _ AddToRecentFiles:úlse, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:úlse, _ Format:=wdOpenFormatAuto, Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User IDmin;Data Source=C:TempBDClient.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type5;Jet" _ , SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _ wdMergeSubTypeAccess 'Fusion vers un nouveau document With ActiveDocument.MailMerge .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Execute Pause:úlse End With 'Devrait fermer le lien avec la source de donnée Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Set WdObjet = Nothing 'Sélectionne la feuille Menu
Exit Sub Fin: Set WdObjet = CreateObject("Word.application") Resume Next
End Sub
Hello,
Vu l'heure je ne vais pas m'éterniser, mais il y un truc qui m'intrigue,
c'est qu'il n'y a pas de point devant
Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Si je ne m'abuse cette macro tourne sous Excel, donc on cherche un objet
Documents dans Excel, il n'existe pas. La procédure d'erreur consiste
simplement à réouvrir Word. Il pourrait être intéressant d'écrire une
procédure d'erreur plus évoluée qui affiche le numéro d'erreur, et ouvre
Word si le numéro d'erreur correspond à application non ouverte. En
mettant un stop dans la procédure d'erreur on peut débuguer
tranquillement, surtout si la procédure d'erreur se termine par Resume
Next et qu'on continue en pas à pas. Une fois qu'on a corrigé on retire
le Resume Next, parce qu'il n'a lieu d'être qu'en phase de débuguage.
En mettant un point devant l'instruction citée ci-dessus, l'objet
Documents se référera à With wdObject, ce qui me paraît plus orthodoxe.
Pas le temps de regarder si il y en a d'autres comme ça, surtout que le
manque d'indentations rendent difficile la distinction entre les
propriétés et méthodes de wdObject et les arguments de OpenDataSource.
__________________________________
Pap a écrit, le 06/10/2004 17:15 :
Hello,
Lorsque je lance un publipostage via VBA depuis l'interface Excel sur un
Objet Word Application, ça marche parfaitement, mais qu'une fois.
Lors d'un deuxième essai (Excel restant ouvert), un message m'informe que le
serveur distant est inexistant ou n'est pas disponible.
En fait j'ai fermé l'accès à la source de données pour l'objet Word, mais
comme Excel reste actif, j'ai l'impression que lui ne coupe pas la liaison
ODBC qu'il a avec Word quand bien même que l'objet Word est fermé.
Voilà mon code.... Si quelqu'un peu m'aider, un grand merci
Private Sub CommandButton1_Click()
'Variable pour l'application Word
Dim WdObjet As Word.Application
'Gestion erreur si Word n'est pas ouvert
On Error GoTo Fin
'Déclaration de l'objet word déjà ouvert
Set WdObjet = GetObject("Word.Application")
'Remise de la procédure d'erreur en vigueur pour le reste du code
On Error GoTo 0
'Sélection de la feuille article
With WdObjet
'rend invisible l'ouverture de word
.Visible = True
.Documents.Open "C:TempDocPrinPubli.doc"
'Crée la connexion avec la source de données
ActiveDocument.MailMerge.OpenDataSource
Name:="C:TempBDClient.xls", _
ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="", PasswordTemplate:="",
_
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:úlse,
_
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User IDmin;Data
Source=C:TempBDClient.xls;Mode=Read;Extended
Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet
OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine
Type5;Jet" _
, SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="",
SubType:= _
wdMergeSubTypeAccess
'Fusion vers un nouveau document
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:úlse
End With
'Devrait fermer le lien avec la source de donnée
Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Vu l'heure je ne vais pas m'éterniser, mais il y un truc qui m'intrigue, c'est qu'il n'y a pas de point devant Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Si je ne m'abuse cette macro tourne sous Excel, donc on cherche un objet Documents dans Excel, il n'existe pas. La procédure d'erreur consiste simplement à réouvrir Word. Il pourrait être intéressant d'écrire une procédure d'erreur plus évoluée qui affiche le numéro d'erreur, et ouvre Word si le numéro d'erreur correspond à application non ouverte. En mettant un stop dans la procédure d'erreur on peut débuguer tranquillement, surtout si la procédure d'erreur se termine par Resume Next et qu'on continue en pas à pas. Une fois qu'on a corrigé on retire le Resume Next, parce qu'il n'a lieu d'être qu'en phase de débuguage.
En mettant un point devant l'instruction citée ci-dessus, l'objet Documents se référera à With wdObject, ce qui me paraît plus orthodoxe.
Pas le temps de regarder si il y en a d'autres comme ça, surtout que le manque d'indentations rendent difficile la distinction entre les propriétés et méthodes de wdObject et les arguments de OpenDataSource. __________________________________ Pap a écrit, le 06/10/2004 17:15 :
Hello,
Lorsque je lance un publipostage via VBA depuis l'interface Excel sur un Objet Word Application, ça marche parfaitement, mais qu'une fois.
Lors d'un deuxième essai (Excel restant ouvert), un message m'informe que le serveur distant est inexistant ou n'est pas disponible.
En fait j'ai fermé l'accès à la source de données pour l'objet Word, mais comme Excel reste actif, j'ai l'impression que lui ne coupe pas la liaison ODBC qu'il a avec Word quand bien même que l'objet Word est fermé.
Voilà mon code.... Si quelqu'un peu m'aider, un grand merci
Private Sub CommandButton1_Click() 'Variable pour l'application Word Dim WdObjet As Word.Application 'Gestion erreur si Word n'est pas ouvert On Error GoTo Fin 'Déclaration de l'objet word déjà ouvert Set WdObjet = GetObject("Word.Application") 'Remise de la procédure d'erreur en vigueur pour le reste du code On Error GoTo 0 'Sélection de la feuille article With WdObjet 'rend invisible l'ouverture de word .Visible = True .Documents.Open "C:TempDocPrinPubli.doc" 'Crée la connexion avec la source de données ActiveDocument.MailMerge.OpenDataSource Name:="C:TempBDClient.xls", _ ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _ AddToRecentFiles:úlse, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:úlse, _ Format:=wdOpenFormatAuto, Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User IDmin;Data Source=C:TempBDClient.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type5;Jet" _ , SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _ wdMergeSubTypeAccess 'Fusion vers un nouveau document With ActiveDocument.MailMerge .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Execute Pause:úlse End With 'Devrait fermer le lien avec la source de donnée Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Je disais bien qu'il était temps que j'arrête ... _____________________________________ Gloops a écrit, le 12/10/2004 02:24 :
Pas le temps de regarder si il y en a d'autres comme ça, surtout que le manque d'indentations rendent difficile la distinction entre les
*******
propriétés et méthodes de wdObject et les arguments de OpenDataSource.
Gloops
De plus en plus gag. C'est "le manque rendent", qui me paraît bizarre. Mais les coupures de lignes ne se faisaient pas où je croyais. Bref. _____________________________________ Gloops a écrit, le 12/10/2004 02:33 :
Je disais bien qu'il était temps que j'arrête ... _____________________________________ Gloops a écrit, le 12/10/2004 02:24 :
Pas le temps de regarder si il y en a d'autres comme ça, surtout que le manque d'indentations rendent difficile la distinction entre les
*******
propriétés et méthodes de wdObject et les arguments de OpenDataSource.
De plus en plus gag.
C'est "le manque rendent", qui me paraît bizarre.
Mais les coupures de lignes ne se faisaient pas où je croyais. Bref.
_____________________________________
Gloops a écrit, le 12/10/2004 02:33 :
Je disais bien qu'il était temps que j'arrête ...
_____________________________________
Gloops a écrit, le 12/10/2004 02:24 :
Pas le temps de regarder si il y en a d'autres comme ça, surtout que
le manque d'indentations rendent difficile la distinction entre les
*******
propriétés et méthodes de wdObject et les arguments de OpenDataSource.
De plus en plus gag. C'est "le manque rendent", qui me paraît bizarre. Mais les coupures de lignes ne se faisaient pas où je croyais. Bref. _____________________________________ Gloops a écrit, le 12/10/2004 02:33 :
Je disais bien qu'il était temps que j'arrête ... _____________________________________ Gloops a écrit, le 12/10/2004 02:24 :
Pas le temps de regarder si il y en a d'autres comme ça, surtout que le manque d'indentations rendent difficile la distinction entre les
*******
propriétés et méthodes de wdObject et les arguments de OpenDataSource.
Gloops
Bon, d'accord, j'ai court-circuité "On Error Goto 0". N'empêche, ça serait bien de s'intéresser à cette histoire de point.
Gloops a écrit, le 12/10/2004 02:24 :
Hello,
Vu l'heure je ne vais pas m'éterniser, mais il y un truc qui m'intrigue, c'est qu'il n'y a pas de point devant Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Si je ne m'abuse cette macro tourne sous Excel, donc on cherche un objet Documents dans Excel, il n'existe pas. La procédure d'erreur consiste simplement à réouvrir Word. Il pourrait être intéressant d'écrire une procédure d'erreur plus évoluée qui affiche le numéro d'erreur, et ouvre Word si le numéro d'erreur correspond à application non ouverte. En mettant un stop dans la procédure d'erreur on peut débuguer tranquillement, surtout si la procédure d'erreur se termine par Resume Next et qu'on continue en pas à pas. Une fois qu'on a corrigé on retire le Resume Next, parce qu'il n'a lieu d'être qu'en phase de débuguage.
En mettant un point devant l'instruction citée ci-dessus, l'objet Documents se référera à With wdObject, ce qui me paraît plus orthodoxe.
Pas le temps de regarder si il y en a d'autres comme ça, surtout que le manque d'indentations rendent difficile la distinction entre les propriétés et méthodes de wdObject et les arguments de OpenDataSource. __________________________________ Pap a écrit, le 06/10/2004 17:15 :
Hello,
Lorsque je lance un publipostage via VBA depuis l'interface Excel sur un Objet Word Application, ça marche parfaitement, mais qu'une fois.
Lors d'un deuxième essai (Excel restant ouvert), un message m'informe que le serveur distant est inexistant ou n'est pas disponible.
En fait j'ai fermé l'accès à la source de données pour l'objet Word, mais comme Excel reste actif, j'ai l'impression que lui ne coupe pas la liaison ODBC qu'il a avec Word quand bien même que l'objet Word est fermé.
Voilà mon code.... Si quelqu'un peu m'aider, un grand merci
Private Sub CommandButton1_Click() 'Variable pour l'application Word Dim WdObjet As Word.Application 'Gestion erreur si Word n'est pas ouvert On Error GoTo Fin 'Déclaration de l'objet word déjà ouvert Set WdObjet = GetObject("Word.Application") 'Remise de la procédure d'erreur en vigueur pour le reste du code On Error GoTo 0 'Sélection de la feuille article With WdObjet 'rend invisible l'ouverture de word .Visible = True .Documents.Open "C:TempDocPrinPubli.doc" 'Crée la connexion avec la source de données ActiveDocument.MailMerge.OpenDataSource Name:="C:TempBDClient.xls", _ ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _ AddToRecentFiles:úlse, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:úlse, _ Format:=wdOpenFormatAuto, Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User IDmin;Data Source=C:TempBDClient.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type5;Jet" _ , SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _ wdMergeSubTypeAccess 'Fusion vers un nouveau document With ActiveDocument.MailMerge .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Execute Pause:úlse End With 'Devrait fermer le lien avec la source de donnée Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Set WdObjet = Nothing 'Sélectionne la feuille Menu
Exit Sub Fin: Set WdObjet = CreateObject("Word.application") Resume Next
End Sub
Bon, d'accord, j'ai court-circuité "On Error Goto 0".
N'empêche, ça serait bien de s'intéresser à cette histoire de point.
Gloops a écrit, le 12/10/2004 02:24 :
Hello,
Vu l'heure je ne vais pas m'éterniser, mais il y un truc qui m'intrigue,
c'est qu'il n'y a pas de point devant
Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Si je ne m'abuse cette macro tourne sous Excel, donc on cherche un objet
Documents dans Excel, il n'existe pas. La procédure d'erreur consiste
simplement à réouvrir Word. Il pourrait être intéressant d'écrire une
procédure d'erreur plus évoluée qui affiche le numéro d'erreur, et ouvre
Word si le numéro d'erreur correspond à application non ouverte. En
mettant un stop dans la procédure d'erreur on peut débuguer
tranquillement, surtout si la procédure d'erreur se termine par Resume
Next et qu'on continue en pas à pas. Une fois qu'on a corrigé on retire
le Resume Next, parce qu'il n'a lieu d'être qu'en phase de débuguage.
En mettant un point devant l'instruction citée ci-dessus, l'objet
Documents se référera à With wdObject, ce qui me paraît plus orthodoxe.
Pas le temps de regarder si il y en a d'autres comme ça, surtout que le
manque d'indentations rendent difficile la distinction entre les
propriétés et méthodes de wdObject et les arguments de OpenDataSource.
__________________________________
Pap a écrit, le 06/10/2004 17:15 :
Hello,
Lorsque je lance un publipostage via VBA depuis l'interface Excel sur un
Objet Word Application, ça marche parfaitement, mais qu'une fois.
Lors d'un deuxième essai (Excel restant ouvert), un message m'informe
que le
serveur distant est inexistant ou n'est pas disponible.
En fait j'ai fermé l'accès à la source de données pour l'objet Word, mais
comme Excel reste actif, j'ai l'impression que lui ne coupe pas la
liaison
ODBC qu'il a avec Word quand bien même que l'objet Word est fermé.
Voilà mon code.... Si quelqu'un peu m'aider, un grand merci
Private Sub CommandButton1_Click()
'Variable pour l'application Word
Dim WdObjet As Word.Application
'Gestion erreur si Word n'est pas ouvert
On Error GoTo Fin
'Déclaration de l'objet word déjà ouvert
Set WdObjet = GetObject("Word.Application")
'Remise de la procédure d'erreur en vigueur pour le reste du code
On Error GoTo 0
'Sélection de la feuille article
With WdObjet
'rend invisible l'ouverture de word
.Visible = True
.Documents.Open "C:TempDocPrinPubli.doc"
'Crée la connexion avec la source de données
ActiveDocument.MailMerge.OpenDataSource
Name:="C:TempBDClient.xls", _
ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="",
PasswordTemplate:="",
_
WritePasswordDocument:="", WritePasswordTemplate:="",
Revert:úlse,
_
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User
IDmin;Data
Source=C:TempBDClient.xls;Mode=Read;Extended
Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet
OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet
OLEDB:Engine
Type5;Jet" _
, SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="",
SubType:= _
wdMergeSubTypeAccess
'Fusion vers un nouveau document
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:úlse
End With
'Devrait fermer le lien avec la source de donnée
Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Bon, d'accord, j'ai court-circuité "On Error Goto 0". N'empêche, ça serait bien de s'intéresser à cette histoire de point.
Gloops a écrit, le 12/10/2004 02:24 :
Hello,
Vu l'heure je ne vais pas m'éterniser, mais il y un truc qui m'intrigue, c'est qu'il n'y a pas de point devant Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close
Si je ne m'abuse cette macro tourne sous Excel, donc on cherche un objet Documents dans Excel, il n'existe pas. La procédure d'erreur consiste simplement à réouvrir Word. Il pourrait être intéressant d'écrire une procédure d'erreur plus évoluée qui affiche le numéro d'erreur, et ouvre Word si le numéro d'erreur correspond à application non ouverte. En mettant un stop dans la procédure d'erreur on peut débuguer tranquillement, surtout si la procédure d'erreur se termine par Resume Next et qu'on continue en pas à pas. Une fois qu'on a corrigé on retire le Resume Next, parce qu'il n'a lieu d'être qu'en phase de débuguage.
En mettant un point devant l'instruction citée ci-dessus, l'objet Documents se référera à With wdObject, ce qui me paraît plus orthodoxe.
Pas le temps de regarder si il y en a d'autres comme ça, surtout que le manque d'indentations rendent difficile la distinction entre les propriétés et méthodes de wdObject et les arguments de OpenDataSource. __________________________________ Pap a écrit, le 06/10/2004 17:15 :
Hello,
Lorsque je lance un publipostage via VBA depuis l'interface Excel sur un Objet Word Application, ça marche parfaitement, mais qu'une fois.
Lors d'un deuxième essai (Excel restant ouvert), un message m'informe que le serveur distant est inexistant ou n'est pas disponible.
En fait j'ai fermé l'accès à la source de données pour l'objet Word, mais comme Excel reste actif, j'ai l'impression que lui ne coupe pas la liaison ODBC qu'il a avec Word quand bien même que l'objet Word est fermé.
Voilà mon code.... Si quelqu'un peu m'aider, un grand merci
Private Sub CommandButton1_Click() 'Variable pour l'application Word Dim WdObjet As Word.Application 'Gestion erreur si Word n'est pas ouvert On Error GoTo Fin 'Déclaration de l'objet word déjà ouvert Set WdObjet = GetObject("Word.Application") 'Remise de la procédure d'erreur en vigueur pour le reste du code On Error GoTo 0 'Sélection de la feuille article With WdObjet 'rend invisible l'ouverture de word .Visible = True .Documents.Open "C:TempDocPrinPubli.doc" 'Crée la connexion avec la source de données ActiveDocument.MailMerge.OpenDataSource Name:="C:TempBDClient.xls", _ ConfirmConversions:úlse, ReadOnly:úlse, LinkToSource:=True, _ AddToRecentFiles:úlse, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:úlse, _ Format:=wdOpenFormatAuto, Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User IDmin;Data Source=C:TempBDClient.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type5;Jet" _ , SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _ wdMergeSubTypeAccess 'Fusion vers un nouveau document With ActiveDocument.MailMerge .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Execute Pause:úlse End With 'Devrait fermer le lien avec la source de donnée Documents("C:TempDocPrinPubli.doc").MailMerge.DataSource.Close