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.
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.