Bonjour à tous et à toutes,
Je travaille depuis un moment (prequ'un an) sur une amélioration du système de publipostage pour gérer des courriers en masse.
J'ai décidé de passer par Excel qui réalisera par macro la fusion et le publipostage en appelant le fichier Word. Ainsi, le modèle Word n'est pas ouvert par l'utilisateur et a peu de chance d'être modifié.
Cependant, j'ai des soucis de mise en forme : les dates ne sont pas insécables, le 1er jour du mois n'est pas sous la forme 1+er en exposant, les chiffres n'ont pas de séparateur de millier.
Pour l'instant, j'essaye de traiter les espaces insécables au niveau des dates. La macro que j'utilisais pour cela marche parfaitement sur Word mais pas en cas d'appel depuis Excel.
J'ai donc essayé :
- - de la placer dans l'éditeur VBA dans divers modules Excel ou Word, sur les feuilles et documents ;
- - l'enregistreur de macro Excel n'enregistre rien lorsque je manipule le fichier Word ;
- - de faire en sorte que les dates soient insécables dans Excel mais le publipostage ne conserve pas l'insécabilité et mes fonctions/Calculs avec les dates ne peuvent plus s'exécuter ;
- - d'utiliser le correcteur orthographique par macro ce qui détruit la mise en page des paragraphes numérotés et justifié.
Le fonctionnement est le suivant depuis Excel
1. La macro Tentative ouvre le fichier Word de fusion et associe la feuille de classeur Excel adaptée;
2. La macro Apublipostage génère les fichiers et les enregistre individuellement (Merci heureux-oli!!)
3. La macro DateInsécable gère les espaces des dates et elle est appelée avant l'enregistrement individuel des fichiers publipostés
La macro décroche sur "With Selection.Find" dans la macro DateInsécable avec un message : "Run time Error 450 : Wrong number of arguments or invalid property assignment"
Je suppose qu'une fois ce problème réglé, je pourrais par analogie résoudre mes autres contretemps sur les espaces des nombres.
Je joints le code sur lequel je travaille. Je l'ai raccourci car sinon j'avais plein de mise en route des macros à l'ouverture, fermeture, sauvegarde des fichiers Excel et Word. Mais il fonctionne. Je joint également des fichiers épurés si jamais cela peut aider.
Merci d'avance pour vos éventuels commentaires et solutions.
Jules
Private Sub Tentative()
' Ouverture du fichier Word et association de la base Excel à jour
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim NomBase As String
Dim NomFicherWord As String
NomBase = ThisWorkbook.Path & "\" & ThisWorkbook.Name
NomFicherWord = "C:\Users\JULO\Desktop\DALO - Publipostage\Modèle\Modèle NPAI - Word"
Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open(NomFicherWord)
'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
.MainDocumentType = wdFormLetters
'Ouvre la base de données
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [DALO NPAI$]", _
SQLStatement1:="", SubType:=wdMergeSubTypeAccess
End With
Call APublipostage
End Sub
Sub APublipostage()
'Macro qui découpe les fichiers Word en fichiers répertoriés et enregistrés individuellement
' 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
'Utilisation de deux champs pour obtenir le nom du document
DocName = .DataSource.DataFields(1).Value
DocName = DocName & "-" & .DataSource.DataFields(2).Value & .DataSource.DataFields(3).Value
Debug.Print DocName; i
End With
Call DateInsécable
' Sauvegarde du document publiposté
With ActiveDocument
.SaveAs "C:\Users\JULO\Desktop\DALO - Publipostage\Dossier de réception des éditions\" & DocName & ".doc"
.Close
End With
Next i
End Sub
Sub DateInsécable()
Dim imax As Byte
Dim sInsécable As String
sInsécable = Chr(160)
' c'est ici que ça merdouille "Run time error 450"
With Selection.Find
For imax = 1 To 12
.Execute Format$(DateSerial(Year(Now), imax, 1), " mmmm "), True, , , , , , wdFindContinue, False, sInsécable + Format$(DateSerial(Year(Now), imax, 1), "mmmm") + sInsécable, wdReplaceAll
Next imax
End With
End Sub
Fichier Word : Modèle NPAI - Aide.doc
Fichier Excel dans lequel il faudra certainement modifié les chemins d'accès des fichiers dans les macros : Modèle NPAI - Aide.xls
Partager