Cet article est destin un public ayant quelques notions dans le langage VBA et dans la manipulation des requtes SQL. L'exemple a t ralis sous Access 2010, et n'utilise aucune bibliothque particulire. L'adaptation du code des versions antrieures ne posent donc priori aucun problme particulier.
Cet article s'adresse particulirement tous ceux qui distribuent une application dont la finalit ou l'une des particularits est de gnrer des tiquettes. Je prendrai pour exemple, la gestion des adhrents d'une association ou l'impression des tiquettes visuelles l'issue des mouvements d'entre d'articles en stock.
Le but de ce document n'est pas de vous donner une solution toute faite, vous constaterez d'ailleurs que par simplicit un certain nombre de champs ont volontairement t laisss visibles. Le code source fourni permettra chacun d'adapter sa propre solution.
Les cls primaires seront prfixes ID_, le nom correspond au nom de l'entit. Les cls trangres seront suffixes de _FK, le nom du champ correspond au nom de la table hrite. Le nom de chaque champ est explicite. Aucune cl composite n'a t ncessaire dans la construction de ce tutoriel.
Nous entendrons par table gnrique, l'ensemble des tables ncessaires au fonctionnement de l'applicatif. Ces tables peuvent tre dclines en plusieurs tables mises en relation mais j'ai sciemment regroup des valeurs au risque de les rendre redondantes afin de simplifier ce tutoriel.
T_TypesEtiquettes: il s'agit des diffrents types d'tiquettes proposes l'utilisateur. Dans notre exemple tiquettes adresses et tiquettes articles. Cette table est non accessible l'utilisateur. Elle est mise en place l'initiation de l'application. L'volution est assure par le dveloppeur.
T_ChampsEtiquettes: dans cette entit, nous isolerons les items ncessaires l'laboration d'une tiquette. L'exhaustivit des champs de la table n'est nullement ncessaire, le dveloppeur aura pris soin de mettre disposition de l'utilisateur l'ensemble des champs dont il a rellement besoin. Cette table est non accessible par l'utilisateur final.
La description de cette table comporte peu d'intrt puisque dpendante de chaque solution. Le contenu des informations prsent sur le modle ci-dessus est suffisamment explicite pour que chacun puisse s'y reconnatre.
T_Clients: cette table permet de stocker l'ensemble des informations concernant un client. La description de cette table comporte peu d'intrt puisque dpendante de chaque solution. Le contenu des informations prsent sur le modle ci-dessus est simple et ne requiert aucune explication supplmentaire.
Afin d'illustrer la cration d'un nouveau format, nous avons mis en place un formulaire de cration. Si la construction d'un tel formulaire est d'une simplicit primaire, cela nous permettra de mieux comprendre les diffrentes tapes ncessaires la ralisation ultime de notre tiquette.
Ce formulaire est directement li la source de donnes T_NomEtiquettes. Il va nous servir accder la modification ou la cration de nos formats. Lors de la cration d'un nouveau format, l'insertion automatique dans la table T_ParametresEtiquettes s'opre automatiquement.
Les champs sources de donnes et gabarit du format seront renseigns par l'utilisateur. Le concepteur aura charge de fournir dans la solution la liste des sources de donnes (requtes ou tables dpendantes de son modle) et gabarits disponibles (format gnrique de l'tat d'impression). Le dveloppeur saura adapter cette partie aux rgles de scurisation ncessaires (accs restrictifs aux objets permettant l'adaptation du gabarit d'tiquettes). Dans mon exemple, les valeurs inscrites dans les deux zones de liste droulantes (sources de donnes et gabarits) ont t dfinies par le concepteur. Ces notions vous paratront plus claires en avanant dans la lecture. La correspondance entre les champs (ou alias) de votre requte sont inscrites pour mmoire dans la table T_ChampsEtiquettes.
Le rle attendu par cette requte est d'afficher l'ensemble des produits impacts par la gnration de nos tiquettes. Cette requte est soumise la contrainte suivante : l'article est suppos de type imprimable. Pour cela, un champ boolen de type tiquette Article_Aimprimer a t cr dans la liste des champs de l'entit T_Articles. Cette requte rpond galement une nouvelle contrainte pose, elle concerne l'ensemble des produits du stock. Vous savez tous comme moi qu'une requte suppose de relation 1 1 ne retourne qu'une ligne. Dans notre cas si l'article N dispose de 4 entres en stock, le nombre d'tiquettes imprimer est de 4. Nous avons donc rajout une table TBL_Count afin de dupliquer automatiquement les lignes. Cette astuce est fournie dans la base exemple, et extrait de la FAQ =TAEtat#multEnreg
Cette requte ne revt aucune difficult particulire. Afin d'intgrer la notion de champ calcul, nous crerons un alias compos du nom complet de la personne (civilit + nom + prnom) ainsi qu'un alias situation compos du code postal et la ville ceci afin d'imaginer la notion aborde dans la dfinition des entits. Vous visualiserez la fin du document le rle et l'intrt d'agrgation d'un champ.
La ralisation de notre formulaire ncessite une tape prparatoire et de rflexion assidue. Vous remarquerez sur la partie suprieure droite un certain nombre d'tiquettes (nommes et2 et19). Toutes les proprits de chaque tiquette sont dfinies . Les rgles de nommage de nos champs sont essentielles, car elles vont nous permettre d'utiliser la notion de variable lors de la communication entre le code VBA et les actions menes par l'utilisateur. L'tat de chacun de ces champs variera donc sur les rgles de gestion d'vnements placs dans notre sous-formulaire. Cela vous semble un peu barbare premire vue, mais la lecture de ce chapitre devrait vous clairer un peu plus. La partie gauche de l'cran dispose galement d'un champ indpendant (nomm et1) et correspondant l'lment de la section. Vous comprenez donc les rgles prcises de numro d'ordre voques dans le chapitre IILes entits (Description des tables gnriques). Deux traits nomms Trait et Trait2 apparaissent galement dans la partie suprieure de l'cran et vont servir de repre pour le pliage de l'tiquette (option intressante lorsque le support ncessite un pliage de l'tiquette visuelle).
Concernant les autres contrles, nous reviendrons plus tard sur leurs utilisations respectives. Afin de construire dynamiquement notre tiquette, attardons-nous sur la ralisation de notre sous-formulaire, prambule ncessaire au fonctionnement du formulaire principal. Comme voqu prcdemment, la liste des champs de la table T_ParametresEtiquettes constitue donc la source de notre sous-formulaire. Cette table, je le rappelle est elle-mme issue de la table T_champsEtiquettes, le nombre d'enregistrements varie donc en fonction du type d'tiquettes (articles, clients voire autres si besoin).
Nous avons conserv dans le source cette requte sous le nom R_Sample_ChampsEtiquettes_ParametresEtiquettes. Elle vous permettra de valider la cohrence de vos relations et vrifier que l'ensemble des lments souhaits seront mis disposition de l'utilisateur.
La source de donnes de ce sous-formulaire base sur la table T_Parametres_Etiquettes servira l'utilisateur. Les proprits accessibles sur le champ section tant diffrentes de celles des autres champs, nous allons donc interdire la saisie d'informations inutiles du champ section. Pour mmoire, la section correspond la section Dtail de l'tat et hrite donc des mmes proprits. Ainsi la navigation opre sur le sous-formulaire rpond au code suivant. Ce code est appel sur vnement du sous-formulaire :
L'action effectue sur les flches de navigation est directement lie l'ordre d'affichage dfini. Ainsi l'lment section sera toujours le premier enregistrement. Les proprits susceptibles d'tre utilises le plus frquemment auront donc un numro d'ordre bas afin de faciliter le travail de conception.
La modification des proprits suivantes : hauteur du champ, largeur du champ, position en hauteur, position en largeur et afficher l'lment impliquent donc la gestion d'un vnement afin de mettre jour le formulaire principal. Pour chacun de ces champs, l'vnement dclench se gre sur la proprit . Nous verrons l'effet des autres proprits au moment de la gnration de notre tat (aucun impact sur le formulaire parent).
Nous n'avons pas pour autant rsolu tous les problmes poss par la modification des proprits des champs dans notre sous-formulaire. Il est essentiel de pouvoir visualiser le format de l'tiquette au moment du chargement de notre formulaire. Dans cette problmatique, et puisque nous avons pris soin d'isoler dans des fonctions dissocies les rgles d'affichage de nos lments, nous allons donc boucler sur tous les enregistrements de notre table T_ParametresEtiquettes du format concern afin de rafrachir dynamiquement la visualisation du format l'cran. Ce code est donc mis en place sur l'vnement des proprits du formulaire parent (F_Etiquettes_Principal) matrialis par le code suivant :
L'lment Section (1) dont les valeurs par dfaut (2) ont ts enregistres dans la table est seul visible l'cran. En effet, lors de l'insertion des donnes dans la table, cette valeur a t force . En modifiant les valeurs d'affichage des repres de pliage (3), les zones trait et trait2 sont rendues visibles ou invisibles.
Continuons donc notre article en modifiant les proprits de notre tiquette. En changeant la valeur de la largeur du champ et de la hauteur du champ, vous constaterez la modification dynamique de la reprsentation de l'lment sur la partie suprieure. Les formats prconiss par les tiquettes articles ou adresses auront bien videmment des valeurs tout fait diffrentes. Concernant la section, seuls les lments permettant de renseigner les dimensions sont disponibles.
En modifiant les valeurs coordonnes (3) et en ordonnant l'affichage de l'lment, la partie suprieure de l'cran a t instantanment redessine. Le champ dcrivant l'lment en cours est inscrit dans la zone (4). Cette valeur correspond au texte renseign dans la table T_ChampsEtiquettes (NomEtiquette) et non l'alias ou au nom du champ figurant dans la table (articles ou clients dans notre exemple), ceci afin d'offrir l'utilisateur un confort particulirement apprci (vous le savez comme moi que le nommage d'un champ dans une table ou une requte ne parat pas vident pour un client nophyte). Vous pouvez modifier l'ensemble des proprits de chaque lment mais ces changements n'interviennent pas dans la visualisation dynamique de notre format (nous verrons leurs utilits dans la partie conception de notre tat). En marge de la couleur, un cran vous permettra d'afficher un panel de diffrents coloris avec l'ensemble des valeurs dcimales associer au champ.
c80f0f1006