XL 2019 Comment attendre la fin d'exécution de la macro pour passer à la ligne de VBA suivante ?

LeForain

XLDnaute Junior
Bonjour,

Voici le code que j'utilise dans mon fichier EXCEL pour exécuter ma macro WORD qui automatise le publipostage.

VB:
    Set Wordapp = CreateObject("word.Application")
    Wordapp.Visible = True
    Wordapp.Documents.Open "C:\Users\Desktop\MonFichier.docm"
    Wordapp.Activate
    Wordapp.Run "ExporterPDF"
    Wordapp.Application.Quit

Quand j'exécute cette macro "ExporterPDF" directement dans WORD, elle fonctionne mais quand elle est appelée depuis cette macro EXCEL, c'est comme si elle ne se terminait pas et mon fichier n'est pas publiposté.

Dites-moi si je me trompe mais j'ai l'impression que la ligne qui quitte Word s'exécute avant que la macro ait fini de s'exécuter complètement.

Existe-t-il un moyen d'attendre la fin d'exécution de la macro avant de passer à la ligne
Code:
 Wordapp.Application.Quit

Ou faut il ajouter une temporisation ?

Merci pour votre aide
 

LeForain

XLDnaute Junior
Bonjour @sylvanu

Merci pour votre retour.
J'avais d'ailleurs vu ce DoEvent sur un autre sujet et je l'ai testé mais cela ne fonctionne toujours pas.
(En tout cas depuis Excel).
En la lançant depuis Word, cela fonctionne.

Par ailleurs en la lençant depuis Word, elle fonctionne mais j'ai l'impression que le publipostage a lieu en prenant des lignes de la feuille "Source" un peu aléatoirement.
Or j'aimerais que ce soir uniquement la dernière ligne du tableau qui soit prise à chaque fois.
Le but étant de générer à chaque validation une seule fiche, qui correspond à chaque fois aux infos du formulaire qui vient d'être complété. Soit la dernière ligne du tableau Source.
 

Pièces jointes

  • SAISIE AUTOMATIQUE NC.xlsm
    41 KB · Affichages: 3
  • M01-FOR-003_FICHE_NON_CONFORMITE.docx
    33.6 KB · Affichages: 3

LeForain

XLDnaute Junior
Le problème dans la macro Word est-ce qu'elle traite plusieurs lignes d'un coup. Je n'ai pas réussi à lui faire traiter uniquement la dernière ligne du tableau.

Dans le code Excel, tout tourne sauf que même avec le rajout de DoEvents, je vois Word s'ouvrir et se refermer aussitôt sans avoir l'impression que ExporterPDF s'exécute
 

mromain

XLDnaute Barbatruc
Bonjour LeForain, sylvanu, le forum,

@LeForain :
Si le but du modèle Word est de générer un document pour une seule ligne de ton fichier source, une solution serait de ne pas utiliser le publipostage, mais de créer un modèle Word avec des contrôles de contenu.

Ainsi, tu peux facilement en VBA créer un nouveau document basé sur ce modèle et remplir ses contrôles de contenu.

Tu trouveras dans l'archive ci-jointe :
  • un exemple de modèle Word (Modèle.docx) avec quelques contrôles de contenu ;
  • ton fichier Excel avec deux macros
    • la fonction Mod_Word.BuildDocFromListrow qui est dédiée à créer un nouveau document basé sur un template et à partir des données d'une ligne d'un tableau (ListRow) ;
    • la procédure Mod_Test.TestWord qui crée un document à partir de la dernière ligne du tableau TSource, enregistre le document en pdf et le ferme.

La correspondance entre les colonnes du tableau et les contrôles de contenu se fait avec le titre du contrôle de contenu.

A+
 

Pièces jointes

  • Exemple.zip
    38.6 KB · Affichages: 1

job75

XLDnaute Barbatruc
Bonjour LeForain, sylvanu, mromain,

Au lieu de contrôles de contenu on peut utiliser des signets (Bookmarks).

Bien sûr ils se suppriment quand on les utilise mais il est facile de les recréer.

Tout se fera à partir d'une seule macro Excel.

A+
 

job75

XLDnaute Barbatruc
Voici le code (Excel) pour utiliser un signet nommé "Signet1" et le recréer :
VB:
texte = "Bonjour"
With Wdoc.Bookmarks("Signet1").Range
    .Text = texte
    Wdoc.Bookmarks.Add "Signet1", Wdoc.Range(.Start, .Start + Len(texte))
End With
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino