Publipostage macro Word to PDF à partir d'un excel DDE

Fermé
khazak - 4 févr. 2022 à 09:39
m@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 - 10 févr. 2022 à 23:09
Bonjour,

Je dois faire un publipostage à partir d'un fichier excel avec beaucoup de chiffre. Cependant, je me confrontais à un problème, c'est que tous les chiffres n'avait pas le format de l'excel, j'ai trouvé une solution qui était d'ouvrir la feuille au format DDE. Avec cette solution tous les champs sont bons donc nickel.
Néanmoins, cette fois quand je lance la macro, rien ne se passe.
Je me demande donc si ce n'est pas le protocole DDE qui bloque, y'a t'il une solution.

Pour info: je ne l'aio pas faite moi même.

'Découpage Publipostage en PDF
Sub Decoupe_PDF()
' Désactiver le rafraichissement d'écran pour accélérer la procédure
Application.ScreenUpdating = False

' Déclaration des variables
Dim iR As Integer
Dim i As Integer
Dim oDoc As Document
Dim DocName As String
Dim oDS As MailMergeDataSource

' Affectation des objets
Set oDoc = ActiveDocument
Set oDS = oDoc.MailMerge.DataSource

iR = oDoc.MailMerge.DataSource.RecordCount
Debug.Print iR
For i = 1 To iR
With oDoc.MailMerge
'Définition du premier et dernier enregistrement
.DataSource.FirstRecord = i

.DataSource.LastRecord = i
' Envoi des données dans un nouveau document
.Destination = wdSendToNewDocument
' Exécution du publipostage
.Execute
' Actualisation de l'enregistrement pour la sauvegarde
.DataSource.ActiveRecord = i
'-------------------------Indiquer ci-dessous dans les parenthèses le n° du champ (de concaténation) pour nommer le document-----------------------
DocName = .DataSource.DataFields(1).Value
Debug.Print DocName; i
End With
'-------------------------Sauvegarde du document publiposté : Précisez le chemin de votre dossier ou seront enregistrées les pièces jointes en pdf-------------
With ActiveDocument
.ExportAsFixedFormat OutputFileName:= _
"C:\Users\Patricia\Desktop\PJ\" & DocName & ".pdf", ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
wdExportAllDocument, From:=1, To:=1, Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
True, UseISO19005_1:=False
.Close SaveChanges:=wdDoNotSaveChanges
End With
Next i
End Sub


Merci.

Configuration: Windows / Chrome 97.0.4692.99
A voir également:

14 réponses

m@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 11 360
4 févr. 2022 à 15:56
Bonjour

Je pense que c'est une histoire de >Activedocument qui change.

Essaie cette macro :
https://faqword.com/index.php/word/19-publipostage/1075-publipostage-directement-vers-fichiers-pdf

m@rina
0
Merci pour la réponse.

Même problème, j'exécute la macro et rien ne se passe.
0
m@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 11 360
6 févr. 2022 à 21:58
Tu exécutes la macro à quel moment ? et où se trouve la macro ?

m@rina
0
Je prends mon doc word, publipostage>je selectionne mon fichier excel en DDE.
Tout marche, ça change bien mes champs de fusion.

J'ouvre Développeur => visual basic => importer un fichier j'ajoute la macro. Je change le chemin d'enregistrement et je remplace "Nom" pour le premier champ que j'ai mis soit "Nom du Fichier" => je ferme

J'appuie sur Macros, je sélectionne publipostage puis exécuter. Et rien ne se passe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
m@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 11 360
7 févr. 2022 à 15:37
Bonjour,

Désolée, mais je n'ai pas tout compris...

Quand tu dis "Importer un fichier j'ajoute la macro", ça veut dire quoi ??
On importe un fichier macro si on a un fichier macro, en particulier avec une extension BAS. Cela aurait signifié que moi ou quelqu'un d'autre aurions exporté cette macro avec cette extension. On peut aussi, via le bloc note l'enregistrer en BAS.

Or, a priori tu n'as pas de fichier BAS, tu dois donc simplement copier la macro comme un texte et la coller dans un module de ton document de publipostage Word.

m@rina
0
Bonjour,

oui je l'ai calqué sur un document texte que j'ai enregistré en BAS. C'est pour ça que je dis que je l'ai importé.

Sub publipostage()
Dim fusion As MailMerge
Dim x As Integer, nb As Integer
Dim chemin As String, nom As String
Set fusion = ActiveDocument.MailMerge
chemin = "C:\Users\Hugo\Desktop\Nouveau dossier\" 'mettre ici le chemin complet du dossier où stocker les fichiers sans oublier le \ à la fin
nb = fusion.DataSource.RecordCount
For x = 0 To nb - 1
With fusion
.DataSource.FirstRecord = x + 1
.DataSource.LastRecord = x + 1
.Destination = wdSendToNewDocument
.DataSource.ActiveRecord = x + 1
nom = .DataSource.DataFields("Nom du Fichier") 'Remplacer Nom" par le champ à utiliser
.Execute
End With
ActiveDocument.ExportAsFixedFormat OutputFileName:=chemin & nom & ".pdf", ExportFormat:=wdExportFormatPDF, openafterexport:=False
ActiveDocument.Close savechanges:=False

Next
End Sub
0
m@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 11 360
8 févr. 2022 à 17:05
Bonsoir,

OK pour le BAS mais c'était inutile.

Maintenant tu ne dis pas où tu l'as importée, quel module ?

m@rina
0
khazak Messages postés 4 Date d'inscription mardi 8 février 2022 Statut Membre Dernière intervention 10 février 2022
9 févr. 2022 à 14:19
Bonjour,

je suis pas forcément famillier avec les macros sur word, je ne sais pas quel était la manière la plus simple de rajouter la macro.

Sinon sur visual basique j'importe mon document BAS et je me retrouve avec Mon Projet - Modules - Module 1 (avec la macro)
0
m@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 11 360
9 févr. 2022 à 15:01
Il faut faire un copier coller du texte de la macro dans un nouveau module de ton document de publipostage.

m@rina
0
khazak Messages postés 4 Date d'inscription mardi 8 février 2022 Statut Membre Dernière intervention 10 février 2022
9 févr. 2022 à 15:44
Pas de problème, mais cependant le résultat est le même, la macro se lance dans le vide, même pas un message d'erreur.
0
m@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 11 360
9 févr. 2022 à 16:08
ajoute en début de macro :

msgbox "bonjour"

si la macro ne dit pas "bonjour", c'est qu'elle est mal placée et mal lancée.

Tu ne fais la fusion ? Tu lances bien la macro depuis ton document principal de fusion ?

m@rina
0
khazak Messages postés 4 Date d'inscription mardi 8 février 2022 Statut Membre Dernière intervention 10 février 2022
9 févr. 2022 à 17:13
Je viens de tester j'ai bien le message Bonjour, donc elle se lance bien.
0
m@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 11 360
9 févr. 2022 à 18:23
donc, elle n'est pas au bon endroit. Tu n'as pas répondu à ma 2e question.
0
khazak Messages postés 4 Date d'inscription mardi 8 février 2022 Statut Membre Dernière intervention 10 février 2022
10 févr. 2022 à 10:40
Elle est bien placée dans le document principal.

J'ai refait le test pour être sur en ouvrant mon fichier excel normalement et non en DDE pour garder la mise en forme et la macro s'exécute bien.
0
m@rina Messages postés 21089 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 20 novembre 2024 11 360
10 févr. 2022 à 23:09
Franchement, je ne vois pas ce qui peut bloquer.
J'ai fait un test en DDE, la macro s'exécute sans aucun problème.

En DDE, la feuille Excel doit être la première feuille du classeur.

Pourquoi tu ne mettrais pas les formats dans Word avec les commutateurs ?
https://faqword.com/index.php/word/19-publipostage/412-publipostage-decimales-dates-format-americain

m@rina
0