IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Appel de macro Word depuis Excel pour gérer des éléments de mise en page


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Appel de macro Word depuis Excel pour gérer des éléments de mise en page
    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

  2. #2
    Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    J'ai la solution.

    Etant donné qu'il s'agit d'un publipostage, il faut appeler la macro depuis Excel (jusque là pas de surprise) et la macro devait s'installer dans le dossier "Normal" "New macro""

    Sub test()
    Dim wordApp As Object

    Set wordApp = GetObject(, "Word.Application")

    wordApp.Run "Normal!NewMacros.DateInsécable"

    End Sub

    Cordialement,
    Julo

Discussions similaires

  1. Macro Word depuis Excel avec tableau comme argument
    Par emorejbleu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/07/2013, 14h45
  2. Réponses: 0
    Dernier message: 23/07/2013, 13h30
  3. Appel macro word depuis excel
    Par Pepette59 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/01/2010, 16h31
  4. Executer macro word depuis Excel
    Par faube dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2007, 10h16
  5. [VBA-E] Appel macro Access depuis Excel en mode silencieux
    Par lordkoko dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/05/2006, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo