0
(0)

Un cas classique, 2 tables liés (0,1 à n) par exemple une table Clients et une table Facture (si vous préférer 2 bases de données).

Un client à de 0 à n facture, 1 facture ne correspond qu'a un client.

Word Publipostage multibases

Comment faire un publipostage pour générer un courrier pour chaque client présentant leurs factures ?

On pourrait penser à mettre répéter les informations client de la table Clients dans la table Facture à chaque enregistrement.

Outre la complexité de l'opération, on va être confronté au problème que chaque client n'a pas le même nombre de factures. L'utilisation des champs (règles) SUIVANT et SUIVANT SI permettant d'avoir plusieurs enregistrements sur une même page va être très complexe !
(Je ferai peut-être un article présentant cette solution permettant d'illustrer une utilisation complexe des champs)

On va utiliser une technique très "simple" avec l'utilisation du champ DATABASE (BaseDeDonnées).

Préalables

Les 2 tables doivent avoir un champ commun (colonne) permettant d'identifier quel client doit quelle facture.

Le champ N°Client semble être un bon choix (en base de données on parle de clé primaire / clé externe).

Dans cet exemple on va utiliser des fichiers/tableaux Excel plus classique.

Étape 1 : Création du publipostage avec la table Clients

Un publipostage standard.

Étape 2 : Ajout du champ DATABASE

Nous allons insérer la table/base de données Factures en tant que champ DATABASE en mettant en place un critère fixe dans la requête (exemple le client 1) puis nous rendrons dynamique ce critère pour s'adapter à chaque enregistrement de la table/base de données Clients.

On insère le champ pas le ruban Insertion > QuickParts > Champs

Sélectionner la catégorie Publipostage puis le champ BaseDeDonnées.

Cliquer sur le bouton Insérer une base de données...

Word Publipostage multibases Insertion du champ DATABASE
Word Publipostage multibases Insertion du champ DATABASE

La fenêtre suivante apparait.

Word Publipostage multibases Paramétrage du champ DATABASE
Word Publipostage multibases Paramétrage du champ DATABASE
  1. Sélectionner la table/base de données Factures.
  2. Ajouter un critère de requête valide (n°6 dans l'image suivante)
    Par exemple, on sélectionne seulement les enregistrements (factures) du client 1 (utiliser un client existant !).
    L'onglet Sélectionner les champs (n°7) permet de choisir quels champs (colonnes) conserver.
Word Publipostage multibases. Ajout d'un critère au champ DATABASE
Word Publipostage multibases. Ajout d'un critère au champ DATABASE
  1. Permet de choisir une présentation du tableau des factures (liste/format non personnalisable !).
  2. Valider avec le bouton Insérer des données...
  3. Cocher Insérer en tant que champ puis valider avec le bouton OK.

Étape 3 : Modification du champ DATABASE

On remplace la valeur en "dur" dans la requête (ici 1) par le champ de fusion N°Client de la table/base de données Clients.

  1. Alt + F9 pour afficher les codes de champs.
  2. Remplacer 1 par le champ de fusion N°Client de la table/base de données Clients.
  3. Alt + F9 à nouveau pour masquer les codes de champs.

Il n'y a plus qu'à lancer la fusion !

Remarques sur le formatage du tableau :

Les formatages proposés pour le champ DATABASE proviennent d'ancienne version de Word (97 /2000 je dirais) et ne sont pas très sympa 😒.

On retrouve le choix fait dans l'assistant dans le code du champ

  • Le commutateur \l (par exemple \l "16") correspondant au modèle choisie (1 à 42).
  • Le commutateur \b (par exemple \b "191") correspondant au paramètres/options sélectionnés.
Word Publipostage multibases Formatage du champ DATABASE

1+2+4+8+16+32+128 =191

Cas particulier : On ajoute 512 et 1024 quand on décoche les 2 dernières options (qui pour moi ne fonctionnent pas 🤪).

Le formatage manuel du tableau ou l'application d'un style de tableau avant la fusion est inutile.

La solution serait une macro appliquant un style de tableau à tous les tableaux par exemple.

Sub MEF_Tableau()
    Dim objTableau As Table
    
    For Each objTableau In ActiveDocument.Tables
        ' Pour identifier les tableaux à mettre en forme, on pourrait
        '   utiliser la 1ere cellule (inutile s'il n'y pas d'autres
        '   tableaux autres que ceux générés par le champ DATABASE).
        If objTableau.Cell(1, 1).Range.Text Like "Fact*" Then 
            objTableau.Style = "Tableau Grille 5 Foncé - Accentuation 1"
        End If
    Next
End Sub

Merci pour votre attention bienveillante.

Article intéressant ?

Cliquez sur une étoile pour noter cet article !

Note moyenne 0 / 5. Nombre de votes : 0

Aucun vote pour l'instant ! Soyez le premier à noter ce post.

Nous sommes désolés que cet article ne vous ait pas été utile !

Améliorons cet article !

Dites nous comment nous pouvons améliorer cet article ?

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *