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
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