Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Formater les champs Access en respectant les accords
Dans cette
formation Access, nous proposons de voir comment il est possible de bâtir des
formats de champs spécifiques, pour réaliser des
accords grammaticaux notamment, comme nous l'avions fait dans une précédente
formation Excel.
Sur une
base de données de salariés, nous avions calculé les aides sociales attribuées en fonction du nombre d'enfants par personne. Les
accords grammaticaux sont mis en oeuvre en colonne
Nb. Enfants par la construction d'un
format conditionnel personnalisé. En effet, le contenu exact de chaque cellule est celui du nombre brut, sans le texte. C'est ensuite une
fonction RechercheV qui avait permis d'extraire l'aide correspondante pour produire le calcul.
Nous souhaitons atteindre les mêmes objectifs dans une
application Access, par le biais d'un
formulaire.
Ce
formulaire illustre l'application Access finalisée que nous allons résoudre en deux étapes. Dans un premier temps, il s'agira de restituer l'information de champ avec les
accords grammaticaux. Tantôt l'indication apparaît au singulier, tantôt au pluriel. Lorsque le nombre d'enfants devient important, vous remarquez le déclenchement d'une mise en valeur dynamique. De plus, les données d'une table externe, celles des aides, sont dynamiquement rattachées à l'enregistrement en cours. C'est une
requête Access équivalente à une
RechercheV Excel qui permet d'effectuer la correspondance. Il convient néanmoins de remettre les choses dans l'ordre. C'est la
rechercheV d'Excel qui fonctionne comme une
requête SQL et non l'inverse. Nous résoudrons ce cas dans une deuxième étape en même temps que nous fabriquerons cette liste déroulante capable de pointer un salarié pour l'atteindre sur demande.
Source et présentation de la problématique
Nous proposons de travailler à partir des mêmes données que celles que nous avions exploitées dans la
formation Excel pour réaliser les accords grâce aux formats de cellules. Ces données ont été
importées dans Access grâce à des plages de cellules préalablement nommées.
Cette
base de données est constituée de deux
tables. C'est ce qu'illustre le
volet des objets Access sur la gauche de la fenêtre. Elles se nomment respectivement
salaries et
tranches. La première est une archive des salariés, illustrée ci-dessus par la capture de l'application Excel. La seconde dresse le barème des aides sociales à attribuer en fonction du nombre d'enfants. Ces deux tables ne sont pas reliées entre elles et pour cause. La correspondance doit être effectuée par une requête simulant l'action d'une
fonction RechercheV se rapprochant du résultat. Ces aides sont attribuées par tranches, comme l'illustre la capture ci-dessous de la
table tranches ouverte en
mode feuille de données.
Les
relations entre les tables requièrent des correspondances exactes.
Formater les champs de tables Access
Dans ce premier volet, notre préoccupation tourne autour de la
table salaries.
- Dans le volet des objets Access, double cliquer sur la table salaries pour l'ouvrir en mode Feuille de données,
Nous y retrouvons les informations importées des salariés. Elles sont catégorisées par champs. Le premier champ (ID) est celui de la
clé primaire, indispensable dans une
table Access pour identifier chaque enregistrement comme unique. Après la civilité, le nom et le prénom, nous récupérons l'indication sur le nombre d'enfants par le
champ Nb Enfants.
Nous souhaitons ajouter l'information textuelle
enfant, à la valeur numérique de ce champ. Bien sûr, selon le nombre, l'objectif est d'accorder cette donnée au pluriel ou au singulier. Ainsi, lorsque nous bâtirons un
formulaire sur cette table, nous restituerons des informations explicites et faciles à utiliser.
- Dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans la liste, choisir Mode création,
Nous basculons ainsi en mode conception de table. Chaque
champ est énuméré avec son
type de données. Le typage est très important dans
Access et les
gestionnaires de bases de données. Il s'agit toujours de typer au plus juste afin d'économiser un maximum de ressources. C'est ainsi qu'il est possible de manipuler des données denses qui subissent de nombreuses requêtes par connexions.
- Dans cette vue, cliquer sur le champ Nb Enfants pour le sélectionner,
L'
onglet Général en bas de la fenêtre Access affiche le détail des propriétés pour ce champ. C'est ici que l'on peut définir les
masques de saisie et affiner le
formatage notamment. Le champ Nb Enfants est typé en
Numérique. Si vous consultez la
propriété Taille du champ dans l'
onglet Général, vous remarquez que ce type est réglé sur
Réel double. Ce dimensionnement est beaucoup trop important. Il a ainsi été défini par défaut, lors de l'importation. Le nombre d'enfants sera toujours défini par un
nombre entier, court qui plus est.
- Avec la liste déroulante de la propriété Taille du champ, remplacer Réel double par Octet,
Un
Octet ou
Byte est l'entier le plus petit. Il permet de stocker des nombres compris entre 0 et 255. Jamais une famille ne dépassera les 255 enfants. Ainsi, nous en profitons pour dimensionner ce champ au plus juste. Nous souhaitons désormais ajuster le format de ce champ pour modifier son affichage afin d'expliciter la donnée numérique. La
formation Access sur le formatage et les masques de saisie nous avait appris de nombreuses techniques à ce sujet.
- Dans la propriété Format pour le champ Nb Enfants, saisir le paramétrage suivant : 0" Enfant",
Nous répliquons ce que nous connaissons d'Excel. Le
symbole 0 permet de paramétrer ce champ, comme un
champ numérique standard, sans décimales ni séparateur de milliers. Entre guillemets, nous lui associons un texte explicatif qui n'a pas d'incidence sur la nature du champ. Seul l'affichage doit être impacté. L'espace est importé pour séparer le nombre de son unité. Il doit intervenir dans les guillemets.
- Enregistrer les modifications (CTRL + S) et valider par Oui le message d'alerte Access,
Access informe que des données seront potentiellement perdues du fait de la modification draconienne du
type de données pour ce champ. Il n'en sera rien bien entendu puisque tous les nombres archivés sont des entiers courts. Si des nombres réels avaient été stockés, le problème aurait été différent en effet.
- Cliquer sur le bouton Affichage en haut à gauche dans le ruban Accueil,
Nous basculons ainsi en
mode feuille de données pour visualiser les enregistrements de la table, avec les réglages que nous avons définis. Le
format fonctionne parfaitement. La donnée est bien numérique. Vous le constatez en cliquant dans l'un des champs, comme l'illustre la capture ci-dessus. Seul le nombre subsiste. Le texte est destiné à l'affichage pour clarifier l'information. En revanche, l'accord n'est pas réalisé. Donc, nous sommes tentés de répliquer les techniques que nous avions apprises lors de la
formation Excel pour réaliser les accords. Nous avions découvert qu'il était possible de poser des conditions dans un format de cellule, pour faire varier l'information textuelle. C'est ainsi que nous avions réalisé l'accord au pluriel lorsque le nombre dépassait le chiffre 1.
- Dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans la liste, choisir Mode création pour retourner en conception de table,
- Sélectionner de nouveau le champ Nb Enfants,
- Dans sa propriété Format, remplacer l'ancienne information par la syntaxe suivante :
[<=1]0" Enfant";0" Enfants"
Comme nous l'avait appris
Excel en effet, une condition s'exprime entre crochets. Le format qui suit est celui qui se déclenche lorsque ce critère est vérifié. En d'autres termes, si la valeur du champ est inférieure à 1 ([<=1]), nous appliquons un format numérique classique associé au texte enfant au
singulier (0" Enfant").
Le point-virgule agit de la même façon que dans une
fonction Excel Si ou une
fonction Access VraiFaux. Il permet d'énoncer le
format à appliquer dans le cas contraire, donc lorsque le nombre est supérieur à 1.
Mais à peine ce
format est-il validé qu'
Access réorganise sa syntaxe :
<\["=1]0 Enfant";"0 Enfants". La raison est simple, il ne le comprend pas et donc ne le gère pas. Mais nous proposons de le vérifier.
- Enregistrer les modifications (CTRL + S) et cliquer sur le bouton Affichage du ruban Accueil,
L'affichage produit le résultat redouté. Les données sont désormais destructurées et difficilement lisibles.
Access ne permet pas de bâtir de tels
formats. Mais n'en doutez pas, le formatage des champs avec
Access est au moins aussi puissant qu'avec
Excel, il s'agit de l'une des différences. Il est d'ailleurs très simple de changer la casse (Majuscules-Minuscules) avec
Access par le symbole supérieur (>). Inversement dans
Excel, ce n'est pas possible.
Sachant que les tables sont des outils de construction et non de manipulation des données, nous pourrions penser qu'il est possible de résoudre le problème par les
formulaires. Mais il n'en est rien. Les symptômes sont identiques.
Fonction Access pour formater avec l'accord
Nous devons donc envisager une astuce pour contourner le problème. C'est d'ailleurs ce que nous avions fait dans
Excel pour
modifier la casse des cellules, au clic sur un bouton. Nous proposons de bâtir une petite
fonction VBA réceptionnant la valeur du champ pour la formater. Cette fonction pourra être appelée par une requête afin de produire le résultat. Cette
requête permettra de construire le formulaire restituant les informations de champ formatées pour respecter l'accord grammatical.
Ce
code VBA Access est très simple, il ne requiert aucune compétence.
- Afficher la table salaries en mode création et sélectionner le champ NbEnfants,
- Supprimer l'expression de sa propriété Format ou la remplacer par le chiffre 0,
- Enregistrer les modifications et fermer la table,
- Cliquer sur l'onglet Créer en haut de la fenêtre Access pour activer son ruban,
- A droite du ruban, dans la section Macros et code, cliquer sur le bouton Module,
Nous basculons ainsi dans l'
éditeur de code Visual Basic pour Access. La feuille de code est vierge. Seule figure l'instruction :
Option Compare Database.
- Sous cette instruction, créer la fonction accord, en la saisissant comme suit :
Function accord(valeur As Byte) As String
End Function
Le
mot clé Function est utilisé pour déclarer une nouvelle fonction. Elle est bornée par l'instruction
End Function. Le code de son traitement doit donc être placé entre ces bornes. Nous déclarons le
paramètre valeur que nous typons comme un
entier court (Byte). Quand nous l'exploiterons, elle demandera de le renseigner. Nous lui passerons la valeur du
champ Nb Enfants à formater. Cette fonction est elle-même typée comme une chaîne de caractères (As String). En effet, après son traitement, elle doit retourner la valeur numérique concaténée au
texte Enfant accordé. En conséquence, le résultat devra être stocké dans un nouveau champ.
- Entre les bornes de la fonction, ajouter les instructions suivantes :
If (valeur > 1) Then
accord = valeur & " Enfants"
Else
accord = valeur & " Enfant"
End If
L'
instruction conditionnelle If permet de tester un critère. Nous cherchons à savoir si la valeur du champ passée en paramètre, celle du champ NbEnfants, est supérieure à 1 (valeur > 1). Si cette condition est vérifiée (Then), nous concaténons la valeur numérique au texte Enfant au pluriel (valeur & " Enfants"). Notez que le résultat est enregistré dans la
variable accord, soit le nom de la fonction. C'est ainsi en
programmation VBA. La fonction est considérée comme une variable. C'est elle-même qui se charge de retourner l'information traitée. Dans le cas contraire (Else), la valeur est associée au texte Enfant au singulier (valeur &" Enfant").
- Enregistrer le code (CTRL + S) en conservant le nom Module1 attribué par défaut,
- Fermer la fenêtre de l'éditeur de code VBA,
Le codage est effectivement terminé. Vous en conviendrez, la fonction est très simple. Mais le résultat qu'elle va produire est précieux. D'autant qu'
Access permet d'imbriquer ses objets, comme les requêtes, les modules et les formulaires.
Traiter les accords par une requête Access
L'objectif final consiste à restituer les informations formatées et accordées sur un
formulaire. Un
formulaire Access peut se construire sur les données brutes issues des
tables. Mais il peut aussi se construire sur des données réorganisées et retravaillées par des
requêtes. Et c'est précisément ce à quoi nous allons procéder, puisqu'il s'agit d'accorder le
champ Nb Enfants avant d'afficher son résultat.
Nous avions appris de nombreuses subtilités lors de la
formation Access sur la création des requêtes. Nous allons en exploiter certaines, notamment pour créer un
champ calculé. Un
champ calculé est un champ qui n'existe pas à l'origine et qui se produit par calcul sur les autres champs. C'est ainsi que nous allons restituer l'information accordée au pluriel ou au singulier.
- Cliquer sur l'onglet Créer en haut de la fenêtre Access pour activer son ruban,
- Dans la section Requêtes, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui suit, sélectionner la table salaries,
- Puis, cliquer sur le bouton Ajouter et ensuite sur le bouton Fermer,
Nous basculons ainsi dans l'
éditeur de requêtes avec la représentation schématique de la
table salaries et de ses champs.
- Dans cette représentation, cliquer sur le champ ID pour le sélectionner,
- Avec la touche MAJ enfoncée (Shift), cliquer sur le dernier champ (Nb Enfants),
Cette technique permet d'englober dans la sélection, tous les champs compris entre le premier et le dernier.
- Les glisser alors sur la grille de requête située juste en dessous,
De cette manière, nous incluons tous les détails dans la sélection de la requête pour la construction à suivre du formulaire.
- Double cliquer dans la zone Tri du champ Nom pour définir un tri croissant,
Nous aurons besoin de ce
tri croissant pour simplifier et automatiser la navigation au travers des enregistrements. C'est un point que nous traiterons dans un second volet. La
requête à ce stade ne fait que restituer les enregistrements de la
table salaries, avec une nouvelle organisation certes, du fait du tri. Nous devons créer ce fameux
champ calculé. Il doit récupérer l'information du
champ Nb Enfants pour lui associer le texte explicatif accordé. Ce
champ calculé doit donc faire appel à la
fonction VBA que nous venons de créer. Nous devons le placer à la suite dans la grille de requête. Nous choisissons de le nommer
nb_texte. Comme le veut la syntaxe
Access dans les
requêtes, ce nom doit être suivi du symbole deux points (:) pour annoncer le traitement à suivre.
- Dans la grille de requête, à droite du champ Nb Enfants, créer le champ calculé nb_texte, comme suit :
nb_texte:accord([Nb Enfants])
Nous appelons la
fonction VBA accord et nous lui passons la
valeur du champ Nb Enfants pour l'enregistrement en cours. Il doit en résulter la donnée formatée et accordée.
- Enregistrer la requête (CTRL + S) sous le nom : requete_salaries,
- Puis, cliquer sur le bouton Exécuter du ruban Créer,
Comme vous le constatez, les données de la
table salaries sont restituées, triées croissant sur le champ Nom. Un nouveau champ apparaît. Il s'agit du
champ calculé nb_texte. Il reproduit bien l'information explicitée du
champ Nb Enfants. Mais cette fois, l'accord singulier et pluriel est parfaitement réalisé grâce à la
fonction VBA accord. Cette dernière a pu évaluer la donnée du champ passé en paramètre pour la traiter.
La capture ci-dessus illustre la requête en mode création avec l'ajout du champ calculé. La capture ci-dessous illustre son résultat en mode exécution.
Ce sont ces résultats que nous devons exploiter pour proposer un affichage explicite sur le formulaire.
Format et mise en valeur sur un formulaire Access
Comme nous le disions précédemment, une
requête est une table spécifique. Donc nous pouvons construire un
formulaire sur une
requête et bénéficier de ses traitements dynamiques. Depuis les dernières versions d'Access, la création d'un formulaire est devenue excessivement simple. Il suffit de présélectionner l'objet à partir duquel il doit être construit.
- Fermer la requête en cliquant sur la croix de son onglet,
- Sélectionner la requête requete_salaries dans le volet des objets Access sur la gauche,
- Cliquer sur l'onglet Créer en haut de la fenêtre Access pour activer son ruban,
- Dans la section Formulaires, cliquer sur le bouton Formulaire,
Le
formulaire est instantanément produit du fait de la présélection de l'objet source. Toutes les informations de champs sont parfaitement restituées. Vous notez la présence en dernière position du
champ calculé nb_texte. La barre de navigation en bas du formulaire perme de naviguer au travers des enregistrements, donc des salariés.
Certes les contrôles sont agencés par défaut et il convient de les réorganiser.
- Cliquer sur la flèche du bouton Affichage dans le ruban Accueil,
Nous basculons ainsi en mode conception du formulaire. Nous ne détaillerons pas les manipulations consistant à le réorganiser. La
formation sur les formulaires Access apprend toutes les techniques et subtilités permettant d'atteindre un résultat intéressant.
Il convient néanmoins d'extraire les
champs ID et
Nb Enfants et de les rendre invisibles grâce à la feuille de propriétés. Cette dernière peut être activée depuis le
ruban Création du formulaire. Ces champs sont en effet utiles mais pas indispensables à l'affichage. Il convient ensuite de réorganiser les contrôles comme le propose la capture ci-dessus. Les cadres de couleur sont des rectangles basculés en arrière-plan. Le second est vide pour l'instant. Il servira à accueillir la liste déroulante qui permettra de simplifier la navigation. Nous le verrons dans le second volet. La première est volontairement plus haute que son contenu. Elle accueillera, là encore dans le second volet, des champs supplémentaires permettant d'afficher les informations sur les aides sociales allouées.
- Enregistrer le formulaire (CTRL + S) sous le nom formulaire_salaries,
Pour terminer les travaux de cette première étape, nous souhaitons une alerte visuelle sur les familles nombreuses. Il s'agit de faire ressortir dans une couleur explicitement différente, les enregistrements pour lesquels le nombre d'enfants est supérieur à 6. Cette alerte est utile dans la mesure où elle renseigne par voie de conséquence, sur l'ampleur des aides attribuées. La
formation Access pour contrôler les saisies de l'utilisateur, nous avait appris à créer ces
mises en forme conditionnelles à partir de règles dynamiques.
Ici la condition consiste à vérifier si le nombre contenu dans le
champ Nb Enfants est supérieur à 6. Lorsque ce critère est vérifié, c'est un autre contrôle, celui du champ calculé qui doit dynamiquement ressortir en couleur.
- Sélectionner le contrôle du champ calculé, soit nb_texte,
- Dans le ruban Format, cliquer sur le bouton Mise en forme conditionnelle,
- Dans la boîte de dialogue qui suit, cliquer sur le bouton Nouvelle règle,
- Avec la première liste déroulante, choisir Expression,
En effet, le déclenchement dynamique de la couleur de remplissage dépend de la valeur d'un autre contrôle.
- Dans la zone de saisie de l'expression, taper le critère suivant :
[Nb Enfants]>6
Souvenez-vous, un
champ Access doit être exprimé entre crochets. Le critère consiste donc à vérifier si le nombre d'enfants est plus important que 6 pour l'enregistrement en cours.
Si cette condition est remplie, il convient de déclencher une mise en valeur explicitement différente pour attirer l'oeil.
- Pour cela, exploiter les boutons de format (G, pot de peinture, couleur de texte) pour définir les attributs, comme l'illustre la capture ci-dessus,
- Valider ces réglages en cliquant deux fois consécutivement sur les boutons Ok,
- Enregistrer les modifications (CTRL + S),
- Exécuter le formulaire à l'aide de la touche F5 du clavier par exemple,
- Naviguer jusqu'au neuvième enregistrement grâce à la barre de déplacement située en bas du formulaire,
Comme vous le constatez, le champ de cet enregistrement réagit instantanément, alertant visuellement l'utilisateur.
Dans la prochaine formation, nous aboutirons l'application en associant les aides allouées calculées. C'est une
recherche verticale par une
requête Access dynamique qui permettra de faire le lien entre les enregistrements de ces tables pourtant non liées. Nous ajouterons une liste déroulante permettant d'ordonner l'affichage d'un salarié précis sur ordre. C'est ainsi que travaillent les banques ou les compagnies d'assurance lorsque vous les contactez. Après avoir fourni votre numéro de dossier, la conversation s'engage tandis que l'interlocuteur visualise tous les renseignements qui vous sont associés.