XL 2013 Automatisation publipostage avec word depuis excel

escouger

XLDnaute Occasionnel
Bonjour,
J'utilise depuis plusieurs années un tableau excel qui fait dynamiquement appel à Word pour effectuer un "publipostage" d'un mini article destiné à la presse locale dans le cadre de mon association de randonneurs.
Depuis que, suite à un souci hardware sur mon installation, j'ai reinstallé Office 2013 ce publipostage ne se fait plus et se plante avec le message suivant : -2147023170 (800706be) Erreur automation. Echec de l'appel de la procédure distante.
Malgré mes recherches je ne comprends pas ce qui se passe car rien n'a changé dans cet excel, ce qui me conduit à penser que c'est la reinstallation de Office 2013 qui est la cause du problème.

Voyez ci-dessous mon code en rouge à du plantage.

Merci de votre aide.

---------------------------------------------------------------------------------------------
Sub Publipostage()
Application.ScreenUpdating = True
Dim Wd As Word.Application
Dim WdDoc As Word.Document, Doc As Word.Document
Dim Chemin As String, Fichier As String
Dim Chemin_Fichier As String
Sheets("Rando ").Select
zguide = Range("ab8")
Sheets("DNA").Visible = True
Sheets("DNA").Select
Worksheets("DNA").Activate
ActiveSheet.Unprotect

NBAS1 = "C:\CVS\"
NBAS2 = Range("nom_tableau_courant")
NBAS = NBAS1 & NBAS2

nom_out1a = Range("RAN_AA")
nom_out1b = Range("RAN_MM")
nom_out1c = Range("RAN_JJ")
nom_out1 = nom_out1a & nom_out1b & nom_out1c

nom_out2 = Range("AUJ_AA")
nom_out3 = Range("AUJ_MM")
nom_out4 = Range("AUJ_JJ")
nom_out5 = Range("AUJ_HH")
nom_out6 = Range("AUJ_MN")
nom_out7 = Range("AUJ_SEC")
nom_outx = "0"

If nom_out1 = " " Or nom_out1 = "" Or nom_out1 = "0" Or nom_out1 = "19000100" Then
nom_outx = "1"
Else
If NBAS2 = "Formulaire de randonnées.xls" Then
nom_outx = "2"
Else
nom_outx = "3"
End If
End If
If nom_outx > 1 Then 'xxxxx
If nom_outx = 2 Then
nom_out = nom_out1 & "_" & Left(Range("categ"), 4) & "_" & nom_out2 & nom_out3 & nom_out4 & nom_out5 & nom_out6 & nom_out7 & ""
Else
nom_out = Range("nom_tableau_courantw") & "_" & nom_out2 & nom_out3 & nom_out4 & nom_out5 & nom_out6 & nom_out7 & ""
End If
Nmail = Range("EA1")
Nmail1 = Range("EA2")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.SelectedSheets.Visible = False
'
Application.ScreenUpdating = False
Worksheets("rando ").Activate
Sheets("Rando ").Select
' Récupère le chemin des fichiers de la feuille "saisie"
' cellule "Chemin"
Chemin = ThisWorkbook.Path & "\"
' Chemin du répertoire de la lettre type et des documents résultats (Lettres)
Chemin1 = Chemin & "DNA\"
'Nom de la lettre DOC pour le publipostage
Fichier = "_Article_DNA_Modele.docx"
'Chemin & lettre Word pour publipostage
Chemin_Fichier = Chemin1 & Fichier
'Chemin est nom du fichier Excel o? est la base de données
'pour le publipostage
Source = ThisWorkbook.FullName
'Nom de la feuille ou se retrouvent les données du classeur.
Feuille = ThisWorkbook.Worksheets("DNA").Name
'Démarrer Word en ouvrant la lettre type
Set Wd = CreateObject("Word.Application")
Wd.Visible = True
Set WdDoc = Wd.Documents.Open(Chemin_Fichier)
With WdDoc
'Créer la liaison à la base de données afin de pouvoir
' déplacer facilement les fichiers.
' Source contient le chemin d'accès au fichier
.MailMerge.OpenDataSource _
Name:=Source, _
LinkToSource:=True, _
Format:=wdOpenFormatAuto, _
SqlStatement:="SELECT * FROM [" & Feuille & "$] WHERE NOM_RANDO is not null;"

' Lancer la fusion du 1er et seul enreg vers un nouveau doc
With .MailMerge
'.MainDocumentType = wdDirectory
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
Call SaveRecsAsFiles(Wd, nom_out)
End With
' Ferme le doc ayant servi de mod?le sans l'enregistrer
For Each Doc In .Parent.Documents
Doc.Close (False)
Next
Wd.Quit
End With
'Ouvrir le r?pertoire o? se retrouvent tous les fichiers (Observer le r?sultat)
Shell "C:\Windows\EXPLORER.EXE /e,/root," & ThisWorkbook.Path & "\" & Feuille & "\", vbNormalFocus
End If 'XXXXX
' Lib?re la m?moire
Set Doc = Nothing: Set WdDoc = Nothing: Set Wd = Nothing
Sheets("Rando ").Select
Range("Nom_Rando").Select
znameword = "C:\CVS\" & Feuille & "\" & nom_out & "_" & nomdocument_w & "_" & zguide & _
".docx"
Range("aG1") = znameword
txtquest1 = "Voulez-vous envoyer le texte g?n?r? vers le responsable du site internet de CVS ?"
txtquest2 = Nmail
txtquest = txtquest1 & " (" & txtquest2 & ")"
'question = InputBox(txtquest) (Supprim? le 01/03/2017)
'If questio1 = "OUI" Or questio1 = "Oui" Or questio1 = "oui" Or questio1 = "o" Or questio1 = "O" Then
'Call Envoyer_Mail_Outlook(znameword)
'End If
txtquest3 = "Voulez-vous envoyer le texte g?n?r? vers le responsable des affiches du CVS ?"
txtquest4 = Nmail1
txtquest = txtquest3 & " (" & txtquest4 & ")"
questio1 = InputBox(txtquest)
If questio1 = "OUI" Or questio1 = "Oui" Or questio1 = "oui" Or questio1 = "o" Or questio1 = "O" Then
Call Envoyer_Mail1_Outlook(znameword)


End If
End Sub
Function NOMRAND(T())
'n?cessite une r?f?rence ? la librairie
'Microsoft ActiveX Data Object 2.8 Library
Dim Rst As ADODB.Recordset
Dim StConnect As String
Dim Requete As String
If Val(Application.version) < 12 Then
' Cr?e la cha?ne de connexion
StConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Source & ";" & _
"Extended Properties=Excel 8.0;"
Else
StConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Source & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes"";"
End If
' La requ?te est bas?e sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit ?tre entour? de crochets droits.

Requete = "SELECT NOM_RANDO FROM [" & Feuille & "$] WHERE NOM_RANDO is not null;"
Set Rst = New ADODB.Recordset
Rst.Open Requete, StConnect, adOpenStatic, _
adLockReadOnly, adCmdText
If Rst.RecordCount > 0 Then
T = Rst.GetRows
End If
End Function
 

Pièces jointes

  • upload_2018-12-3_15-47-39.png
    upload_2018-12-3_15-47-39.png
    20.7 KB · Affichages: 48

escouger

XLDnaute Occasionnel
Bonsoir tatiak et merci de t'être penché sur la question.
Je rencontre hélas le même souci en utilisant ton code.
Il doit y avoir un souci chez moi lié soit à Excel ou Word ou à une mise à jour Windows ou encore à la réinstallation de mon office 2013.
Ce classeur fonctionnait depuis plusieurs années sans souci, et voilà qu'il dysfonctionne ….subitement.
J'en déduis que mon code n'est certainement pas en cause, mais que quelque chose a changé dans l'environnement ou il tourne. J'ai bien tenté de désactiver puis réactiver MSCOMCTL.OCX comme le conseillait un site mais cela ne change rien.
(erre 800706be erreur automation, échec de l'appel de procédure à distance)
J'ai aussi tenté de désinstaller les Windows Update des dernières semaines, mais le problème persiste.
J'ai aussi désactivé un complément installé par Cordial (Contrôles orthographe et grammaire), mais sans changement.
Merci
 

escouger

XLDnaute Occasionnel
Voici quelques éléments supplémentaires qui pourraient peut-être aider à la compréhension de mon sujet.
Dans le fichier joint, j'ai analysé le code "Err" pour en savoir plus.
Au delà de la valeur du code (-2147023170) il est question d'un fichier d'aide qui n'existe pas sur mon PC.
"C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA7.1\1036\VbLR6.chm"
Je n'ai même pas de répertoire VBA sous le répertoire "C:\Program Files (x86)\Common Files\Microsoft Shared\"
Une piste à creuser ?
Gérard
 

Pièces jointes

  • Capture.PNG
    Capture.PNG
    32.3 KB · Affichages: 50

escouger

XLDnaute Occasionnel
Encore une information complémentaire.
Je constate que j'ai installé ACCESS 2016 fin Novembre et il se peut que le dysfonctionnement que je rencontre avec cette erreur d'automation se soit faite jour après cette installation. Pensez-vous que cela pourrait avoir un rapport ?
Access est en version 2016 alors que Excel et Word sont en version 2013...
Je vais tenter une désinstallation de Access et vous tiendrez informé de mon nouveau test.
GE
 

Discussions similaires

Statistiques des forums

Discussions
312 030
Messages
2 084 780
Membres
102 664
dernier inscrit
LudovicF