|
Publicité ' | ||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Bonjour,
Je cherche à modifier un publipostage piloté par un ERP. Je souhaite que lorsque la fusion est lancée, un document pdf dont le nom est composé de la valeur de champs de fusion s'ouvre. Je rencontre les problèmes suivants: - j'ai essayé de placer mon code VBA dans un module auto_open du squelette en vain. La valeur des champs de fusion n'est pas renseignée à ce moment-là. - j'ai essayé de passer par une macro complémentaire qui serait accessible sur le document final et qui permettrait, via un bouton, de lancer l'ouverture du document. Dans ce cas, il n'y a plus de lien avec les champs de données Quelle pourrait-être la solution ? Merci d'avance. Julien. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 292 ![]() |
Salut,
Et après publipostage, les champs n'existent plus. de plus, si c'est un ERP qui génère le publipostage, il y a peu de chance que tu puisses intervenir.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#3 | ||
![]() ![]() |
Bonjour,
Tu as un espoir si lors de la fusion, le document principal doit rester ouvert. Il te suffit alors de gérer l'évènement Code :
Attention, la fusion devient très longue (puisque c'est exécuter pour chaque enregistrement). Cordialement, Christophe |
||
|
|
00
|
|
|
#4 | |||||
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Citation:
La syntaxe de Code :
Quand dois-je appeler ? A la fusion, on ne passe pas dans . Julien. |
|||||
|
|
00
|
|
|
#5 | |
![]() ![]() |
Bonjour,
Elle est effectivement bonne cette syntaxe mais ne doit pas être dans le normal. Elle doit être initialisé directement dans le document (lettre type). Tout le code doit être inséré dans la partie VBA de ta lettre type. (Project Nom_lettre_type->Microsoft Word Objects -> ThisDocument). Mais si le document lettre type n'est pas ouvert, tu ne peux pas le gérer. Tu n'appelles pas cette méthode directement, le principe est qu'il détecte directement le début de la fusion de chaque enregistrement. Juste avant, tu as la possibilité d'insérer du code où tu as accès à la valeur des champs. Citation:
Cordialement, Christophe |
|
|
|
00
|
|
|
#6 | ||
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Voici ce que j'ai placé dans ThisDocument de ma lettre type:
Code :
Julien. |
||
|
|
00
|
|
|
#7 |
![]() ![]() |
Bonjour,
Je viens de reprendre un exemple et j'ai oublié un argument dans la méthode privée. Code :
Private Sub wdapp_MailMergeBeforeRecordMerge(ByVal Doc As Document, Cancel As Boolean) |
|
|
00
|
|
|
#8 | |
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Citation:
|
|
|
|
00
|
|
|
#9 |
![]() ![]() |
Est-ce qu'il passe dans document_Open(), je pense que non donc l'évènement ne peut pas être détecté.
Tu peux mettre un MsgBox dans Document_Open pour voir. |
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Il passe dans Document_open, j'ai mis un message.
|
|
|
00
|
|
|
#11 | |
![]() ![]() |
J'ai trouve, je pense d'où ca vient.
Peux-tu déclarer l'évènement comme suit en public Citation:
Code :
Public WithEvents wdapp As Word.Application Cordialement, Christophe |
|
|
|
00
|
|
|
#12 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 292 ![]() |
Salut,
Je pense qu'il faut quelques excplications supplémentaires. La gestion des évènements dans Word nécessite l'utilisation d'un module de classe pour cette gestion. Par exempl : Document_Open est un évènement Document et ne nécessite rien. Pour les évènements application un début de piste : http://heureuxoli.developpez.com/off...age=page2#L2-C
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#13 |
![]() ![]() |
Bonjour Heureux-Oli,
Pourquoi est-ce que l'évènement est quand même géré s'il est placé dans ThisDocument directement sans la création d'un module de classe. Quelle est donc l'utilité de créer un module de classe? Est-ce uniquement pour pouvoir réutiliser l'évènement pour les document ayant un même modèle de document? Merci de me le confirmer. Cordialement, Christophe |
|
|
00
|
|
|
#14 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 292 ![]() |
Salut,
tu as raison, il n'est pas nécessaire d'utiliser un module de classe, j'ai sur ce point suivi les indications de MS qui préconise l'utilisation d'un module de classe contenant les évènements. Le seul avantage que j'y trouve, c'est qu'on peut le mettre dans le normal.dot ou un autre modèle et la gestion des évènements est centralisée. Maintenant, la différence entre Dim et Public, Public autorise l'utilisation partout alors que Dim ne le permet que dans le projet en cours et Private dans le module. Maintenant, MS préconise l'utilisation de Public alors que ça fonctionne aussi boen avec Dim dans ce cas.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#15 |
![]() ![]() |
Merci de ces précisions Heureux-Oli.
|
|
|
00
|
|
|
#16 | ||
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
Voici le code que j'ai placé dans ThisDocument
Code :
|
||
|
|
00
|
|
|
#17 |
![]() ![]() |
bonjour,
peux-tu enlever la partie document_close il ne faudrait pas qu'il mette à rien l'objet application wdapp. |
|
|
00
|
|
|
#18 |
|
Membre habitué
![]() Inscription : novembre 2008 Messages : 238 ![]() |
J'ai enlevé le Document_close mais cela ne change rien.
Je vais donc faire autrement. Lors de la fusion, les données sont transférées dans un fichier et les champs de fusion sont séparés par des ";". Je vais coder sur le autoOpen la récupération des valeurs des champs de fusion et l'ouverture des fichiers. Par contre, si on doit ajouter des champs de fusion dans le document, je devrai modifier la récupération des valeurs des champs de fusion. Cela aurait été plus propre avec la méthode MS. Merci beaucoup pour votre aide. Bonne journée. Julien. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com