Insère le résultat d’une requête basée sur une source de données via une connexion OLEDB ou ODBC.
- Si le résultat comporte 61 colonnes ou moins, Word génère un tableau standard,
- Au-delà de 61 colonnes, les données sont insérées sous forme de texte brut avec séparation par des tabulations.
- Ne permet pas un accès Cloud, Web, Sharepoint...
- Permet un accès à une source Excel, Access, SQL Server via ODBC, MySQL via ODBC, CSV via pilote ODBC/OLEDB.
Syntaxe
{ DATABASE [Commutateurs] }Commutateurs :
- \d "chemin" : Chemin d'accès à la source de Données.
- Utilisé pour toutes les requêtes sur la source de données sauf celles utilisant ODBC.
- Utilisez deux barres obliques inverses dans le chemin, par exemple, "C :\\Data\\Ventes.mdb".
- \l # : Numéros du format de tableau à utiliser correspondant aux formats visibles dans la boîte de dialogue "Mise en forme automatique de tableau".
- Valeur entre 1 et 42 (Lors de mes tests, un nombre supérieur à 42 provoque un plantage de Word).
- Si le commutateur \b n'est pas en plus précisé, le tableau n'aura aucune mise en forme autre qu'une simple bordure noir quel que soit \l.
- \b Somme : Valeur résultant de la somme de codes correspondant à divers paramètres de formatage (5 soit 1+4, on applique donc Bordure et Remplissage).
(Logique de drapeaux / Bitmask)
- La somme se situe entre 1 et 2047.
- Si \l est omis seule la valeur 16 (Ajustement des cellule) est prise en compte.
- Les paramètres "Bandes de lignes" et "Bandes de couleurs" semble inopérant quel que soit le format \l.
- Pour information : Les valeurs 512 et 1024 sont respectivement ajoutées si ces paramètres sont décochés (désactivation ?) !
- Certains paramètres :
- Semble inopérants avec certain format.
- Ne sont pas compatible suivant le format \l (exemple : l'activation du remplissage/4 fait disparaitre les bordures/1).
- \c : Instructions de Connexion.
- Ajouter un antislash (\) avant chaque guillemet dans le texte de l'instruction (caractère d'échappement).
- \f # : (From) Numéro d’enregistrement du premier enregistrement de données à insérer.
- \t # : (To) Numéro d’enregistrement du dernier enregistrement de données à insérer.
- \h : (Header) Utilise des noms de champs de la base de données en tant qu’en-têtes de colonne dans la table obtenue.
- \o : (Once ou On Merge .) Exécute la mise à jour du champ une seule fois en début de fusion lors d'un publipostage. Chaque document généré aura le même tableau.
- Sans lui, la requête de mise à jour est faite pour chaque enregistrement du document fusionné pouvant ainsi générer des tableaux différents pour chacun d'eux.
- \s SQL : Requête SQL
- Ajouter un antislash (\) avant chaque guillemet dans le texte de la requête (caractère d'échappement).
- Que des instructions de lecture comme SELECT, WHERE, GROUP BY, HAVING, DISTINCT... (pas de Drop Table, Insert, create / drop table, update ...).
Ajout du champ DATABASE
Il est plus simple de laisser Word configurer ce champ en utilisant la boîte de dialogue Champ plutôt que de le faire manuellement.
- On insère le champ via 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...

Cliquer sur le bouton Obtenir les données (1) pour sélectionner le fichier de la source de données.

Sélectionner dans la fenêtre Sélectionner le tableau le tableau, la table, la requête… à utiliser.

Cliquer sur le bouton Options de requête (2) pour ajouter des critères de sélection, des tris et de choisir les champs à importer.

Cliquer sur le bouton Mise en forme automatique du tableau (3) pour choisir la présentation / le formatage à appliquer.

- On retrouve les possibilités de choix pour les commutateurs \l et \b.
Cliquer sur le bouton Insérer des données (4) :
- Choisir la plage des enregistrements à importer (Tous ou De \f à À \t).
- Cocher Insérer en tant que champ (5).
Exemples de résultat
Excel
{ DATABASE
\d "C:\\MesDoc\\BasePubEquipe.xlsx" \c "Provider=Microsoft.ACE.OLEDB.12.0;
User ID=Admin;
Data Source=C:\\MesDoc\\BasePubEquipe.xlsx;Mode=Read;
Extended Properties=\"HDR=YES;IMEX=1;\";
Jet OLEDB:System database=\"\";
Jet OLEDB:Registry Path=\"\";
Jet OLEDB:Engine Type=37;
Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password=\"\";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Jet OLEDB:Support Complex Data=False;
Jet OLEDB:Bypass UserInfo Validation=False;
Jet OLEDB:Limited DB Caching=False;
Jet OLEDB:Bypass ChoiceField Validation=False"
\s "SELECT * FROM `Feuil1$`"
\l "1"
\b "511"
\h }- HDR=YES (Header / En-tête) : La première ligne de la plage Excel contient les noms des colonnes. Si NO les colonnes seront F1, F2... (Field).
- IMEX=1 (IMport EXport Mode) : Force le moteur d'Access/Excel (ACE/Jet) à basculer en mode Import et à évaluer l'ensemble de chaque colonne pour en déterminer le type.
- Par défaut, le moteur se base sur les 8 premières lignes de la colonne (valeur définie par la clé de registre TypeGuessRows de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Excel) pour "deviner" si la colonne contient du texte ou des nombres. Si une colonne contient principalement des nombres mais quelques textes plus bas, le moteur applique le type "Nombre" et masque ou transforme en valeurs vides (NULL) les cellules contenant du texte ! (Voir Initializing the Microsoft Excel driver | Microsoft Learn).
Version allégée
{ DATABASE
\d "C:\\MesDoc\\BasePubEquipe.xlsx"
\c "Provider=Microsoft.ACE.OLEDB.12.0;
Extended Properties=\"HDR=YES;IMEX=1\""
\s "SELECT * FROM `Feuil1$`"
\l "1"
\b "511"
\h }Access
{ DATABASE
\d "C:\\MesDoc\\Rh.accdb" \c "Provider=Microsoft.ACE.OLEDB.12.0;
User ID=Admin;
Data Source=C:\\MesDoc\\Rh.accdb;Mode=Read;
Extended Properties=\"\";
Jet OLEDB:System database=\"\";
Jet OLEDB:Registry Path=\"\";
Jet OLEDB:Engine Type=6;
Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password=\"\";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Jet OLEDB:Support Complex Data=False;
Jet OLEDB:Bypass UserInfo Validation=False;
Jet OLEDB:Limited DB Caching=False;
Jet OLEDB:Bypass ChoiceField Validation=False"
\s "SELECT `intNum`, `strPrenom`, `strNom`, `strSexe`, `strService` FROM `R_Hommes_Rh` WHERE ((`strPrenom` = 'Paul')) ORDER BY `strNom`"
\f "1"
\t "5"
\l "2"
\b {=1+2+4+8+16+32+128}
\h }- Noter ici l'utilisation d'un champ Formule pour calculer la valeur du commutateur \b (plus facilement décryptable ainsi).
Word : Mise en œuvre dans un publipostage
Voir l'article Publipostage à partir de 2 tables (Bases) liées
Astuce
- Par défaut, Word enregistre un chemin absolu pour les commutateurs \d et \c, il est tout à fait possible d'utiliser un chemin relatif.
- Ajouter \* MERGEFORMAT pour tenter de préserver les mises en forme appliquées.
Mise à jour
Contrairement aux champs classiques, DATABASE ne se met à jour dynamique à l'ouverture du document seulement si l'option Word "Mettre à jour les champs à l'ouverture" est activée.
Merci pour votre attention bienveillante.
