je souhaiterai pouvoir automatiser l'envoi de mails suite=20
=E0 un publipostage.
L'op=E9ration s'effectue bien la premiere fois mais si je=20
souhaite effectuer un deuxieme envoi de mail l'erreur 462=20
apparait: "Le serveur distant n'existe pas ou n'est pas=20
disponible"
ActiveDocument.MailMerge.DataSource.ActiveRecord =3D=20
wdLastRecord 'On se place sur le dernier enregistrement=20
du fichier de donn=E9es
nb =3D=20
ActiveDocument.MailMerge.DataSource.ActiveRecord 'Le=20
nombre d'enregistrements Nb est =E9gal au num=E9ro de=20
l'enregistrement actif, c'est =E0 dire le dernier
ActiveDocument.MailMerge.DataSource.ActiveRecord =3D=20
wdFirstRecord 'On se place sur le premier enregistrement=20
du fichier de donn=E9es
Numero =3D 1
ActiveDocument.MailMerge.EditMainDocument
Do While Numero <=3D nb 'D=E9but de la boucle de=20
construction du document principal
With ActiveDocument.MailMerge
.DataSource.ActiveRecord =3D Numero
End With
=20
With ActiveDocument.MailMerge 'Fusion des donn=E9es et=20
envoi de l'e-mail correspondant =E0 l'enregistrement en cours
.destination =3D wdSendToEmail
.MailAsAttachment =3D True 'Piece jointe ou dans le=20
mail
.MailAddressFieldName =3D "PERS_E_MAIL"
.MailSubject =3D "Edition de Courrier"
.SuppressBlankLines =3D False
With .DataSource
.FirstRecord =3D Numero
.LastRecord =3D Numero
End With
.Execute pause:=3DFalse
End With
Numero =3D Numero + 1 'On avance =E0 l'enregistrement=20
suivant dans la source de donn=E9es
Loop 'On retourne au d=E9but de la boucle pour la=20
construction et l'envoi d'un nouvel e-mail
'ActiveDocument.Close
Word.ActiveDocument.Close
Set WordObj =3D Nothing
-----------------------------------------------------
Sachant que l'erreur intervient lors du passage sur:
ActiveDocument.MailMerge.DataSource.ActiveRecord =3D=20
wdLastRecord
Que dois-je faire??
Merci d'avance pour vos r=E9ponses et conseils =E0 ce sujet
J'ai trouvé 3 anomalies dans votre code VBA qui pourraient être la cause de votre problème :
1. Au début du programme, vous réinitialisez la variable objet WordObj à Nothing, mais votre code VBA ne ferme jamais l'application Word. Donc chaque publipostage essaie de lancer une nouvelle instance de Word. Je vous conseille d'utiliser la méthode Quit pour forcer la fermeture de Word. Vous pouvez aussi laisser volontairement ouverte la première instance de Word. Dans ce cas vous devriez déclarer WordObj comme une variable globale, et vous ne devriez pas le réinitialiser systématiquement à Nothing ni exécuter Set WordObj = CreateObject("Word.Application") pour chaque nouvelle fusion.
2. A la fin de votre programme, vous écrivez : Word.ActiveDocument.Close La syntaxe correcte est : WordObj.ActiveDocument.Close
3. Dans le corps de votre programme, vous utilisez plusieurs fois la propriété ActiveDocument sans la faire précédér du nom de l'objet qui possède cette propriété : WordObj.
Benoît Compoint.
"fabrice" wrote in message news:030c01c39c71$00c824e0$ Bonjour,
je souhaiterai pouvoir automatiser l'envoi de mails suite à un publipostage. L'opération s'effectue bien la premiere fois mais si je souhaite effectuer un deuxieme envoi de mail l'erreur 462 apparait: "Le serveur distant n'existe pas ou n'est pas disponible"
ActiveDocument.MailMerge.DataSource.ActiveRecord wdLastRecord 'On se place sur le dernier enregistrement du fichier de données nb ActiveDocument.MailMerge.DataSource.ActiveRecord 'Le nombre d'enregistrements Nb est égal au numéro de l'enregistrement actif, c'est à dire le dernier ActiveDocument.MailMerge.DataSource.ActiveRecord wdFirstRecord 'On se place sur le premier enregistrement du fichier de données Numero = 1 ActiveDocument.MailMerge.EditMainDocument
Do While Numero <= nb 'Début de la boucle de construction du document principal With ActiveDocument.MailMerge .DataSource.ActiveRecord = Numero End With
With ActiveDocument.MailMerge 'Fusion des données et envoi de l'e-mail correspondant à l'enregistrement en cours .destination = wdSendToEmail .MailAsAttachment = True 'Piece jointe ou dans le mail .MailAddressFieldName = "PERS_E_MAIL" .MailSubject = "Edition de Courrier" .SuppressBlankLines = False With .DataSource .FirstRecord = Numero .LastRecord = Numero End With .Execute pause:úlse End With Numero = Numero + 1 'On avance à l'enregistrement suivant dans la source de données Loop 'On retourne au début de la boucle pour la construction et l'envoi d'un nouvel e-mail 'ActiveDocument.Close Word.ActiveDocument.Close Set WordObj = Nothing ----------------------------------------------------- Sachant que l'erreur intervient lors du passage sur: ActiveDocument.MailMerge.DataSource.ActiveRecord wdLastRecord
Que dois-je faire??
Merci d'avance pour vos réponses et conseils à ce sujet
Bonjour,
J'ai trouvé 3 anomalies dans votre code VBA qui pourraient être la cause de
votre problème :
1. Au début du programme, vous réinitialisez la variable objet WordObj à
Nothing,
mais votre code VBA ne ferme jamais l'application Word.
Donc chaque publipostage essaie de lancer une nouvelle instance de Word.
Je vous conseille d'utiliser la méthode Quit pour forcer la fermeture de
Word.
Vous pouvez aussi laisser volontairement ouverte la première instance de
Word.
Dans ce cas vous devriez déclarer WordObj comme une variable globale, et
vous ne devriez pas le réinitialiser systématiquement à Nothing ni exécuter
Set WordObj = CreateObject("Word.Application") pour chaque nouvelle fusion.
2. A la fin de votre programme, vous écrivez :
Word.ActiveDocument.Close
La syntaxe correcte est :
WordObj.ActiveDocument.Close
3. Dans le corps de votre programme, vous utilisez plusieurs fois la
propriété ActiveDocument sans la faire précédér du nom de l'objet qui
possède cette propriété : WordObj.
Benoît Compoint.
"fabrice" <fabbb@club-internet.fr> wrote in message
news:030c01c39c71$00c824e0$a001280a@phx.gbl...
Bonjour,
je souhaiterai pouvoir automatiser l'envoi de mails suite
à un publipostage.
L'opération s'effectue bien la premiere fois mais si je
souhaite effectuer un deuxieme envoi de mail l'erreur 462
apparait: "Le serveur distant n'existe pas ou n'est pas
disponible"
ActiveDocument.MailMerge.DataSource.ActiveRecord wdLastRecord 'On se place sur le dernier enregistrement
du fichier de données
nb ActiveDocument.MailMerge.DataSource.ActiveRecord 'Le
nombre d'enregistrements Nb est égal au numéro de
l'enregistrement actif, c'est à dire le dernier
ActiveDocument.MailMerge.DataSource.ActiveRecord wdFirstRecord 'On se place sur le premier enregistrement
du fichier de données
Numero = 1
ActiveDocument.MailMerge.EditMainDocument
Do While Numero <= nb 'Début de la boucle de
construction du document principal
With ActiveDocument.MailMerge
.DataSource.ActiveRecord = Numero
End With
With ActiveDocument.MailMerge 'Fusion des données et
envoi de l'e-mail correspondant à l'enregistrement en cours
.destination = wdSendToEmail
.MailAsAttachment = True 'Piece jointe ou dans le
mail
.MailAddressFieldName = "PERS_E_MAIL"
.MailSubject = "Edition de Courrier"
.SuppressBlankLines = False
With .DataSource
.FirstRecord = Numero
.LastRecord = Numero
End With
.Execute pause:úlse
End With
Numero = Numero + 1 'On avance à l'enregistrement
suivant dans la source de données
Loop 'On retourne au début de la boucle pour la
construction et l'envoi d'un nouvel e-mail
'ActiveDocument.Close
Word.ActiveDocument.Close
Set WordObj = Nothing
-----------------------------------------------------
Sachant que l'erreur intervient lors du passage sur:
ActiveDocument.MailMerge.DataSource.ActiveRecord wdLastRecord
Que dois-je faire??
Merci d'avance pour vos réponses et conseils à ce sujet
J'ai trouvé 3 anomalies dans votre code VBA qui pourraient être la cause de votre problème :
1. Au début du programme, vous réinitialisez la variable objet WordObj à Nothing, mais votre code VBA ne ferme jamais l'application Word. Donc chaque publipostage essaie de lancer une nouvelle instance de Word. Je vous conseille d'utiliser la méthode Quit pour forcer la fermeture de Word. Vous pouvez aussi laisser volontairement ouverte la première instance de Word. Dans ce cas vous devriez déclarer WordObj comme une variable globale, et vous ne devriez pas le réinitialiser systématiquement à Nothing ni exécuter Set WordObj = CreateObject("Word.Application") pour chaque nouvelle fusion.
2. A la fin de votre programme, vous écrivez : Word.ActiveDocument.Close La syntaxe correcte est : WordObj.ActiveDocument.Close
3. Dans le corps de votre programme, vous utilisez plusieurs fois la propriété ActiveDocument sans la faire précédér du nom de l'objet qui possède cette propriété : WordObj.
Benoît Compoint.
"fabrice" wrote in message news:030c01c39c71$00c824e0$ Bonjour,
je souhaiterai pouvoir automatiser l'envoi de mails suite à un publipostage. L'opération s'effectue bien la premiere fois mais si je souhaite effectuer un deuxieme envoi de mail l'erreur 462 apparait: "Le serveur distant n'existe pas ou n'est pas disponible"
ActiveDocument.MailMerge.DataSource.ActiveRecord wdLastRecord 'On se place sur le dernier enregistrement du fichier de données nb ActiveDocument.MailMerge.DataSource.ActiveRecord 'Le nombre d'enregistrements Nb est égal au numéro de l'enregistrement actif, c'est à dire le dernier ActiveDocument.MailMerge.DataSource.ActiveRecord wdFirstRecord 'On se place sur le premier enregistrement du fichier de données Numero = 1 ActiveDocument.MailMerge.EditMainDocument
Do While Numero <= nb 'Début de la boucle de construction du document principal With ActiveDocument.MailMerge .DataSource.ActiveRecord = Numero End With
With ActiveDocument.MailMerge 'Fusion des données et envoi de l'e-mail correspondant à l'enregistrement en cours .destination = wdSendToEmail .MailAsAttachment = True 'Piece jointe ou dans le mail .MailAddressFieldName = "PERS_E_MAIL" .MailSubject = "Edition de Courrier" .SuppressBlankLines = False With .DataSource .FirstRecord = Numero .LastRecord = Numero End With .Execute pause:úlse End With Numero = Numero + 1 'On avance à l'enregistrement suivant dans la source de données Loop 'On retourne au début de la boucle pour la construction et l'envoi d'un nouvel e-mail 'ActiveDocument.Close Word.ActiveDocument.Close Set WordObj = Nothing ----------------------------------------------------- Sachant que l'erreur intervient lors du passage sur: ActiveDocument.MailMerge.DataSource.ActiveRecord wdLastRecord
Que dois-je faire??
Merci d'avance pour vos réponses et conseils à ce sujet
fabrice
Tout d'abord,je tiens à vous remercier pour avoir répondu à mon problème dans un tres bref délai puisque j'ai pu avoir une proposition à mon soucis dans la journée. De plus,vous avez corrigé mon probleme par votre 3e proposition de résolution.En effet,il fallait faire précéder activedocument par wordobj. Pour rendre cela plus explicite pour les autres lecteurs,je joins le code corrigé:
Function fusion(lettre As String) 'envoi par outlook express avec la piece jointe Dim Texte As String Dim nb Dim Numero Dim WordObj As Word.Application
On Error GoTo err_fusion Texte = var_chemin_doc Set WordObj = Nothing Set WordObj = CreateObject("Word.Application") WordObj.Documents.Open (Texte & lettre & ".doc") WordObj.Visible = True
With WordObj .ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord 'On se place sur le dernier enregistrement du fichier de données nb = .ActiveDocument.MailMerge.DataSource.ActiveRecord 'Le nombre d'enregistrements Nb est égal au numéro de l'enregistrement actif, c'est à dire le dernier .ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord 'On se place sur le premier enregistrement du fichier de données Numero = 1 .ActiveDocument.MailMerge.EditMainDocument
Do While Numero <= nb 'Début de la boucle de construction du document principal With .ActiveDocument.MailMerge .DataSource.ActiveRecord = Numero End With
With .ActiveDocument.MailMerge 'Fusion des données et envoi de l'e-mail correspondant à l'enregistrement en cours .destination = wdSendToEmail .MailAsAttachment = True 'Piece jointe ou dans le mail .MailAddressFieldName = "PERS_E_MAIL" .MailSubject = "Edition de Courrier" .SuppressBlankLines = False With .DataSource .FirstRecord = Numero .LastRecord = Numero End With .Execute pause:úlse End With Numero = Numero + 1 'On avance à l'enregistrement suivant dans la source de données Loop 'On retourne au début de la boucle pour la construction et l'envoi d'un nouvel e-mail End With WordObj.Quit wdDoNotSaveChanges passage = 1 Exit Function
Merci encore pour votre aide.
Fabrice
Tout d'abord,je tiens à vous remercier pour avoir répondu
à mon problème dans un tres bref délai puisque j'ai pu
avoir une proposition à mon soucis dans la journée.
De plus,vous avez corrigé mon probleme par votre 3e
proposition de résolution.En effet,il fallait faire
précéder activedocument par wordobj.
Pour rendre cela plus explicite pour les autres
lecteurs,je joins le code corrigé:
Function fusion(lettre As String) 'envoi par outlook
express avec la piece jointe
Dim Texte As String
Dim nb
Dim Numero
Dim WordObj As Word.Application
On Error GoTo err_fusion
Texte = var_chemin_doc
Set WordObj = Nothing
Set WordObj = CreateObject("Word.Application")
WordObj.Documents.Open (Texte & lettre & ".doc")
WordObj.Visible = True
With WordObj
.ActiveDocument.MailMerge.DataSource.ActiveRecord =
wdLastRecord 'On se place sur le dernier enregistrement
du fichier de données
nb
= .ActiveDocument.MailMerge.DataSource.ActiveRecord 'Le
nombre d'enregistrements Nb est égal au numéro de
l'enregistrement actif, c'est à dire le dernier
.ActiveDocument.MailMerge.DataSource.ActiveRecord =
wdFirstRecord 'On se place sur le premier enregistrement
du fichier de données
Numero = 1
.ActiveDocument.MailMerge.EditMainDocument
Do While Numero <= nb 'Début de la boucle de
construction du document principal
With .ActiveDocument.MailMerge
.DataSource.ActiveRecord = Numero
End With
With .ActiveDocument.MailMerge 'Fusion des
données et envoi de l'e-mail correspondant à
l'enregistrement en cours
.destination = wdSendToEmail
.MailAsAttachment = True 'Piece jointe ou
dans le mail
.MailAddressFieldName = "PERS_E_MAIL"
.MailSubject = "Edition de Courrier"
.SuppressBlankLines = False
With .DataSource
.FirstRecord = Numero
.LastRecord = Numero
End With
.Execute pause:=False
End With
Numero = Numero + 1 'On avance à
l'enregistrement suivant dans la source de données
Loop 'On retourne au début de la boucle pour la
construction et l'envoi d'un nouvel e-mail
End With
WordObj.Quit wdDoNotSaveChanges
passage = 1
Exit Function
Tout d'abord,je tiens à vous remercier pour avoir répondu à mon problème dans un tres bref délai puisque j'ai pu avoir une proposition à mon soucis dans la journée. De plus,vous avez corrigé mon probleme par votre 3e proposition de résolution.En effet,il fallait faire précéder activedocument par wordobj. Pour rendre cela plus explicite pour les autres lecteurs,je joins le code corrigé:
Function fusion(lettre As String) 'envoi par outlook express avec la piece jointe Dim Texte As String Dim nb Dim Numero Dim WordObj As Word.Application
On Error GoTo err_fusion Texte = var_chemin_doc Set WordObj = Nothing Set WordObj = CreateObject("Word.Application") WordObj.Documents.Open (Texte & lettre & ".doc") WordObj.Visible = True
With WordObj .ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord 'On se place sur le dernier enregistrement du fichier de données nb = .ActiveDocument.MailMerge.DataSource.ActiveRecord 'Le nombre d'enregistrements Nb est égal au numéro de l'enregistrement actif, c'est à dire le dernier .ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord 'On se place sur le premier enregistrement du fichier de données Numero = 1 .ActiveDocument.MailMerge.EditMainDocument
Do While Numero <= nb 'Début de la boucle de construction du document principal With .ActiveDocument.MailMerge .DataSource.ActiveRecord = Numero End With
With .ActiveDocument.MailMerge 'Fusion des données et envoi de l'e-mail correspondant à l'enregistrement en cours .destination = wdSendToEmail .MailAsAttachment = True 'Piece jointe ou dans le mail .MailAddressFieldName = "PERS_E_MAIL" .MailSubject = "Edition de Courrier" .SuppressBlankLines = False With .DataSource .FirstRecord = Numero .LastRecord = Numero End With .Execute pause:úlse End With Numero = Numero + 1 'On avance à l'enregistrement suivant dans la source de données Loop 'On retourne au début de la boucle pour la construction et l'envoi d'un nouvel e-mail End With WordObj.Quit wdDoNotSaveChanges passage = 1 Exit Function