formateur informatique

Formater les champs Access en respectant les accords

Accueil  >  Bureautique  >  Access  >  Access Avancé  >  Formater les champs Access en respectant les accords
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux, voici son url absolue :

Pour l'intégrer sur votre site internet ou blog, vous pouvez l'embarquer :

Sujets et formations similaires :


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.

Tableau Excel avec format de cellule personnalisé pour accord singulier et pluriel



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.

Formulaire Access pour restituer les informations formatées avec accords grammaticaux

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.

Table Access des valeurs proches à trouver et extraire par requête simulant une fonction Excel RechercheV

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',
Formater champ de table Access pour accord grammatical

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,
Formatage de champ de base de données Access pour expliciter valeurs numériques

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,
Format personnalisé Excel incompatible dans les champs Access pour faire les accords de grammaire

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,
Requête Access avec tri croissant pour champ calculé permettant le formatage avec accord grammatical

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.

Champ calculé de requête Access appelant fonction VBA pour réaliser accord grammatical

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.

Formatage de champs Access par fonction VBA pour accorder les données

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.

Créer un formulaire Access sur requête avec champ calculé pour valeurs dynamiques

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.

Personnaliser apparence formulaire Access avec feuille Propriétés, ruban Création et Organiser

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.

Critère de mise en forme conditionnelle Access pour alerter sur les valeurs importantes sur un formulaire

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,
Alerte visuelle sur formulaire Access des grandes valeurs numériques par mise en forme conditionnelle

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.

 
Sur Facebook
Sur G+
Sur Youtube
Les livres
Contact
Mentions légales



Partager la formation
Partager sur Facebook
Partager sur Google+
Partager sur Twitter
Partager sur LinkedIn