Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

création d'un champ a partir d'une fonction VB

30 réponses
Avatar
Laurent
Bonjour,

Je recherche le moyen de créer un champ sur Word pour transformer
automatiquement les 3 premiers caracteres d'une référence en adresse ou
qu'un champ puisse lancer automatiquement une fonction (ou sub).

Je m'explique :
Je m'occupe de l'impression de document pour nos clients, avant je devais
mettre qu'une seule adresse de retour au client, maintenant que nous avons
fusionné avec 7 autres groupes, je dois mettre, en fonction de la référence
du client, 7 adresses differentes.

J'aurai voulu créer un champs a partir d'une fonction VB de ce style là :



Function RecupAdresse(Ref As String)

If gauche(Ref, 3) = "001" Then
RecupAdresse = "3 Rue Machin 75001 Paris"
ElseIf gauche(Ref, 3) = "002" Then
RecupAdresse = "17 Rue Truc 59000 Lille"
ElseIf gauche(Ref, 3) = "003" Then
RecupAdresse = "23 Rue Bidule 02000 Laon"
ElseIf [7 fois ...]
Else
RecupAdresse = "3 Rue Machin 75001 Paris"
End If

End Function


Pour après mettre le champ sur word comme ça :

{=RecupAdresse(MERGEFIELD "Ref") \* MERGEFORMAT}


Je ne peux pas modifier ma base de données ni modifier le programme qui
lance la fusion (mot de passe)

J'espère avoir été clair ...

Avez-vous une idée ?

Merci pour vos réponse

Amicalement Laurent

10 réponses

1 2 3
Avatar
Circé
Bonjour laurent,

Si je comprends bien, tu fais du publipostage pour ton client.

Des conditions peuvent être créées directement avec les champs
eux-mêmes. On pourrait donc éviter la macro. Cela étant dit, les codes
de champ ne connaissent pas les fonctions d'extraction comme Gauche.
Cependant, peux tu nous dire exactement de quoi se compose exactement
le champ Référence et s'il a toujours le même format. Selon son format,
on peut peut être faire quelque chose.

Circé
http://faqword.free.fr


Laurent a pensé très fort :
Bonjour,

Je recherche le moyen de créer un champ sur Word pour transformer
automatiquement les 3 premiers caracteres d'une référence en adresse ou
qu'un champ puisse lancer automatiquement une fonction (ou sub).

Je m'explique :
Je m'occupe de l'impression de document pour nos clients, avant je devais
mettre qu'une seule adresse de retour au client, maintenant que nous avons
fusionné avec 7 autres groupes, je dois mettre, en fonction de la référence
du client, 7 adresses differentes.

J'aurai voulu créer un champs a partir d'une fonction VB de ce style là :



Function RecupAdresse(Ref As String)

If gauche(Ref, 3) = "001" Then
RecupAdresse = "3 Rue Machin 75001 Paris"
ElseIf gauche(Ref, 3) = "002" Then
RecupAdresse = "17 Rue Truc 59000 Lille"
ElseIf gauche(Ref, 3) = "003" Then
RecupAdresse = "23 Rue Bidule 02000 Laon"
ElseIf [7 fois ...]
Else
RecupAdresse = "3 Rue Machin 75001 Paris"
End If

End Function


Pour après mettre le champ sur word comme ça :

{=RecupAdresse(MERGEFIELD "Ref") * MERGEFORMAT}


Je ne peux pas modifier ma base de données ni modifier le programme qui
lance la fusion (mot de passe)

J'espère avoir été clair ...

Avez-vous une idée ?

Merci pour vos réponse

Amicalement Laurent


Avatar
Geo

Je ne peux pas modifier ma base de données ni modifier le programme qui
lance la fusion (mot de passe)


Malgré ces restrictions, vous est-il possible d'extraire des éléments
et en faire une base provisoire qui pourrait être exploitée pour la
fusion?


Function RecupAdresse(Ref As String)

If gauche(Ref, 3) = "001" Then
RecupAdresse = "3 Rue Machin 75001 Paris"
ElseIf gauche(Ref, 3) = "002" Then
RecupAdresse = "17 Rue Truc 59000 Lille"
ElseIf gauche(Ref, 3) = "003" Then
RecupAdresse = "23 Rue Bidule 02000 Laon"
ElseIf [7 fois ...]
Else
RecupAdresse = "3 Rue Machin 75001 Paris"
End If

End Function


Mieux vaudrait :
Select Case Left(Ref, 3)
Case "001"
RecupAdresse = "3 Rue Machin 75001 Paris"
Case "002"
RecupAdresse = "17 Rue Truc 59000 Lille"
Case ...

Case Else
RecupAdresse = "3 Rue Machin 75001 Paris"
End Case
Le premier Case étant inutile en pratique.

Hélas on ne peut pas programmer des champs en Word.

--
A+

Avatar
Anacoluthe
Bonjour !

'Laurent' nous a écrit ...
Pour après mettre le champ sur word comme ça :
{=RecupAdresse(MERGEFIELD "Ref") * MERGEFORMAT}


Pour juste 7 valeurs dans un publipostage, j'opte pour une soluce SANS macro
Tout sur une seule ligne :
{IF {MERGEFIELD Ref } = "001" "3 Rue Machin 75001 Paris" }
{IF {MERGEFIELD Ref } = "002" "17 Rue Truc 59000 Lille" }
etc
Les champs s'écrivent avec Ctrl+F9 ou avec 'Insérer un mot-clé" de la barre
d'outils Fusion et publipostage

Anacoluthe
« Pourquoi faire simple quand on peut faire compliqué ? »
- Jacques ROUXEL

Avatar
Anacoluthe
Re !

Tout sur une seule ligne :
{IF {MERGEFIELD Ref } = "001" "3 Rue Machin 75001 Paris" }
{IF {MERGEFIELD Ref } = "002" "17 Rue Truc 59000 Lille" }
etc
Les champs s'écrivent avec Ctrl+F9 ou avec 'Insérer un mot-clé" de la barre
d'outils Fusion et publipostage


Oups pardon. Tiré trop vite.
Avais pas vu qu’il fallait tronquer le début du champ.
Dans ce cas on s’en sort par des opérateurs de comparaison :
un champ "001trucmachin" est inférieur à "002".
On peut donc continuer à traiter ça avec juste des IF sans macro.

Anacoluthe
« Pourquoi faire simple quand on peut faire compliqué ? »
- Jacques ROUXEL

Avatar
JièL
Bonjoir(c) Anacoluthe

Le 28/04/2007 11:58 vous avez écrit ceci :
Re !

Tout sur une seule ligne :
{IF {MERGEFIELD Ref } = "001" "3 Rue Machin 75001 Paris" }
{IF {MERGEFIELD Ref } = "002" "17 Rue Truc 59000 Lille" }
etc
Les champs s'écrivent avec Ctrl+F9 ou avec 'Insérer un mot-clé" de la
barre
d'outils Fusion et publipostage


Oups pardon. Tiré trop vite.


ah ok, je me disais que Word avait bien évolué d'un seul coup ;-))))

On peut donc continuer à traiter ça avec juste des IF sans macro.


En espérant qu'il n'y en ai pas un million, car sinon... ;-)
Heing ? non, un million c'est pas tant que ça chez moi ;-)))

JièL Mille yonaire


Avatar
heureux-oli
Je vais te proposer une astuce qui n'est pas du VB.
En Word, il y a les options de correction automatique.
L'est utiliser pour ce que tu veux faire est possible.

Il faut choisir trois caractères et un caractère spécial facilement
accessible, le & va assez bien.
Ex : 001& serait remplacé par la première adresse.

Etc....


"Laurent" a écrit dans le message de news:

Bonjour,

Je recherche le moyen de créer un champ sur Word pour transformer
automatiquement les 3 premiers caracteres d'une référence en adresse ou
qu'un champ puisse lancer automatiquement une fonction (ou sub).

Je m'explique :
Je m'occupe de l'impression de document pour nos clients, avant je devais
mettre qu'une seule adresse de retour au client, maintenant que nous avons
fusionné avec 7 autres groupes, je dois mettre, en fonction de la
référence
du client, 7 adresses differentes.

J'aurai voulu créer un champs a partir d'une fonction VB de ce style là :



Function RecupAdresse(Ref As String)

If gauche(Ref, 3) = "001" Then
RecupAdresse = "3 Rue Machin 75001 Paris"
ElseIf gauche(Ref, 3) = "002" Then
RecupAdresse = "17 Rue Truc 59000 Lille"
ElseIf gauche(Ref, 3) = "003" Then
RecupAdresse = "23 Rue Bidule 02000 Laon"
ElseIf [7 fois ...]
Else
RecupAdresse = "3 Rue Machin 75001 Paris"
End If

End Function


Pour après mettre le champ sur word comme ça :

{=RecupAdresse(MERGEFIELD "Ref") * MERGEFORMAT}


Je ne peux pas modifier ma base de données ni modifier le programme qui
lance la fusion (mot de passe)

J'espère avoir été clair ...

Avez-vous une idée ?

Merci pour vos réponse

Amicalement Laurent




Avatar
Geo

En espérant qu'il n'y en ai pas un million, car sinon... ;-)


Il n'y en a "que" 7, donc "que" 6 if imbriqués.

--
A+

Avatar
Anacoluthe
Bonjour !

'Geo' nous a écrit ...
En espérant qu'il n'y en ai pas un million, car sinon... ;-)


Il n'y en a "que" 7, donc "que" 6 if imbriqués.


Et même pas besoin de s'enquiquiner à les imbriquer
mébon à Marseille 7 ifs c'est déjà toxique :
http://www.mairie-marseille.fr/vdm/cms/accueil/EspacesVertsetNaturels/PlantesToxiques/cache/pid/pid/598

:-)

A~


Avatar
Laurent
Merci à tous pour vos réponses

La références que j'utilise à 17 caractères et les 3 premiers correspondent
au site de mon client.Cette référence est séparée par des espaces par
exemple : "001 10 123 456 789 123". Et pour chaque debut de référence (3
premiers caractères) je dois mettre une adresse de retour de courrier
différente en pied de page

J'ai déjà essayé de faire des conditions inférieurs ("001trucmachin" est
inférieur à "002") comme le propose Anacoluthe, mais ça ne fonctionne pas.

Et la solution de Heureux-Oli en utilisant les options du correcteur
orthographique ne peut pas fonctionner car je dois mettre en haut du
courrier la références (à 17 caractères) du client et en bas l'adresse du
site (adresse qui est fonction des 3 premiers caractères de cette référence)

Je n'ai pas la possibilité de créer une base provisoire comme le propose Géo
car l'outil qui est utilisé en ce moment va extraire les données d'un gros
système, va créer un fichier excel et lancer dans la foulée le publipostage.
Je ne peux pas avoir la main sur les infos pendant le traitement. C'est pour
ça que je dois travailler que sur Word.

Merci à tous de votre aide.

Amicalement

Laurent






"Laurent" a écrit dans le message de news:

Bonjour,

Je recherche le moyen de créer un champ sur Word pour transformer
automatiquement les 3 premiers caracteres d'une référence en adresse ou
qu'un champ puisse lancer automatiquement une fonction (ou sub).

Je m'explique :
Je m'occupe de l'impression de document pour nos clients, avant je devais
mettre qu'une seule adresse de retour au client, maintenant que nous avons
fusionné avec 7 autres groupes, je dois mettre, en fonction de la
référence

du client, 7 adresses differentes.

J'aurai voulu créer un champs a partir d'une fonction VB de ce style là :



Function RecupAdresse(Ref As String)

If gauche(Ref, 3) = "001" Then
RecupAdresse = "3 Rue Machin 75001 Paris"
ElseIf gauche(Ref, 3) = "002" Then
RecupAdresse = "17 Rue Truc 59000 Lille"
ElseIf gauche(Ref, 3) = "003" Then
RecupAdresse = "23 Rue Bidule 02000 Laon"
ElseIf [7 fois ...]
Else
RecupAdresse = "3 Rue Machin 75001 Paris"
End If

End Function


Pour après mettre le champ sur word comme ça :

{=RecupAdresse(MERGEFIELD "Ref") * MERGEFORMAT}


Je ne peux pas modifier ma base de données ni modifier le programme qui
lance la fusion (mot de passe)

J'espère avoir été clair ...

Avez-vous une idée ?

Merci pour vos réponse

Amicalement Laurent




Avatar
Anacoluthe
Bonjour !

'Laurent' nous a écrit ...
La références que j'utilise à 17 caractères et les 3 premiers correspondent
au site de mon client.Cette référence est séparée par des espaces par
exemple : "001 10 123 456 789 123". Et pour chaque debut de référence (3
premiers caractères) je dois mettre une adresse de retour de courrier
différente en pied de page


Si votre référence est purement numérique, vous devriez pouvoir extraire
avec un champ formule (partie entière de Ref divisé par je sais pas combien
de milliards - c'est JièL qui va rigoler - ) la partie initiale de REF
Si votre référence est alphanumérique les opérateurs de comparaison
devraient marcher.
S'il faut absolument une macro, ce n'est pas hypercompliqué mais il
faut utiliser les événements du publipostage de façon à traiter chaque champ
REF pour chaque fusion d'enregistrement (MailMergeBeforeRecordMerge).
Je continue à m'accrocher à une soluce SANS macro :-) ))))

Il va sans dire que ce que nous proposons ici est totalement débile s'il
est possible de travailler à la /source/ avec un champ calculé sur REF.
Si votre source est réellement /intouchable/ (dictature informatique,
système antique totalement sclérosé, développeurs enterrés) pensez
qu'il est possible de travailler avec une source /liée/ : un bête
tableau EXCEL branché sur votre source intouchable peut faire l'affaire.
Là encore je prône une soluce SANS vba.

JièL, je gagne combien de points d'AMIS là ???

Anacoluthe
« Un gentleman, c'est quelqu'un qui sait jouer
de la cornemuse et qui n'en joue pas. »
- Pierre DESPROGES

1 2 3