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

VBA Word Discussion :

Publipostage VBA : Attendre la fin de la fusion


Sujet :

VBA Word

  1. #1
    Membre habitué Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 210
    Points : 171
    Points
    171
    Par défaut Publipostage VBA : Attendre la fin de la fusion
    Bonjour.

    J'ai conçu un classeur Excel muni d'une macro qui génère une table de données à partir d'un dossier de photos.
    Une seconde macro dans ce même classeur utilise un modèle de bon de commande Word, lui lie la suscitée table Excel, exécute un publipostage puis met à jour les champs image.

    Mon problème initial est que, dans le document de fusion, le contenu du ruban disparaît (son emplacement est bien là, mais vide). J'ai donc envisagé d'inclure dans ma macro de publipostage le fait d'enregistrer le document de fusion, le fermer puis le rouvrir.
    Le souci dans ce cas est que l'instruction d'enregistrement est exécutée pendant la fusion et non après, ce malgré un DoEvents totalement inefficace...

    A toutes fins utiles, ledit document de fusion compte près de 600 pages, impliquant un temps de génération assez long.

    Je suis donc à la recherche de 2 informations :
    1. Comment, le cas échéant, régénérer l'affichage du contenu du ruban ?
      .
    2. Comment demander à Excel d'attendre la fin de la fusion avant d'enregistrer le document ?
      .

    Merci d'avance pour votre aide.
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait. (Mark TWAIN)

  2. #2
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Bonjour Le Sage, le forum,

    Je ne sais pas trop comment régénérer l'affichage du contenu du ruban.
    Par contre, pour l'aspect attendre la fin de la fusion, peut-être que l'évènement MailMergeAfterMerge pourra t'aider.

    A+

  3. #3
    Membre habitué Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 210
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par mromain Voir le message
    Bonjour Le Sage, le forum,

    Je ne sais pas trop comment régénérer l'affichage du contenu du ruban.
    Par contre, pour l'aspect attendre la fin de la fusion, peut-être que l'évènement MailMergeAfterMerge pourra t'aider.

    A+
    Bonjour mromain, et merci de ta réponse.

    Le souci avec ce que tu propose est que l'événement en question se produit dans Word, or la macro se trouve dans Excel... Du coup je ne vois pas trop comment je pourrais l'utiliser.

    Merci quand même.
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait. (Mark TWAIN)

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Bonjour Le Sage, le forum,

    Il est possible d'utiliser les évènements de Word depuis Excel.
    J'ai fait le test suivant composé de trois fichiers :
    • un fichier BDD.xlsx contenant la liste de données de publipostage
    • un fichier DocPubli.docx (le document de publipostage)
    • un fichier TestPubli.xlsm contenant le code qui pilote le publipostage


    Le fichier TestPubli.xlsm contient :
    • un module de classe nommé Cls_AppWord avec ce code :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      Option Explicit
       
      Private WithEvents m_o_app As Word.Application
       
      Public Property Get WdApplication() As Word.Application
          Set WdApplication = m_o_app
      End Property
       
      Private Sub Class_Initialize()
          Set m_o_app = New Word.Application
      End Sub
       
      Private Sub m_o_app_MailMergeAfterMerge(ByVal Doc As Word.Document, ByVal DocResult As Word.Document)
          AfterMerge Doc, DocResult
      End Sub
    • un module de code standard avec ces deux procédures :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      Public Sub LaunchMerge()
      Dim l_o_myWdApp As Cls_AppWord
      Dim l_o_wdDoc As Word.Document
       
          Set l_o_myWdApp = New Cls_AppWord
          With l_o_myWdApp.WdApplication
              .Visible = True
              Set l_o_wdDoc = .Documents.Open("C:\...\DocPubli.docx")
          End With
       
          l_o_wdDoc.MailMerge.Execute
       
          MsgBox "fin de ""LaunchMerge"""
      End Sub
       
      Public Sub AfterMerge(ByVal Doc As Word.Document, ByVal DocResult As Word.Document)
          MsgBox "fusion terminée"
      End Sub


    Lorsqu'on exécute la procédure LaunchMerge :
    • l'application Word est instanciée
    • le document est ouvert
    • le publipostage se fait
    • à la fin du publipostage, l'évènement m_o_app_MailMergeAfterMerge est intercepté et appelle la procédure AfterMerge
    • la MsgBox de la procédure AfterMerge s'affiche
    • la MsgBox de la procédure LaunchMerge s'affiche


    Pour que ça fonctionne, j'ai du modifier une entrée dans la base de registre (comme indiqué ici) pour éviter le message d'avertissement bloquant le publipostage.

    En espérant que ça t'aide...

    A+

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/10/2015, 10h00
  2. Réponses: 3
    Dernier message: 22/10/2004, 12h04
  3. attendre la fin d'un processus
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 27/02/2004, 15h37
  4. Attendre la fin du chargement de la page dans un WebBrowser
    Par core1 dans le forum Web & réseau
    Réponses: 5
    Dernier message: 15/06/2003, 04h12
  5. Comment Attendre la fin d'un Processus
    Par mr_titi dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/06/2003, 16h35

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