texte conditionné dans une fusion

Le
Wlad69
Bonjour,

Je vous solicite de nouveau, par rapport à une autre question pour
laquelle je n'ai pas encore trouvé de solution.

Je suis chargé de modifier une série de modèles de fusion dans lequel
se trouve répéter des kyrielles de ligne du genre
{IF {MERGEFIELD Code} = "L001" {AUTOTEXT L001}}
{IF {MERGEFIELD Code} = "L002" {AUTOTEXT L002}}
{IF {MERGEFIELD Code} = "H001" {AUTOTEXT H001}}
etc

çà fonctionne mais il y a plus d'une cinquantaine de ligne comme cela,
et je trouve que :
1. c'est pas facile à maintenir, c'est complètement ilisible
2. c'est pas très efficace
3. Si la table des codes change, il faudra encore revenir sur tous les
documents dans lesquels cette séquence est présente.

J'ai essayé de remplacer par
{AUTOTEXT {MERGEFIELD Code}}
Ce qui renvoye bien un résultat mais pas le bon !

J'ai essayé aussi
{SET CodeLie {MERGEFIELD Code}}
{AUTOTEXT {MERGEFIELD CodeLie}}

Quelqu'un peut-il m'expliquer pourquoi cela ne fonctionne pas ?
Et mieux me donner une solution qui fonctionne

D'avance merci à tous.

Cordialement,

Wlad69
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Anacoluthe
Le #1583062
Bonjour !

'Wlad69' nous a écrit ...
J'ai essayé de remplacer par
{AUTOTEXT {MERGEFIELD Code}}
Ce qui renvoye bien un résultat ... mais pas le bon !
J'ai essayé aussi
{SET CodeLie {MERGEFIELD Code}}
{AUTOTEXT {MERGEFIELD CodeLie}}
Quelqu'un peut-il m'expliquer pourquoi cela ne fonctionne pas ?


Ça ne fonctionne pas parce que le champ AUTOTEXT ne passe pas la fusion.

En matière de fusion il y a :
- les champs qui 'passent' la fusion comme INCLUDETEXT , LINK etc
ce qui veut dire qu'on retrouve le champ dans le document de fusion
- les champs qui ne 'passent pas' la fusion comme IF , SET etc
ce qui veut dire qu'ils sont 'déchampés' AVANT la fusion, certains
sans mise à jour comme AUTOTEXT.

Si vous souhaitez continuer à utiliser les AUTOTEXT, il faudra
se contenter de la série des IF. Généralement la solution est
ailleurs : vous écrivez un simple { MERGEFIELD Code } et la
source de données relationnelle aura fait le reste.

Bien souvent ici le drame du publipostage tient à ce qu'on veut que
Word TRAITE les données, alors que le but n'est que de fusionner
des données dans des documents de fusion. Il suffit d'utiliser
les bons outils de gestion de bases de données et de fournir
les bonnes données à Word...

Anacoluthe
« Dans l’impossible fusion la confusion. »
- Jacques LACAN

JièL
Le #1583056
Hello

Il suffit d'utiliser
les bons outils de gestion de bases de données et de fournir
les bonnes données à Word...


des clous et un marteau en bref ! ;-))))))

--
JièL / Jean-Louis GOUBERT
Là bas mieux qu'en face ;-) http://forums.offices.free.fr/
La NOUVELLE Faq Outlook est là : http://faq.outlook.free.fr/index.php
Les stats de CDO : http://faq.outlook.free.fr/cdo/

Anacoluthe
Le #1583055
Re !

Si vous souhaitez continuer à utiliser les AUTOTEXT, il faudra
se contenter de la série des IF.


Je viens d'avoir une idée, suite à une autre ficelle sur les
événements de publipostage : avec WD2002 ou + , on pourrait
mettre à jour l' AUTOTEXT à chaque enregistrement à l'aide
de l'événement MailMergeBeforeRecordMerge

Private Sub wdApp_MailMergeBeforeRecordMerge(ByVal Doc As Document, _
Cancel As Boolean)
Doc.Fields.Update
End Sub

J'ai testé : ça marche !
Un { AUTOTEXT { Mergefield Code } } donne à la fusion le texte brut
de chaque insertion automatique nommée 'code'

Ça ne retire rien à ce que je pense sur l'intérêt d'Access, Excel
ou autres outils idoines pour traiter les données en amont de Word ;-)

Anacoluthe
« Dans l’impossible fusion la confusion. »
- Jacques LACAN

Wlad69
Le #1583049
On 13 mar, 21:11, Anacoluthe
Re !

Si vous souhaitez continuer à utiliser les AUTOTEXT, il faudra
se contenter de la série des IF.


Je viens d'avoir une idée, suite à une autre ficelle sur les
événements de publipostage : avec WD2002 ou + , on pourrait
mettre à jour l' AUTOTEXT à chaque enregistrement à l'aide
de l'événement MailMergeBeforeRecordMerge

Private Sub wdApp_MailMergeBeforeRecordMerge(ByVal Doc As Document, _
Cancel As Boolean)
Doc.Fields.Update
End Sub

J'ai testé : ça marche !
Un { AUTOTEXT { Mergefield Code } } donne à la fusion le texte brut
de chaque insertion automatique nommée 'code'

Ça ne retire rien à ce que je pense sur l'intérêt d'Access, Excel
ou autres outils idoines pour traiter les données en amont de Word ;-)

Anacoluthe
« Dans l'impossible fusion la confusion. »
- Jacques LACAN


Bonjour,

Merci pour cette solution, mais compte tenu de la dimension de la
structure dans laquelle je travaille; négocier le changement de
version ne sera pas chose facile.

J'ai expérimenté une solution à base de INCLUDETEXT qui fonctionne.
un truc du genre
Un document nommé "liste libellés.doc" dans lequel chaque libellé à
insérer est marqué par un signet. J'ai fait une macro pour automatiser
la création de la cinquantaine de signet.
Ensuite j'insère dans le document principal :
{INCLUDETEXT "C:\Chemin\liste libellés.doc" {MERGEFIELD Code}}

Ce qui me gêne dans cette solution c'est que le champ subsite dans le
document généré. D'où l'autre ficelle sur l' "exécution automatiq ue
d'une macro lors de la fusion".

Pour en revenir au fond du problème, effectivement, je chercher à
pallier l'insuffisance de données dans la source de fusion. En
replaçant les choses dans ce contexte, je me demande si un champ
DATABASE ne serait pas plus pratique. Qu'en penser vous ?
Quelle type de base me conseillez-vous ? Un fichier Excel peut-il
convenir ?

Cordialement,

Wlad69


Publicité
Poster une réponse
Anonyme