erreur 462 lors d'un publipostage : Word reste ouvert sur un fichier ?

lodam

XLDnaute Occasionnel
Bonsoir, Bonjour

Lors d'un publipostage, j'utilise un fichier excel CONTAINER.xlsm qui crée un fichier "Base de données" pour l'opération de publipostage : BDD_descriptif.xlsm
Ce dernier fichier donne les champs pour le publipostage dans un document WORD que je souhaite nommer Lettre_fusionnee.docx

Tout fonctionne très bien si dans le dossier de destination du publipostage, il n'existe pas encore le document word résultat du publipostage (Lettre_fusionnee.docx)
Si j'effectue une autre opération de publipostage alors j'obtiens une erreur "Erreur d'exécution '462' : Le serveur distant n'existe pas ou n'est pas disponible. "
LAquelle erreur disparait si je supprime le document lettre_fusionnee.docx

J'ai regardé ici sur le site de microsoft : Le message d'erreur «*Erreur d'exécution '-2147023174' (800706ba)*» ou «*Erreur d'exécution*'462'*» s'affiche lorsque vous exécutez le code Visual
et effectivement ce problème est soulevé : en gros, je comprends que le document Word tourne toujours en arrière plan ou quelque chose du genre.

D'ailleurs si je mets Active.document.Saveas.... cela m'enregitre bien le document
Par contre si je mets docWord.saveas ..., là j'ai le fichier Word "LETTRES TYPE 1" qui reste ouvert et Word me demande si je veux l'enregistrer au moment où AppWord.quit demande la fermeture de Word

Si vous pouviez l'éclairer de vos lanternes, cela serait super sympa! car je nage un peu dans tout cela (je pense que cela se voit
merci à vous
Bonne nuita
lodam

--------------------------
Code :

Private Sub Fusion_Descriptif_Dossier()
Dim wbkBook, nouvo_wbkBook As Workbook
Dim i, n As Integer
Dim cell As Range
Dim Rep As Long

'on définit container.xls comme fichier actif
Set wbkBook = ActiveWorkbook
Application.ScreenUpdating = False

'dans un 1er temps on crée le fichier BDD_descriptif.xlsm et on l'identifie comme nouveau classeur actif
Workbooks.Open Filename:=Sheets("DATA").Range("chemin_descriptif").Value & "BDD_descriptif.xlsm"
Set nouvo_wbkBook = ActiveWorkbook

'on cree les valeurs du dossier dans le fichier BDD_descriptif
With Worksheets("feuil1")
.Range("A1").value="TATA"
.Range("A2").value="TOTO"
End With

Application.DisplayAlerts = False

'on ferme bdd_descriptif.xlsm
ActiveWorkbook.Save
ActiveWorkbook.Close

'****************
'DEBUT FUSION
'****************


Dim AppWord As Word.Application
Dim DocWord As Word.Document
Dim NomBase As String

'on lance la fusion word avec bdd.xls
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
NomBase = Sheets("DATA").Range("chemin_descriptif") & "BDD_descriptif.xlsm"

Set AppWord = New Word.Application
'Set AppWord = CreateObject("Word.Application")
AppWord.Visible = True 'on veut voir toutes les opérations de fusion

'Ouverture du document principal Word
Set DocWord = AppWord.Documents.Open(Sheets("DATA").Range("chemin_descriptif") & "descriptif_commande.docx")


'publipostage des champs de BDD_descriptif.xlsm dans le doc word
With DocWord.MailMerge
'Ouvre la base de données
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [Feuil1$]"
With .DataSource
.FirstRecord = 1
.LastRecord = 1
End With

'Exécute l'opération de publipostage
.Execute Pause:=False

End With

'Fermeture du document Word et enregistrement sous le nom du client
ActiveDocument.SaveAs Filename:="C:\Users\damien\Documents\TRAVAIL\fusion\Lettre_fusionnee.docx"
'DocWord.SaveAs Filename:="C:\Users\damien\Documents\TRAVAIL\fusion\Lettre_fusionnee.docx"
DocWord.Close True


'on rend à nouveau les projets visibles
AppWord.Visible = True
Application.ScreenUpdating = True
ActiveDocument.Activate
AppWord.Quit

Set AppWord = Nothing

Set DocWord = Nothing

MsgBox "La fusion est réalisée"
End Sub
 
G

Guest

Guest
Re : erreur 462 lors d'un publipostage : Word reste ouvert sur un fichier ?

bonjour Lodam,

Si j'ai bien compris et ton problème et la kb de microsoft il faut juste
après DocWord.Close True mettre Set DocWord=Nothing pour que VBA libère la référence au document avant la fermerture de l'application.

donc:

DocWord.Close
Set DocWord=Nothing

......
AppWord.Quit
Set AppWord = Nothing

De façon générale on libère les sous objets (ici les docs) avant l'objet principal (ici l'application Word).

A bientôt
 

lodam

XLDnaute Occasionnel
Re : erreur 462 lors d'un publipostage : Word reste ouvert sur un fichier ?

Bonsoir
J'ai testé ta réponse
et malheureusement cela ne marche pas...
je galère vraiment beaucoup avec cette fusion
mais je persévère
bonne soirée
lodam
 
G

Guest

Guest
Re : erreur 462 lors d'un publipostage : Word reste ouvert sur un fichier ?

Lodam,

Pour aller dans le sens de la kb de microsoft.

Peut-être faudrait-il que tu références le document fusionné comme suit:
Dim docMerge As Object
Set docMerge = DocWord.MailMerge

With myMerge
.....

...
With .DataSource
.....
End With
End With

Ensuite

docWord.Close
Set docWord=Nothing

AppWord.Visible = True
Application.ScreenUpdating = True
docMerge.SaveAs Filename:="C:\Users\damien\Documents\TRAVAIL\fusio n\Lettre_fusionnee.docx"

docMerge.Activate 'Je ne vois pas l'utilité de d'activer le document avant de le fermer

docMerge.close
Set docMerge=Nothing

AppWord.Quit
Set AppWord=Nothing

A bientôt
 

lodam

XLDnaute Occasionnel
Re : erreur 462 lors d'un publipostage : Word reste ouvert sur un fichier ?

Bonjour Bonsoir

Eh bien non, je n'ai toujours pas réussi à faire ce satané publipostage.
Je ne crois pas d'ailleurs que la version 2007 soit en cause car j'ai fait le test sous 2003 et ça plante tout pareil : il plante une fois sur 2 ; et je pense que la deuxième fois en fait il ne fonctionne qu'après avoir réinitialisé le projet en retournant sous visual basic editor (c'est à dire en appuyant sur 'débogage' du message d'erreur 462.

Bref, j'ai pu voir dans d'autres appels au secours que d'autres methodes étaient utilisées.
Je vais voir.

Pour être sûr de ne pas commettre d'erreur, est ce que je fais bien de créer un fichier excel intermédiaire (dans mon exemple : bdd_descriptif.xls) pour faire la fusion car j'ai lu qu'on ne pouvait se servir des données d'un classeur ouvert pour réaliser une fusion.
En fait j'ai
- 1 fichier de travail sur lequel mon userform demande une fusion ; les données sont copiées de ce fichier
- ces données sont collées sur un fichier exel (bdd_descriptif.xls)
-1 fichier word avec les champs de base de données créés en publipostage avec le fichier intermédiaire Bdd_descpritif.xls

Vous faites bien comme ça de votre coté ?

merci encore pour vos réponses
lodam
 

Discussions similaires

Statistiques des forums

Discussions
312 185
Messages
2 086 010
Membres
103 090
dernier inscrit
Createlier