Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 VBA et publipostage

LUMBARDO

XLDnaute Nouveau
Bonsoir,

J'avais un code qui fonctionnait très bien jusqu'à présent. Il permet à partir d'une base de données de rédiger des lettres types (rien de très original).


et horreur depuis hier lorsque je lance le publipostage :



Blocage, il semble y avoir un problème de chemin...

Quelqu'un a t-il déjà rencontré cette difficulté et ....trouvé la solution ?

Il s'agit d'Exel et Word 365. Merci
 

Pièces jointes

  • 1608152181338.png
    10.3 KB · Affichages: 53

Staple1600

XLDnaute Barbatruc
Bonsoir LUMBARDO, le fil

=>LUMBARDO
Une idée en passant
Si j'étais moi, je créerai une petit base de données de test avec les mêmes noms de champs, pour voir si la macro fonctionne si oui.
Si oui, aprés je m'occuperai du chemin en ajoutant des MsgBox dans le code VBA

PS: Ce serait plus utile de joindre le code VBA qu'un image!
Car le code VBA on peut le copier dans notre Excel pour faire nos tests.
(L'image on ne peut que la regarder)
 
Réactions: cp4

LUMBARDO

XLDnaute Nouveau
Bonsoir Staple 1600

Désolé, manque d'expérience.

Private Sub CommandButton27_Click()
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim NomBase As String

On Error Resume Next

If ComboBox2.Value = "" Then
MsgBox "Il n'y a pas de dossier sélectionné !", vbOKOnly + vbCritical, "petit problème"
Unload Me
irs1.Show

Else


NomBase = "C:\zz\zz\Documents\irs1.xlsm"

End If
Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("T:\Profile\Documents\Nouvelles lettres\" & ListBox8.Value)

'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
'Ouvre la base de données
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [données$]WHERE sinistre =" & ComboBox2.Value & ""


End With
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour

Il semblerait que ce soit le formatage de la chaine SQL qui pose problème.
Chez moi, ce petit test fonctionne.
VB:
Sub mTest()
Dim Base_XL$
Base_XL = "C:\Users\Staple1600\Documents\Tests\Base_Fuz.xlsx" '<-adapter chemin et nom fichier
ActiveDocument.MailMerge.OpenDataSource Name:=Base_XL, Connection:="Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
End Sub
Pré-requis (macro testée directement dans Word)
Dans le document Word, les champs de fusion ont été insérées manuellement et une première fusion manuelle a été faite au préalable.

Dés que je rajoute la partie SQL, le problème survient.
(comme sur ta copie d'écran)
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

LUMBARDO
Test OK chez moi (Excel 2013) et ici la macro est lancée depuis Excel
VB:
Option Explicit
Const SOURCE_XLS_PATH As String = "C:\Users\Staple\Documents\dec2020\test_Fuz.xlsx"
Const SOURCE_DOC_PATH As String = "C:\Users\Staple\Documents\dec2020\TestPublic.docx"
Sub Publipostage_test_OK()
Dim appWord As Word.Application
Dim docWord As Word.Document
Application.ScreenUpdating = False
Set appWord = New Word.Application
Set docWord = appWord.Documents.Open(SOURCE_DOC_PATH)
appWord.Visible = True
With docWord.MailMerge
    .OpenDataSource Name:=SOURCE_XLS_PATH, SQLStatement:="SELECT * FROM `Feuil1$` D WHERE D.[sinistre] = 'incendie'"
    .DataSource.ActiveRecord = wdLastRecord
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
        With .DataSource
        .FirstRecord = wdDefaultFirstRecord
        .LastRecord = wdDefaultLastRecord
        End With
    .Execute Pause:=False
End With
Set docWord = Nothing
End Sub
Le classeur base ne contient qu'une feuille et la base est inscrite dans un tableau structuré.
(ListObject)
PS: Pour tester changer/adapter le nom des constantes en début de code.
 

LUMBARDO

XLDnaute Nouveau
Bonjour Staple,
Excuse moi pour le retard à l'allumage.
Chez moi ça plante toujours et on se retrouve avec une difficulté pour traiter les variables.
Même avec une seule lettre cela ne fonctionne pas (toujours le même message).
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, LUMBARDO

Est-ce que ces lignes sont telles quelles dans ton code VBA chez toi ?
Code:
Const SOURCE_XLS_PATH As String = "C:\Users\Staple\Documents\dec2020\test_Fuz.xlsx"
Const SOURCE_DOC_PATH As String = "C:\Users\Staple\Documents\dec2020\TestPublic.docx"
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…