IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Word Discussion :

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


Sujet :

Word

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Création d'une fonction ou d'un "champ" sur Word pour publipostage
    Bonjour à tous,

    Voila je me jette à l'eau pour ma 1ère question car je n'ai 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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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
    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

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Laurent02,

    Pour commencer, quelle est la version de Word que vous utilisez (car en ce qui concerne le publipostage Microsoft a cru bon d'apporter des modifications importantes après la version 2000 (9.0).

    Si vous n'avez que 3 contraintes, au lieu de passer par VBA, il doit être possible de faire plus simple et de passer par "Insérer un mot clé" (répété 2 fois).

    Sinon si vous préférez la solution VBA, je suppose que lorsque vous voulez remplir le nouveau champ votre tableau est déjà créé par l'importation de données externes ?

    Si oui, le texte à insérer dans le nouveau champ dépend du contenu d'un autre champ.

    A mon avis il faut donc créer un module qui va détecter la dernière ligne du tableau puis utiliser une variable pour le N° de ligne (en général la 1ère ligne de données est la N° 2). Cette variable sera incrémentée de 1 à chaque passage dans la boucle et la cellule contenant Ref "(gauche(Ref, 3) = "001")"
    sera testée pour affecter la valeur à la variable "RecupAdresse" qui elle-même sera affectée à la cellule concernée à travers une ligne de code du genre :

    Cell(Row:=ligneencours, Column:=5) = RecupAdresse

    Il faudrait donc apporter quelques précisions et pourquoi pas un exemple de votre tableau avec simplement 3 ou 4 lignes dont les données qui pourraient être confidentielles seront modifiées.

    Amicalement.

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci Jacques Jean pour votre aide.

    J'ai la version Word 2000 (9.0) et je ne peux pas en changer, nos postes sont standardisés au possible, nos droits sont très limités.

    J'ai en tout 7 adresses différentes à mettre, c'est vrai que sur ce point, je me suis mal expliqué.

    Je ne vois pas bien comment passer par "Insérer un mot clé". Le système doit imprimer plus de 2000 courriers par jour.

    Le texte à insérer dépend effectivement du contenu d'un autre champ. L'idée de travailler le fichier de données est bonne mais m'oblige de le faire passer dans une "moulinette" avant de l'envoyer sur Word pour qu'il soit publiposter.

    Sinon, je n'ai pas d'exemple de fichier sous la main (je suis en congés cette semaine) mais c'est un simple fichier dbf avec à chaque fois la ref du client, son nom, son adresse, le nom du conseiller qui a émis le courrier et des infos particulières concernant le client (champs spéciaux à incruster dans le courrier pour le personnaliser).

    L'idéal serait effectivement de créer une info dans "Insérer un mot clé", mais je n'ai pas trouvé la combine ...

    Merci pour vos réponses.

    Amicalement Laurent

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour Laurent02,

    Dans votre exemple il y avait 3 possiblités, c'est la raison pour laquelle j'avais évoqué la possiblité d'insérer un mot clé (si alors sinon).

    Cela revenait à insérer 2 si, le 1er avec le texte a afficher si = et rien si différent. Le 2ème avec les 2 possibilités restantes.

    Pour 7 cas différents il faudrait insérer 6 fois. Ce n'est pas impossible, mais c'est la mise en page de votre lettre type qui risque de ne pas convenir.

    Si vous avez le temps, je regarde le code VBA sous Word (j'ai bien plus l'habitude avec Excel ou Access) mais aucune raison de ne pas y parvenir sous Word. En fonction de ma disponibilité dans la journée je pense vous proposer une solution dans la soirée ou demain.

    Une question cependant au cas où : disposez vous d'Excel ?

    Car le fichier .dbf peut-être ouvert par Excel et le Publipostage peut-être fait sous Word à partir d'un tableau de données Excel.

    Amicalement.

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup Jacques Jean de passer du temps pour moi.

    J'ai effectivement excel, et j'ai l'habitude de créer des fonctions sur VB Excel, on peut facilement les utiliser après sur le tableur.

    Sinon, oui vous avez raison, on peut faire une fusion a partir d'un fichier Excel, mais je suis dans ce cas obligé de modifier l'automatisme de publipostage qui fonctionne entre Word et le fichier DBF. Si je n'ai pas d'autre solution plus simple, je serai obligé de passer pas là.

    Amicalement Laurent

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir Laurent02,

    Donc si j'ai bien compris vous ouvrez votre base de données .dbf sous Word.

    Vous ouvrez donc le fichier recevant cette base de données.

    Vous cliquez sur Outils puis Visual Basic Editor puis vous sélectionnez (si nécessaire) "Project(Nom de votre fichier) puis ThisDocument.

    Vous collez le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub Adresse()
    Dim plign, nbl As Long
    Dim dcol, crefcli, cadretour As Byte
    Dim refcli, adretour As String
    
    '1ère ligne de données du tableau
    plign = 2
    'N° de la colonne contenant la référence client (à modifier éventuellement)
    crefcli = 4
    'Nombre de champs de votre base de données .dbf (à modifier éventuellement)
    dcol = 6
    cadretour = dcol + 1
    
    
    'Ici une nouvelle colonne va être ajoutée et le titre "Adresse retour" va être inséré (vous pouvez le modifier
    mytable = Tables(1)
    nbl = mytable.Rows.Count
    mytable.Columns(6).Select
    Selection.InsertColumnsRight
    ActiveDocument.Tables(1).Cell(1, cadretour).Select
    With Selection
    .TypeText Text:="Adresse retour"
    End With
    
    
    'Modifier les 7 "adretour" avec vos adresses réelles
    For n = plign To nbl
    ActiveDocument.Tables(1).Cell(n, crefcli).Select
    With Selection
    refcli = Selection
    refcli = Left(refcli, 3)
    If refcli = "001" Then
    adretour = "3 Rue Machin  75001 Paris"
    ElseIf refcli = "002" Then
    adretour = "17 Rue Truc 59000 Lille"
    ElseIf refcli = "003" Then
    adretour = "23 Rue Bidule  02000 Laon"
    ElseIf refcli = "004" Then
    adretour = "wwwww"
    ElseIf refcli = "005" Then
    adretour = "xxxxxxx"
    ElseIf refcli = "006" Then
    adretour = "yyyyyyy"
    Else
    adretour = "zzzzzzzz"
    End If
    End With
    ActiveDocument.Tables(1).Cell(n, cadretour).Select
    With Selection
    .TypeText Text:=adretour
    End With
    
    Next n
    If ActiveDocument.Saved = False Then ActiveDocument.Save
    
    End Sub
    Je ne suis pas particulièrement fier de ce code mais d'une part cela a le mérite de fonctionner et d'autre part, je l'ai déjà dit, je ne suis pas habitué à VBA pour Word.

    N'hésitez pas en cas de problème.
    Bonne soirée.
    Amicalement.

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup Jacques Jean de votre aide

    Je vais tester votre solution en réel dès la semaine prochaine (à mon retour de vacances)

    Amicalement Laurent

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2015, 12h42
  2. Création d'une fonction sans paramètre?
    Par falcon dans le forum Oracle
    Réponses: 3
    Dernier message: 13/12/2004, 11h32
  3. Réponses: 14
    Dernier message: 09/04/2004, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo