5
(3)

Un cas classique, 2 tables liés (0,1 à n) par exemple une table Clients et une table Factures (si l'on préfère 2 bases de données).

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

Word Publipostage multibases

Comment faire un publipostage pour générer un courrier pour chaque client affichant les factures correspondantes ?

On pourrait penser à répéter les informations des clients 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 mais c'est une utilisation très 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 (une 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.

Les données des factures pouvant être dans :

  • Le même fichier Excel que les données Clients.
  • Un fichier différent du fichier des données Clients.
  • Voir même dans des fichiers individuels.

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

On commence par un publipostage standard lié à la table Client.

Étape 2 : Ajout du champ DATABASE

Nous allons insérer les données de 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 : les facture du 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.
  • On sélectionne la catégorie Publipostage puis le champ BaseDeDonnées.
  • On clique 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. On sélectionne la table/base de données Factures.
  2. On ajouter un critère de requête valide (le 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 (on peut enlever N°Client qui sera inutilement répété).
Word Publipostage multibases. Ajout d'un critère au champ DATABASE
Word Publipostage multibases. Ajout d'un critère au champ DATABASE
  1. Ce bouton permet de choisir une présentation du tableau des factures (liste/format non personnalisable !).
  2. On valide avec le bouton Insérer des données...
  3. Cocher Insérer en tant que champ puis valider avec le bouton OK.
Word Publipostage multibases Résultat insertion champ
Word Publipostage multibases Résultat insertion champ

É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.
Word Publipostage multibases Avant modification code du champ
  1. Remplacer la valeur 1 par le champ de fusion N°Client de la table/base de données Clients.
Word Publipostage multibases Apres modification code du champ
  1. 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

Cas ou les données factures sont dans des fichiers individuels

Dans ce cas, on n'utilise pas les Options de requêtes mais on remplace les chemins d'accès par un champ contenant les chemins d'accès aux fichiers de données de facturation.

Word Publipostage multibases Apres modification du code du champ pour des fichiers différents
Word Publipostage multibases Après modification du code du champ pour des fichiers différents

Exemple pour le Champ Factures donnant les chemins d'accès.

Word Publipostage multibases Champ contenant les chemins d'accès aux différents des fichiers

Merci pour votre attention bienveillante.

Article intéressant ?

Cliquez sur une étoile pour noter cet article !

Note moyenne 5 / 5. Nombre de votes : 3

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 *