Arnaud42 Cépafo! | Madame! Monsieur! Je viens vous rendre visite au sujet de publipostage en VBA.
J'vous explique rapidement : Je dispose d'un fichier Excel qui fait office de source de données ainsi qu'un fichier Word qui fait office de document de fusion. J'ai donc écrit une petite macro qui se charge du publipostage. Mais plus que l'automatisation du traitement, c'est davantage la possibilité d'enregistrer chaque résultat du publipostage dans un document Word et PDF distinct qui m’intéressait là...
Ainsi pour chaque ligne de ma source de données, je génère un document Word et son équivalent PDF à l'image de mon document de fusion.
L'tout fonctionne.... Presque... Bien! En effet, aléatoirement (Enfin! C'plus systématiquement dernièrement... ), le traitement s'arrête et Visual Basic me gratifie d'un :
Message qui se rapporte visiblement à l'instruction :
Sauf que j'obtiens pareil message après qu'Excel ait déjà passé 190-200 lignes en revue et que le fichier Word soit bien dûment généré au même titre que les 190-200 précédents.
Z'auriez une idée? J'suis à vot' écoute!
Edit1 : Avec un petit peu de code... Cela sera peut être plus parlant!
Voilà le code se chargeant du Publipostage.
Code :
- For i = 1 To iR
-
- With FicWord.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
-
- ' Récupération du nom du fichier Word généré pour le Publipostage
- Nom_FicPub = AppWord.ActiveDocument.Name
-
- ' Actualisation de l'enregistrement pour la sauvegarde
- .DataSource.ActiveRecord = i
-
- 'Utilisation des champs de fusion pour générer le libellé du document
- If .DataSource.DataFields("Désignation" ).Value = "" Then
- AppWord.Documents(Nom_FicPub).Close SaveChanges:=False
- GoTo Suivant 'Next i
- Else
- If .DataSource.DataFields("N_de_Révision__insertion_date_du_jour" ).Value = "" Then
- NomCertificat = "Certificat Général " & .DataSource.DataFields("Désignation" ).Value
- Else
- Version = Split(.DataSource.DataFields("N_de_Révision__insertion_date_du_jour" ).Value, " " )
- NomCertificat = "Certificat Général " & .DataSource.DataFields("Désignation" ).Value & " V" & Mid(Version(1), 3)
- End If
-
- 'Suppression des caractères suivants que Windows refuserait dans le libellé du fichier
- NomCertificat = Replace( _
- Replace( _
- Replace( _
- Replace( _
- Replace( _
- Replace( _
- Replace(NomCertificat, _
- ":", "-" ), _
- "\", "-" ), _
- "/", "-" ), _
- "?", "" ), _
- "*", "" ), _
- "[", "-" ), _
- "]", "-" )
- End If
- End With
-
- ' Sauvegarde du document publiposté
- With AppWord.Documents(Nom_FicPub)
- Nb_Certificat = Nb_Certificat + 1
- .SaveAs CheminExportWord & NomCertificat & ".doc"
- .ExportAsFixedFormat CheminExportPDF & NomCertificat & ".pdf", wdExportFormatPDF, False
- .Close
- End With
- Suivant:
- Next i
|
Edit2 : J'viens de me rendre compte que lorsque le traitement s'arrête, seul le document Word de fusion est ouvert. Je n'ai pas le document issu de : .Destination = wdSendToNewDocument devant normalement accueillir le résultat du publipostage. Message édité par Arnaud42 le 21-06-2018 à 11:45:51 ---------------
[VDS] Enermax MaxRevo 1350W - TV 22" - Samsung 913V - Dock Lenovo USB-C - Clavier/Souris MX5500 [ACH] Xeon E5-1680v2
|