Création d'une fonction ou d'un "champ" sur Word pour publipostage

laurent02 Messages postés 12 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 22 février 2010 - 4 mars 2007 à 14:53
laurent02 Messages postés 12 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 22 février 2010 - 10 mars 2007 à 08:43
Bonjour à tous,


Voila je me jette à l'eau pour ma 1ère question car je n'ai pas trouvé de solution sur notre forum.


J'ai mon gros système qui m'envoie des flux de données (référence client, nom et adresse client) que je dois publiposter. Ces données me sont envoyées pas CFT avec un format dbf.


J'ai automatisé le tout sur Word et tout marche sans problème


Depuis peut je dois mettre une adresse de retour des courriers qui est fonction de la référence client (les 3 premiers caractères) mais mon gros système ne peut pas me donner cette info.


Voila enfin ma question, j'ai essayé de créer une fonction (ou un champ) en VB qui prend les 3 premiers caracteres de la référence et me donne automatiquement la bonne adresse :


[I]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"
Else
    RecupAdresse = "3 Rue Machin  75001 Paris"
End If


End Function/I

Mais je n'arrive à créer mon champ sur Word.


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


Avez-vous une idée ?


Merci pour vos réponse


Amicalement  Laurent

8 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 mars 2007 à 09:53
Bonjour,

Je n'ai pas bien compris ton problème. Tu crée une source de données pour ton
publipostage ou tu souhaite insérer ta chaîne de carac directement dans le
document???

Si tu soaite faire un publipostage alors il faut dans un premier temps faire
une source de données (un fichier Excel par exemple) ensuite tu crée des champs
dans Word et tu effectue ton publipostage.

Par contre à mon avie se seraient plus simple de crée ton document "maître"
(celui dans le quel le publipostage s'effectue) et faire un code qui ne fais
que renseigner ta source de données et non qui crée ton document "maître".
A moins que cela est un réel intérêt mais je ne voie pas le quel.

Si tu à besoin d'aide pour créer ton doc. "Maître" ou renseigner ta
source de données n'hésite pas à re-demander sur ce topic je recevrais un mail
et je répondrais du mieux que je peux. Remarque : tu peux prendre le contrôle
d'Excel avec Word relativement simplement.

A+ et bonne chance (qui à dit pour le lire!!! Lol )






Pour ceux qui me connaise me re-voila (fin d'une periode de chomage). Bonjours à tous.
.




Avant que l'on me fasse la remarque je suis nulle
en orthographe, je le sais et je fais des effort pour être compréhensible (et
je ne peut pas me permettre de passée trop de temps à me corriger).
0
laurent02 Messages postés 12 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 22 février 2010
5 mars 2007 à 12:19
Merci Polack77 pour ta réponse.

Je me suis mal expliqué, Je vais reformuler mon problème plus clairement :

J'ai une source de données qui m'arrive directement dans une boite sur mon serveur. Dans cette source j'ai toutes les infos pour faire mon publipostage (ref du client, nom, prénom, adresse du client,  informations perso du client, nom du conseiller qui a eu le client, ...).

J'ai toutes les infos sauf l'adresse où le client doit me retourner le client (car avant on avait qu'une seule adresse et maintenant on c'est regroupé nationalement).

Je ne peux pas modifier ou ajouter des informations que m'envoie mon gros système, c'est trop long et trop compliqué.

Alors je cherche une méthode simple pour qu'en fonction des 3 premiers caractères de la référence du client, je mette l'adresse de retour que je veux.

J'espérais pouvoir créer une fonction simple comme je peux le faire sur Excel et l'utiliser directement comme un champ sur Word, mais pas moyen ...

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

Merci de ton aide

Amicalement  Laurent
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 mars 2007 à 13:08
???
Ca ne marche pas en passant par Excel???
Tu à fais quois dans Excel???
Si tu ne veus/peut pas modifier ta source de donnée peut ut en construire une autre (si le fichier est "lourd" ca peut provoquer des ralentisement)? Dans ce cas tu importe toute les données dans Excel (attention à formaté tes cellule en texte si non tes chaine de carac de valeur numérique se retrouve tranqué. Ex : "001123574" sera remplacé par "1123574") et tu place en plus une formule du genre :
"=SI(GAUCHE(A2;3) = "001";"3 Rue Machin";SI(GAUCHE(A2;3) = "002";"17 Rue Truc";SI(GAUCHE(A2;3) = "003";"23 Rue Bidule";"3 Rue Machin")))"

Si ca ne marche toujours pas teste copier, collage spécial, valeur.

Si ca ne marche toujours pas je ne comprand pas.

Tu à la possibilité d'executé une macro apprés le publipostage (je ne sais pas si il est possible de l'automatisé mais si non ce n'est qu'un bouton à présser). Dans ce cas tu teste la référance client (qui à subi un publipostage donc cette référance dois toujours étre placé au même endrois de ton doc) et tu insére la chaine retourner par la fonction que tu à mit sur ton 1ér post.
Si tout ca ne marche pas je ne sais pas trop ce qui pourrais marché.
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 mars 2007 à 13:23
A oui pardon.
Si tu ne sais pas te déplacé dans un fichier Word sache qu'il est possible de se placé à un numéro de paragraphe

activedocument.Paragraphs(num).Range //Get ou Set du paragraph num
activedocument.Paragraphs.Count //Retourne le nombre de paragraphe

Remarque : activedocument travail sur le doc actif si non tu peut faire 'documents(X)' ou X est soit un numéro (1 est le dernier doc ouvert) soit le nom du doc (ex : "toto.doc")

Tu devrais logiquement connaitre le nombre de paragraphe d'une page donc en fesant une boucle tu dois pouvoir lui dire un truc du genre :
activedocument.Paragraphs(Page * NbParaPage + Y).range = "Texte avant l'adrs" + "Adrs qui vas bien" + "Texte appré l'adrs"
Dans ce cas "Adrs qui vas bien" sera remplacer par ta fonction recevant comme paramétre
droite(gauche(activedocument.Paragraphs(Page * NbParaPage + Z).range,A),B)

Dit mois ce que pense de cette façon de faire.

Amitié
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
laurent02 Messages postés 12 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 22 février 2010
6 mars 2007 à 11:05
Merci de ton aide,

Je vois bien ce que tu veux dire, mais à ton avis, est-ce qu'il est possible de créer un champ "3PremiersCaractere" sur Word du style :

{IF 3PremiersCaractere(Ref)="001" "on met Adresse 1" "on metAdresse2" \* MERGEFORMAT}

Ça arrangerai facilement mon problème.

Je n'aurai plus qu'a imbriquer mes "If" pour mettre toutes mes adresses et surtout ça m'éviterai de tout modifier la programmation actuellement en place.

Merci de votre aide.

Amicalement    Laurent
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
6 mars 2007 à 11:33
????
Tes référances sont de longueur variable? Quel probléme à tu pour récup cette valeur? (Tu sais que tu peut crée des macro dans Word et même dans "Normal.dot" donc les fonction seront utilisable quel que soit le doc démarer, mais je trouve plus "propre" de crée un fichier "Macro.doc" dans le quel tu indique que doc est à traiter, grace à une combobox par exemple, tu récup avec une boucle le nom de tout les fichier ouvert tu les met dans un combobox un bouton et le tour est jouer).


Une fois ta réféance récupéré tout devrais bien se passée en fesant l'exemple que je t'ai mit plus haut.


Mais de toute façon tu aura besoin de faire des 'if' ou un 'swith' dans une fonction pour diférancier tes adrs mais un 'truc' comme ce que tu à mit dans ton 1ér poste marche.



En gros je ne comprant pas où tu à un problème.


A+
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
8 mars 2007 à 11:35
Ça marche?
Pourrais tu faire
profité à la communauté de la façon dont
tu à résolut ton problème, et accepté une
réponse (même si cette dernierre est dans un poste posté
par toi).




Amicalement
0
laurent02 Messages postés 12 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 22 février 2010
10 mars 2007 à 08:43
Non, je n'arrive pas vraiment à trouver ce que je cherche.

Je ne veux pas trop toucher au code existant (qui en plus est protégé par mot de passe). Je voulais juste pouvoir créer un champ qui aurait pu me donner en retour les adresses correspondantes.

Dès que je trouve je post ma solution.

Merci beaucoup de ton aide.

amicalement   Laurent
0
Rejoignez-nous