OVH Cloud OVH Cloud

Publipostage et modèles : comment le stipuler ?

8 réponses
Avatar
Patrick
Bonjour,
Je sèche sur un problème que je croyais simple au départ : stipuler un
fichier modèle à utiliser pour batir le document résultant d'une fusion.

Hélàs, toutes tentatives échouent, je n'arrive pas à obtenir que mon
résultat de fusion utilise un autre modèle que celui utilisé par le document
principal de fusion.


Illustration :
- j'ai un modèle (disons "A.DOT") contenant deux macros qui automatisent mes
traitement de fusions
(pré-traitement dans le fichier source de données + déclanchement de la
fusion, et Suppression du fichier source de données en sortie)

- Mon document principal de fusion (disons "B.DOC") est basé sur ce modèle
et hérite donc des macros d'automatisme.

Jusque là tout va bien.

- Lorsque la fusion est faite, un nouveau fichier est crée (disons "C.DOC"),
il contient bien le résultat attendu mais aussi hélas les deux macros
d'automatisme, et ça ce n'est pas voulu.
Le document resultat C.DOC se crée en utilisant le modèle A.DOT, puisque
c'est le modèle de référence du document principal de fusion. Du coup je
retrouve les macros d'automatisme aussi dans C.DOC, ce qui fiche la
grouille.


En résumé :
Est-il possible au niveau de la macro qui effectue le mailmerge, d'indiquer
que le nouveau document C.DOC devra être basé sur le modèle NORMAL.DOT, et
non sur le même modèle A.DOT que le document principal de fusion B.DOC ?


Que puis-je rajouter dans mon code actuel :

WordBasic.MailMergeMainDocumentType 0
WordBasic.MailMergeOpenDataSource Name:=tmpfilename$, ConfirmConversions:=0,
ReadOnly:=0, LinkToSource:=0, AddToMru:=0, PasswordDoc:="",
PasswordDot:="", Revert:=0, WritePasswordDoc:="", WritePasswordDot:="",
Connection:="", SQLStatement:="", SQLStatement1:=""

If WordBasic.AtEndOfDocument() <> -1 Then
WordBasic.MailMerge CheckErrors:=1, Destination:=0, MergeRecords:=0,
From:="", To:="", Suppression:=0, MailMerge:=1, MailSubject:="",
MailAsAttachment:=0, MailAddress:=""


Tout conseil sera apprécié, merci par avance ;)

Patrick.

8 réponses

Avatar
Anacoluthe
Bonjour !

Difficile de vous comprendre :-p
Vous ne précisez pas votre version (curieux WordBasic converti ?!?)
et semblez totalement confondre 'macro accessible DEPUIS un document'
et 'macro enregistrée DANS un document' ..... :-)
Faites Alt-F11 et regardez les modules.

Anacoluthe
« Inéluctable loi de l'humanité d'avoir toujours
quelque chose à ne pas comprendre. »
- Alphonse ALLAIS


'Patrick' nous a écrit ...
Bonjour,
Je sèche sur un problème que je croyais simple au départ : stipuler un
fichier modèle à utiliser pour batir le document résultant d'une fusion.

Hélàs, toutes tentatives échouent, je n'arrive pas à obtenir que mon
résultat de fusion utilise un autre modèle que celui utilisé par le document
principal de fusion.


Illustration :
- j'ai un modèle (disons "A.DOT") contenant deux macros qui automatisent mes
traitement de fusions
(pré-traitement dans le fichier source de données + déclanchement de la
fusion, et Suppression du fichier source de données en sortie)

- Mon document principal de fusion (disons "B.DOC") est basé sur ce modèle
et hérite donc des macros d'automatisme.

Jusque là tout va bien.

- Lorsque la fusion est faite, un nouveau fichier est crée (disons "C.DOC"),
il contient bien le résultat attendu mais aussi hélas les deux macros
d'automatisme, et ça ce n'est pas voulu.
Le document resultat C.DOC se crée en utilisant le modèle A.DOT, puisque
c'est le modèle de référence du document principal de fusion. Du coup je
retrouve les macros d'automatisme aussi dans C.DOC, ce qui fiche la
grouille.


En résumé :
Est-il possible au niveau de la macro qui effectue le mailmerge, d'indiquer
que le nouveau document C.DOC devra être basé sur le modèle NORMAL.DOT, et
non sur le même modèle A.DOT que le document principal de fusion B.DOC ?


Que puis-je rajouter dans mon code actuel :

WordBasic.MailMergeMainDocumentType 0
WordBasic.MailMergeOpenDataSource Name:=tmpfilename$, ConfirmConversions:=0,
ReadOnly:=0, LinkToSource:=0, AddToMru:=0, PasswordDoc:="",
PasswordDot:="", Revert:=0, WritePasswordDoc:="", WritePasswordDot:="",
Connection:="", SQLStatement:="", SQLStatement1:=""

If WordBasic.AtEndOfDocument() <> -1 Then
WordBasic.MailMerge CheckErrors:=1, Destination:=0, MergeRecords:=0,
From:="", To:="", Suppression:=0, MailMerge:=1, MailSubject:="",
MailAsAttachment:=0, MailAddress:=""


Tout conseil sera apprécié, merci par avance ;)

Patrick.




Avatar
geo
Bonjour
-----Message d'origine-----
En résumé :
Est-il possible au niveau de la macro qui effectue le
mailmerge, d'indiquer

que le nouveau document C.DOC devra être basé sur le
modèle NORMAL.DOT, et

non sur le même modèle A.DOT que le document principal de
fusion B.DOC ?


Il y a toujours la solution d'effacer les macros dans le
document, mais je doute qu'elles y soient réellement.
Il faudrait agir sur outils modèles et compléments pour
voir.

A+

Avatar
Patrick
Difficile de vous comprendre :-p


Désolé ;)
C'est vrai que ne je suis pas très familier de ce domaine, je vais essayer
de reformuler.


Vous ne précisez pas votre version (curieux WordBasic converti ?!?)


Les macros utilisées actuellement avaient été écrites à l'origin sous pour
Word95, puis elles ont été "converties" pour fonctionner en Word97,
et maintenant elles utilisées sous Word97, sous Word2000 et sous Word2002,
et y fonctionne très bien.



et semblez totalement confondre 'macro accessible DEPUIS un document'
et 'macro enregistrée DANS un document' ..... :-)


Ok, il est clair qu'il s'agit de macros DEPUIS un document.
Je m'explique :
- les deux macros sont présentes dans mon fichier modèle A.DOT.

- mon document principal de fusion B.DOC est basé sur ce modèle, je le vois
par un fichier/propriété, et aussi par Outils / Modèles et compléments.

- Lorsque j'ouvre mon document principal de fusion B.DOC et que je vais dans
Outils/Macro, je vois bien mes deux macro autoopen et autoclose, ce qui est
normal.
(à titre de confirmation, si je retire mon modèle A.DOT de son répertoire
et que j'ouvre le document principal de fusion B.DOC, je n'y retrouve aucune
macro, ce qui me semble tout à fait normal).

- or donc, lorsque je suis mon fichier B.DOC, et que je lance une fusion
vers un nouveau nouveau document (C.DOC), j'obtient bien le résultat de la
fusion, mais le problème est que ce nouveau document C.DOC s'est lui aussi
construit en se basant sur le modèle A.DOT, et donc dans C.DOC je retrouve
aussi les deux macros, présentes et actives.
Qu'elles soient accessibles dans ce document C.DOC me pose soucis.

J'essaye de trouver un moyen pour que lorsque mon document principal de
fusion (B.DOC) crée le document résultat de la fusion (C.DOC), cela se fasse
en utilisant comme modèle le NORMAL.DOT, qui qui est vierge de macro.


En gros j'essaye de trouver une syntaxe qui fasse l'équivalent de ceci
(ajout à la fin) :

WordBasic.MailMerge CheckErrors:=1, Destination:=0, MergeRecords:=0,
From:="", To:="", Suppression:=0, MailMerge:=1, MailSubject:="",
MailAsAttachment:=0, MailAddress:="", TEMPLATE:="normal.dot"

Bien sur, tel quel ça ne fonctionne pas...

Patrick.

Avatar
Patrick
Il y a toujours la solution d'effacer les macros dans le
document, mais je doute qu'elles y soient réellement.


Effectivement, elles n'y sont pas "physiquement", elles ne sont que dans le
fichier modèle.

Changer de fichier modèle est la piste que j'essaye de suivre :
que mon fichier résultat de macro soit basé sur un modèle standard genre
NORMAL.DOT, et non sur le même modèle que le document principal de fusion.

Mais cela doit être fait dès le départ, dès la création du fichier, et non à
postériori en intervenant dans "modèles et compléments".


patrick.

Avatar
Anacoluthe
Bonjour !

'Patrick' nous a écrit ...
J'essaye de trouver un moyen pour que lorsque mon document principal de
fusion (B.DOC) crée le document résultat de la fusion (C.DOC), cela se fasse
en utilisant comme modèle le NORMAL.DOT, qui qui est vierge de macro.


Videz la propriété AttachedTemplate du document /principal/
avant la fusion.

Anacoluthe
« Il n'y a pas de modèle
pour qui cherche ce qu'il n'a jamais vu. »
- Paul ELUARD

Avatar
Patrick
J'essaye de trouver un moyen pour que lorsque mon document principal de
fusion (B.DOC) crée le document résultat de la fusion (C.DOC), cela se
fasse en utilisant comme modèle le NORMAL.DOT, qui lui est vierge de
macro.



Videz la propriété AttachedTemplate du document /principal/
avant la fusion.



Merci pour la suggestion, mais après test je tombe sur ce que je craignais :

Si je change l'AttachedTemplate du document principal avant de lancer la
fusion, j'obtiens bien que le nouveau document généré par la fusion utilise
"normal.dot" comme modèle, ça ok,

mais problème : mon document principal devient lui aussi associé à
"normal.dot".

Du coup le document principal perd l'accès à ses macro, et n'execute pas la
macro autoclose requise en sortie.

Voici mon code :

ajout --> activeDocument.AttachedTemplate = "Normal.dot"
WordBasic.MailMerge CheckErrors:=1, Destination:=0,
MergeRecords:=0,
From:="", To:="", Suppression:=0, MailMerge:=1,
MailSubject:="",
MailAsAttachment:=0, MailAddress:=""


J'ai tenté de remettre après l'appel à la fusion un autre
activeDocument.AttachedTemplate pour rétablir le modèle de départ dans mon
document principal, mais la commande ne s'execute pas. Mon document
principal reste lié à normal.dot.


Bref, j'ai peut-être mal compris comment appliquer votre suggestion
Anacoluthe, mais toujours est-il que pour le moment je ne parviens pas à
dissocier le modèle utilisé pour le document principal et pour de document
résultat.

Je voudrais arriver à ce que le document principal soit lié au modèle A.DOT,
et le document résultat soit lié à NORMAL.DOT


Je reste bien sur ouvert à toute suggestion ;)

Patrick.


Avatar
Anacoluthe
Bonjour !

'Patrick' nous a écrit ...
J'ai tenté de remettre après l'appel à la fusion un autre
activeDocument.AttachedTemplate pour rétablir le modèle de départ dans mon
document principal, mais la commande ne s'execute pas. Mon document
principal reste lié à normal.dot.


Êtes-vous bien sûr qu'après fusion ActiveDocument soit
le document /principal/ ? Autres possibilités: agir sur
AttachedTemplate du document de fusion après la fusion,
placer les macros auto dans un modèle global etc...

Anacoluthe
« Il n'y a pas de modèle
pour qui cherche ce qu'il n'a jamais vu. »
- Paul ELUARD

Avatar
Patrick
J'ai tenté de remettre après l'appel à la fusion un autre
activeDocument.AttachedTemplate pour rétablir le modèle de départ dans
mon


document principal, mais la commande ne s'execute pas. Mon document
principal reste lié à normal.dot.


Êtes-vous bien sûr qu'après fusion ActiveDocument soit
le document /principal/ ? Autres possibilités: agir sur
AttachedTemplate du document de fusion après la fusion,
placer les macros auto dans un modèle global etc...



Merci pour vos réponse.
En imaginant comment appliquer votre réponse, je me vois parti dans une
usine à gaz qui dépassera tout de suite mes pauvres compétences en VBA,
aussi je vais laisser tomber et refiler le bébé à plus expérienté que moi.

Curieux, au départ je pensais assez facile d'obtenir qu'un Mailmerge utilise
un modèle particulier au lieu de reprendre le même modèle que le document
principal... mais non, ça semple plus complexe que prévu...
Tant pis ;)

Merci encore pour vos réponses.

Patrick.