Création d'un modèle pour un groupe d'utilisateur

Olivier Lebeau

Lorsque Word est utilisé dans une même entité, il est courant que chaque utilisateur ait ses propres modèles. Souvant, les documents crées par un même service ne sont pas homgène.
Dans ce tutoriel, nous allons aborder une méthode permettant l'harmonisation des modèles de document pour une équipe ou un service.

- Titre : Création d'un modèle pour un groupe d'utilisateur

- Auteur : Olivier Lebeau

- Parution : 27 février 2010

- Licence : Copyright ® 2010 Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 1. Introduction

- 2. Les données relatives aux utilisateurs

- 2-A. Access

- 2-B. Excel

- 2-C. Document Word

- 3. Création de notre modèle

- 3-A. Récupération des données

- 3-A-1. Access

- 3-A-2. Excel

- 3-A-3. Word

- 3-B. Injection des données

1 - Introduction

Dans ce tutoriel, nous allons explorer le moyen d'uniformiser les modèles de document pour uniformiser les documents émis et simplifier le travail de mise à jour des modèles.

Le premier requis est d'avoir des sessions différentes pour chaque utilisateur. Nous allons ensuite récupérer les informations de la session pour identifier l'utilisateur pour lui attribuer ses propres données.

Le principe de base est simple : une base de données Access, un fichier Excel ou encore un Document Word contenant les données relatives aux utilisateur. Ces données seront triées en utilisant le nom de l'utilisateur. Ces données seront ensuite transférées dans le document en utilisant des signets.

2 - Les données relatives aux utilisateurs

Ces données peuvent reprendre une multitude d'inforamtion, nous ne traiterons que du nom, prénom, adresse mail, numéro de téléphone et position dans l'entreprise. Elles seront accessibles par tous les utilisateurs.

2-A - Access

Si vous possédez la suite professionnelle d'Office, elle comprend Access. L'utilisation d'une base de données pour stocker les informations est une très bonne solution, surtout si vous envisagez d'étendre les possibilités de votre gestion.

Les captures d'écran sont issues de la version 2007, mais le principe reste le même pour les versions antérieures.

Nous allons créer une base de données qui contiendra au moins une table.

Nous allons ensuite choisir le nom et l'emplacement de la base de données. Par facilité, j'ai choisi le répertoire temporaire de Windows : "C:\Temp\".

J'ai préféré utiliser le format de fichier mdb.

Il ne reste qu'à valider le choix.

Nous allons modifier la table. Prenons de bonnes habitudes dès le départ et passons en "Mode création" pour modifier la structure de la table.

Donnons à notre table le nom de tbl_DataPers.

Les données de la table.

Champ

Type de données

Description

N°

Numéro Auto (Clef primaire)

Numéro de l'enregistrement dans la table

txt_UserName

donnée texte
50 caractères

Nom d'utilisateur session

txt_Nom

donnée texte
50 caractères

Nom de la personne

txt_Prenom

donnée texte
50 caractères

Prénom de la personne

txt_Titre

donnée texte
50 caractères

Titre dans l'entreprise

txt_Email

donnée texte
100 caractères

Adresse Email

txt_Tel

donnée texte
20 caractères

Numéro de téléphone

txt_Fax

donnée texte
20 caractères

Numéro de fax

Pour que l'ensemble fonctionne, il est impératif que le nom d'utilisateur dans la base de données soit exact.

2-B - Excel

Nous allons procéder de la même manière pour Excel, nous allons créer un nouveau fichier destiné à contenir les données. Les contraintes sont moins nombreuses en Excel pour la création du fichier. Une des restriction du fichier Excel est le nombre de connexions simultanées limité à 1. Le fichier ne peut être utilisé que par une seule personne à la fois.

Les colonnes que nous allons utiliser sont les mêmes que pour Access, mais sans préciser le type de données puisque ce n'est pas nécessaire pour les données présentes dans Excel.

2-C - Document Word

Pour word, nous allons créer un document contenant une table. Elle contiendra les données pour alimenter le document.

Il suffit d'ajouter un simple tableau contenant 7 colonnes et au moins deux lignes.

Pour ajouter une ligne suplémentaire à une table Word, il suffit de se positionner dans la dernière cellule du tableau et d'utiliser la touche tabulation. Une nouvelle ligne sera ajoutée au tableau.

Comme pour le fichier Excel, ce document ne pourra pas être ouvert simultanément par plusieurs personnes. L'access en simultané d'un document Word n'étant pas possible.

3 - Création de notre modèle

Si vous souhaitez plus dinformations sur les modèles de document, vous pouvez lire ce tutoriel.

L'intérêt de l'utilisation de signets pour "injecter" les données dans le document est qu'il n'est pas nécessaire de savoir où se trouve le signet. Nous aurions pu utiliser des mots à remplacer dans le document, mais si le mot se trouve dans l'en-tête ou le pied de page, vous devez spécifier l'endroit où Word doit lancer sa recherche.

La solution idéale est de placer ce modèle à un emplacement accessible pour tous les utilisateurs. De cette manière, lorsque le modèle est modifié, ce changement se répercute chez tous les utilisateurs.
Pour ce tutoriel, je vais créer trois modèles de document en fonction de la source de données. La base des modèles sera identique.

Si vous souhaitez distribuer ce modèle sur les PC du réseau, l'uniformité des modèles ne sera pas garantie.

Pour notre modèle, nous allons partir d'un document vierge pour en faire un modèle de fax. Nous allons utiliser des tableaux pour les données relatives aux adresses et à l'utilisateur. le premier de ce tableau sera dans le corps du document alors que le second sera dans le pied de page, il pourra être répété sur les pages suivantes.

Pour les signets, nous allons utiliser par facilité le même nom que le nom des données.

La première étape est la même quelle que soit la voie choisie. Elle consiste à récupérer le nom de l'utilisateur de la machine. Ce nom est celui qui est utilisé pour identifier l'utilisateur sur le réseau ou le PC, il est préférable de ne pas utiliser le nom retenu par les logiciels de la suite Office.
Nous allons utiliser la fonction "ENVIRON" contenue dans la bibliothèque VBA, elle renvoie certaine information sur la session.

Si vous allez dans l'invite de commande DOS et que vous tapez la commande suivante : SET, vous aurez la liste des informations que cette fonction peut renvoyer.

La ligne qui nous intéresse est USERNAME qui renvoie le nom de l'utilisateur. Par facilité, nous allons créer une fonction qui renverra cette information.

Généralement, je place cette fonction dans un module standard que je nomme Utilitaires. Ce module sera accessible pour toutes les procédures de mon modèle.

On change le nom du module via les propriétés du module.

Public Function Utilisateur() As String
'**************************************
'Fonction renvoyant le nom de l'utilisateur
'courant
'**************************************
Utilisateur = Environ("USERNAME")
End Function

La fonction va renvoyer une chaîne qui correspond à l'utilisateur courant de la machine.

3-A - Récupération des données

3-A-1 - Access

Pour accéder aux données, nous allons utiliser le DAO.

Si vous souhaitez en apprendre plus, je vous conseille de lire ce tutoriel : Tutoriel sur le DAO

Le principe est assez simple, nous allons ouvrir un jeu d'enregistrement issu de la base de données Access.
Ce jeu d'enregistrement ne devrait en contenir qu'un seul et basé sur le nom de l'utilisateur.

Première étape, ajouter à notre projet la référence à la bibliothèque DAO pour pouvoir accéder aux données.

Ajout d'une référence

Choix de la référence

Nous pouvons maintenant utilsier le DAO au départ de Word pour accéder aux données de notre base de données.
Pour que tout se passe de façon transparente pour l'utilisateur, nous allons appeler les données à l'ouverture du document pour les injecter sur des signets.
Nous aurions pu utiliser un texte dans le document et effectuer à son remplacement, cette solution semble simple à première vue, mais elle ne l'est pas vraiment. Lors d'une recherche, vous devez spécifier la partie du document dans laquelle vous allez l'effectuer. Si le texte à remplacer se trouve dans l'entête ou le pied de page de votre document, vous serez amené à ouvrir cet entête ou pied de page, ce sera long et perturbant pour l'utilisateur.
En passant par des signets, l'endroit où il se trouve n'a pas d'importance.

Nous allons créer une procédure Docuemnt_New() qui sera exécutée lors de la création d'un nouveau document basé sur ce modèle.

Sub Document_New()
'Déclaration des variables
Dim oDB As DAO.Database
Dim oRS As DAO.Recordset
Dim SQL As String

'Création de la sentence SQL avec l'utilisation de notre fonction
SQL = "Select * From tbl_DataPers Where txt_UserName = '" & Utilisateur & "';"

'Affectation des objets
'Ouverture de la base de données
Set oDB = OpenDatabase("c:\temp\datapersonnels.mdb")
'Ouverture du jeu d'enregistrement
Set oRS = oDB.OpenRecordset(SQL, dbOpenSnapshot)

'Boucle sur les enregistrements ouverts
'A ce stade, cette boucle est utilisée pour simplement faire un test.
While Not oRS.EOF
Debug.Print oRS.Fields(1).Value & " - " & oRS.Fields(2).Value & " - " & oRS.Fields(3).Value

oRS.MoveNext
Wend
'Fermetture des objets
oRS.Close
oDB.Close
'Libération des objets
Set oRS = Nothing
Set oDB = Nothing

End Sub

La première étape est la récupération du nom de l'utilisateur pour créer la sentence SQL qui va servir à récupérer les données.

SQL = "Select * From tbl_DataPers Where txt_UserName = '" & Utilisateur & "';"

C'est ici que notre fonction Utilisateur est utilisée.

L'étape suivante est l'ouverture de la base de données.

Set oDB = OpenDatabase("c:\temp\datapersonnels.mdb")

Vous pouvez utiliser des arguments supplémentaires lors de l'ouverture, dans notre cas, ce n'est pas impératif.

Ensuite, nous ouvrons notre jeu d'enregistrement en utilisant la sentence SQL obtenue plus tôt dans notre code.

Set oRS = oDB.OpenRecordset(SQL, dbOpenSnapshot)

Les lignes suivantes forment une boucle sur le jeu d'enregistrements obtenus. Normalement, il ne devrait y avoir qu'un seul enregistrement, si vous obtenez plusieurs enregistrement, ça ne pourra pas fonctionner correctement. À ce stade, cette boucle sert de vérification et ne devrait pas subister dans le projet final.

3-A-2 - Excel

Le première étape est exactement la même que pour Access, nous allons ajouter à notre projet la référence à la bibliothèque Excel.

3-A-3 - Word

Pour Word, il n'y a aucune raison d'ajouter la bibliothèque.

3-B - Injection des données