www.editions-corroy.fr
Site de l’éditeur

Outils et méthodes bureautiques

Créer une application avec
ACCESS

 

Présentation générale

Extraits choisis

Sommaire détaillé

Compétences étudiées

Pourquoi vous allez aimer ce livre

Ressources du livre

Commande en ligne

Voir_des_extraits


www.arc-en-ciel.info

Site de l’auteur


Retour à l’accueil

 

CORRIGÉS

 

Chapitre 1 : premières tables et formulaires simples

·         Consultez le corrigé de la grille d’autoévaluation

 

Chapitre 2 : les relations et l’intégrité référentielle

·         Consultez le corrigé de la grille d’autoévaluation

 

Chapitre 3 : requêtes, sous-formulaires et calculs

·         Consultez le corrigé de la grille d’autoévaluation

 

Chapitre 4 : finalisation des écrans et la programmation

·         Consultez le corrigé de la grille d’autoévaluation

 

Chapitre 5 : états imprimés, éventuellement filtrés

·         Consultez le corrigé de la grille d’autoévaluation

·         Téléchargez le corrigé de l’application, au niveau de la page 109 :
la base de données FacturationFinEtape5.mdb, avec quatre tables, trois relations avec contrôle d’IR, trois formulaires, un sous-formulaire, deux requêtes, un état, quelques programmes VBA…

1.       Version Access 97

2.      Version Access 2000

3.      Version Access 2002

4.      Version Access 2003

 

Retour en haut

 

Ressources diverses à télécharger :

·        Télécharger la dernière version de l’AMI, aide-mémoire informatique

·        Télécharger l’exemple de dossier de l’étudiant, 40 pages (attention : 2,6 Mo)

 


 

 

 

AUTOÉVALUATION  sur les tables et les formulaires simples

Je vérifie que j’ai bien progressé…

Retour en haut

Je sais …    CORRIGÉ

Commandes  et  procédures

Expliquer ce qu’est un identifiant, et son utilité

L’identifiant (ou clef primaire) d’une table est un champ sans doublons qui permet d’identifier à coup sûr une et une seule ligne (un enregistrement) de la table.  Si je connais une valeur de l’identifiant N°Client (la valeur "B123", par exemple), j’ai accès à coup sûr à un et un seul client (le client "Priscilla Merluchon", par exemple).

Résumer les principales Propriétés des champs d’une table dans la colonne Description, et expliquer l’utilité de cette démarche

Il est conseillé de noter (recopier, résumer) tous les réglages de chaque champ dans la colonne Description pour créer une vue d’ensemble, une synthèse des propriétés de la table sur un seul écran, sans avoir à cliquer quelque part. Sans cette astuce, on est presque aveugle pour relire la structure des tables : il faut sélectionner une ligne pour en lire les propriétés, et on ne voit qu’une ligne à la fois, qu’un seul champ.

Repérer les cas où le type Numérique ou Monétaire est utile

Il faut deviner qu’un champ va probablement servir à des calculs pour lui donner un type numérique, au sens large : pour rendre ces calculs possibles, il faudra alors donner,

·     soit le type Numérique, au sens strict d’Access,

·     soit le type Monétaire, qui est numérique également (au sens large : il permet de faire des calculs sur les valeurs qu’il mémorise), et même des calculs plutôt plus rapides que ce que permet le type Numérique.

Expliquer pourquoi un type Texte peut être très utile pour un code identifiant

Le type Texte donne une grande liberté sur les futurs contenus du champ : on pourra y loger du texte, bien sûr, mais aussi des chiffres, des caractères spéciaux (ponctuation, etc.). On appelle parfois Alphanumérique le type texte : c’est plus parlant. En choisissant le type Texte, on garde de la liberté pour décider, un jour, de mettre des lettres dans le code (Quinc28 au lieu de 28, par exemple).

Expliquer, pour les tables, les différences entre le mode Création et le mode Feuille de données

Dans les tables, le mode Création permet de modifier leur structure : les propriétés des champs, alors que le mode Feuille de données permet de modifier le contenu des tables : saisir ou corriger les valeurs mémorisées dans les champs, ligne par ligne.

Expliquer le fonctionnement de la touche Échap (Esc) pendant la saisie

En cours de saisie d’un champ, un petit crayon est affiché à gauche de la ligne (l’enregistrement) en cours.

La première frappe sur Échap annule la saisie du champ en cours, mais n’annule pas la saisie des éventuels autres champs modifiés sur la ligne courante.

Par contre, une deuxième pression sur Échap annule les modifications de tous les champs sur la ligne en cours.

Expliquer l’intérêt des formulaires

Pour les utilisateurs, les formulaires permettent de présenter une ligne de table toute seule sur un écran, avec une présentation en fiche plutôt qu’en ligne, ce qui évite les confusions entre lignes et rend l’écran de saisie / consultation plus léger, moins chargé, plus agréable.

Par ailleurs, pour le programmeur, les formulaires offrent de nombreux outils d’assistance et de contrôle de la saisie, qui n’existent pas dans les tables.

Expliquer, pour les formulaires, les différences entre le mode Création et le mode Formulaire

Dans les formulaires, le mode Création permet de modifier leur structure, l’agencement des contrôles (les contrôles sont les objets qui composent un formulaire), la mise en forme, l’apparence des contrôles,  alors que le mode Formulaire permet d’utiliser le formulaire, c’est-à-dire de voir à l’écran le résultat de tous les réglages opérés en mode Création.

Donner des exemples de contrôles de formulaire

Une Étiquette, une Zone de texte

Expliquer les différences entre les Zones de texte  et les Étiquettes

Une Étiquette sert à afficher un texte constant,
alors qu’une Zone de texte sert à afficher le contenu d’un champ de table ou calculer une nouvelle valeur.

Déplacer un contrôle sans déplacer le contrôle associé

Glisser sur sa grosse poignée noire, celle qui est affichée en haut à droite du contrôle.

Dimensionner un contrôle

Glisser sur une poignée (un des huit carrés noirs qui bordent le contrôle).

Maîtriser au moins 3 techniques pour sélectionner plusieurs contrôles

·     Clic, puis MAJ clics

·     Glisser pour dessiner un rectangle de sélection qui touche tous les contrôles à sélectionner, pris « au lasso ».

·     Cliquer ou glisser sur une règle blanche graduée, pou sélectionner tous les contrôles placés en regard des points visés.

Ajouter ou retirer un contrôle à un groupe sélectionné

MAJ clic

Afficher les Propriétés  du Formulaire

Double cliquer sur le coin haut gauche gris noir du formulaire.

Utiliser quelques bonnes touches pendant la saisie

Entrée ou Tab ou Flèches pour avancer de champ en champ.

Échap une fois pour abandonner la saisie du champ en cours.

Échap une deuxième fois pour annuler la correction de la ligne entière.

Changer l’aide affichée sur la Barre d’état quand un contrôle est actif,  et en expliquer l’intérêt

Afficher les propriétés du contrôle (en double cliquant dessus par exemple), sélectionner la propriété Texte barre d’état, et taper le texte voulu.

L’intérêt est pour l’utilisateur de votre application : il ne connaît pas aussi bien que vous les possibilités et les contraintes. Il est question ici de l’aider en l’informant, champ par champ, précisément, clairement, en lui évitant le doute qui pourrait le gêner dans son travail.

Créer un nouvel enregistrement

Cliquer sur le bouton en bas de la fenêtre.

Afficher un formulaire en Feuille de données

Cliquer sur l’outil

Déplacer une colonne de formulaire, en Feuille de données

Cliquer d’abord sur le titre de la colonne pour la sélectionner toute entière, relâcher la souris, puis cliquer à nouveau sur ce titre et glisser vers la destination.

L’intérêt et les inconvénients du type NumAuto

L’intérêt du type NumAuto est de prendre en charge le problème de l’attribution automatiques de numéros sans oubli ni doublon, mais le premier inconvénient est la rigidité de l’outil : aucune manipulation n’est autorisée, c’est lui qui décide, et les hommes n’ont plus voix au chapitre… :o)    Mais pour tous les n° non significatifs (les numéros de ligne de facture, par exemple), ce type de champ convient tout à fait.

Mais un autre problème vient de la règle qui interdit de réutiliser un numéro ayant déjà été donné par le passé : cette règle crée des trous dans la suite des numéros attribués chaque fois que la saisie d’un enregistrement est abandonnée en cours de création.

L’intérêt et les inconvénients des champs indexés

Les tris (mises en ordre) et les extractions (sélections) prennent du temps sur les grandes tables. Indexer les champs permet d’accélérer sensiblement ces opérations, mais au prix d’un encombrement supplémentaire sur le disque (les tables d’index sont des paires de colonnes de la longueur de la table de base) et d’un petit temps supplémentaire lors de chaque intervention sur un enregistrement (Access écrit dans les tables d’index en même temps que dans la table de base, pour avoir toujours des index à jour).

L’intérêt et les inconvénients des masques de saisie

Les masques de saisie permettent d’assister la saisie et de la contrôler. Si on utilise uniquement le clavier, ils sont assez pratiques. Mais si on utilise la souris, ils sont très gênants. Il ne faut en programmer que pour des utilisateurs « professionnels de la saisie » qui connaissent bien leur clavier.

Passer à la ligne pendant la saisie dans un champ

Ctrl Entrée

Me mettre à la place de l’opérateur pour lui simplifier le travail au mieux

Imaginer que je suis l’utilisateur, tester l’application en me mettant exactement dans les mêmes conditions que lui, en essayant d’imaginer les doutes qu’il pourrait avoir, en rédigeant des textes d’aide clairs pour lever ces doutes…

Bloquer un champ à la saisie : rendre impossible la sélection, et le signaler visuellement pour aider l’opérateur à prévoir ce comportement

Donner au contrôle les propriétés Activer : non et Verrouillé : oui.

Et pour aider à anticiper ce blocage, changer l’apparence des contrôles ainsi bloqués : ne pas les laisser comme les autres, leur retirer la couleur du fond et la couleur des bordures : les rendre transparents.

Aligner des contrôles entre eux

Sélectionner les contrôles (avec des MAJ clics ou au lasso)

Puis cliquer droit, Aligner… sur l’un d’entre eux.

Nota : si on aligne à droite, c’est le contrôle placé le plus à droite qui servira de repère d’alignement à tous les autres. Si on aligne à gauche, tous les contrôles s’aligneront sur le contrôle placé le plus à gauche.

Trier des nombres  saisis en type Texte

Les règles de tri des nombres sont différentes des règles de tri des textes. Pour trier des nombres ayant le type Texte, il faut égaliser leur longueur en remplissant avec des zéros l’espace à gauche pour que tous les « textes-nombres » aient la même longueur, par exemple trois caractères : 001, 002… 010, 011, 099, 100, 999.  STOP. Si on a des nombres plus grands que 999, il fallait mettre un zéro de plus devant tous les nombres inférieurs à 1000 : 0001… 0010… 0999, 1000, 1001… 1567, 1568… 9999. STOP.

Expliquer les avantages du formulaire sur la table

Le formulaire permet d’abord de ne voir qu’une ligne à la fois, sous forme de fiche : il permet de se concentrer, il évite de confondre deux lignes, il allège l’écran en n’affichant pas des données actuellement inutiles.

Par ailleurs, le formulaire permet de guider et contrôler la saisie avec des outils beaucoup plus puissants que ce qu’on trouve dans les tables.

Les formulaires permettent aussi de calculer des informations qui ne se trouvent pas dans les tables.

Enfin, les formulaires permettent d’afficher les champs de plusieurs tables ou plusieurs requêtes dans un seul et même écran. C’est donc un outil qui permet des affichages synthétiques, résumés et riches à la fois.

Ouvrir une fenêtre d’édition pour corriger un très long texte

MAJ F2  (raccourci très utile !)

Déplacer et dimensionner  les contrôles  avec le clavier

Déplacer un contrôle (ou un groupe !) : CTRL MAJ Flèche 

Raccourci formidable ! En effet, sous Access, le Maj glisser, pour déplacer en respectant les alignements, ne fonctionne pas ! Ce qui est une terrible lacune : chaque fois qu’on glisse avec la souris, on détruit les alignements, même avec l’habitude de la souris. Avec CTRL MAJ Flèche, on a LA solution pour déplacer vite et bien. On arrête de perdre du temps avec des bêtises, à réaligner ce qu’on vient de désaligner par accident.

Dimensionner avec le clavier = MAJ Flèche.


 

AUTOÉVALUATION  sur les relations et l’intégrité référentielle

Je vérifie que j’ai bien progressé…

Retour en haut

Je sais …  CORRIGÉ

Commandes  et  procédures

Repérer les clefs externes par un signe distinctif

Placer un dièse # dans le nom des clefs externes est une convention essentielle pour augmenter la lisibilité des schémas relationnels.

On prévoit ceci en mode Création qui est le mode du réglage de la structure des tables.

Pour saisir un dièse #, utiliser la touche ALTGR, à droite de la barre d’espace, et la touche 3 du pavé alphabétique.

Expliquer le rôle des clefs externes

Une clef externe mémorise ce qui relie deux tables : une valeur d’identifiant connue à coup sûr. Elle se souvient que pour une ligne d’une table, on a une et une seule autre ligne d’une deuxième table. Ce lien vital s’appelle d’un nom obscur mais irremplaçable : c’est une dépendance fonctionnelle (DF). Chaque clef externe dans une table (il peut y en avoir beaucoup), pointe vers une et une seule ligne d’une autre table : la clef externe, qu’on appelle parfois clef étrangère (mais qui n’a rien à voir avec les clefs secondaires, ne pas confondre), mémorise une DF vers une autre table.

Programmer une liste déroulante sur chaque clef externe

En mode Création sur la table, sélectionner la ligne de la clef externe et choisir le type Assistant Liste de choix

Répondre aux questions de l’assistant en prenant bien garde à :

·     démasquer la première colonne (clef primaire de la table associée)

·     contrôler que la propriété Limiter à liste de la clef externe est bien sur Oui

·     Remettre le dièse # que Access 97 ou 2000 a retiré au nom de la clef externe !

Expliquer l’intérêt de la liste déroulante programmée sur les clefs externes

La clef externe est faite pour contenir une des valeurs de l’identifiant d’une autre table.

Attention, confusion fréquente : la clef externe n’est pas l’identifiant de l’autre table : elle est la mémoire d’une des valeurs de l’identifiant visé.

Elle ne peut pas contenir autre chose (qu’une valeur prise dans la première colonne de la table liée). On peut donc prévoir une liste des saisies possibles : c’est la liste des valeurs de l’identifiant visé.

La liste déroulante facilite la saisie en dispensant l’opérateur de connaître tous les identifiants par cœur (…) : elle permet de montrer à l’opéra­teur les codes disponibles et les libellés associés, ce qui fiabilise la saisie : l’opérateur a le moyen de bien contrôler sa saisie.

Access est donc ici beaucoup plus fort qu’Excel qui ne sait afficher des listes déroulantes qu’avec une colonne unique : seule une valeur (le code) est listée dans la liste déroulante de Données Validation… Ce n’est pas lisible du tout, et c’est même parfois inutilisable…

Éviter les espaces dans les noms de champ et expliquer l’intérêt de ce choix

Access permet d’utiliser les espaces dans le nom des champs. On en a parfaitement le droit.  Mais c’est déconseillé car cette possibilité se paiera plus tard avec la saisie obligatoire de crochets partout dans l’application.
Or les crochets sont assez fastidieux à saisir avec un clavier AZERTY.

Il est astucieux d’éviter les espaces et de rester lisible en n’utilisant que des minuscules et des initiales majuscules au début des mots :
ObjectifSaisiEtContrôlé, par exemple.

Mémoriser une relation durable entre deux tables

Ouvrir la fenêtre des relations avec Outils, Relations

Si les tables n’apparaissent pas, faire apparaître les tables à relier avec Relations, Afficher la table

Pour créer la relation, glisser précisément de la clef externe vers l’identifiant (ou l’inverse).

Cocher toujours le contrôle d’IR (essentiel), et la MAJ en cascade (sans danger).

Ne cocher Suppression en cascade qu’en cas d’absolue nécessité, ce qui arrive de temps en temps.

Expliquer l’intérêt de l’intégrité référentielle
et donner des exemples

L’intégrité référentielle est la cohérence de la base de données.

Intègre veut dire entier, non détruit, pas cassé…

Access propose de contrôler tout seul tout ce qui peut l’être facilement (pour un ordinateur) et c’est très utile.

Il y a trois grandes catégories d’opérations qui peuvent dégrader la BDD, détruire sa cohérence interne :

·    Saisie d’une valeur de clef externe sans correspondance avec un identifiant de la table liée : par exemple, saisir dans une facture un #N°Client qui n’existe pas dans la table Clients… Absurdité que cette nouvelle facture qui pointe vers un fantôme, un client inconnu, inexistant.

·    Modification d’un identifiant sans modifier les clefs externes qui pointent vers lui : par exemple, changement du N°Client d’un client, sans adapter toutes les clefs externes dans les factures qui pointaient vers ce client : absurdité que toutes ces factures qui pointent désormais vers un N°Client qui n’existe plus…

·    Suppression d’un enregistrement alors que certains enregistrements d’autres tables pointent vers lui : par exemple, supprimer un client sans supprimer les factures qui pointaient vers ce client. Absurdité que toutes ces factures qui évoquent dorénavant un client fantôme, « inconnu au bataillon »…

Ces trois cas de figure aboutissent tous à une rupture de la correspondance, qui doit être sans faille, entre clefs externes et identifiants. C’est cette rupture qu’Access surveille avec ses contrôles d’IR.

DONC, avec l’IR :

·      Access va interdire toute saisie incohérente du côté ¥.
Exemple : avec le contrôle d’IR, il n’est pas possible de saisir un n°Client qui n’existe pas dans la table Clients.

·      Access va interdire toute modification de l’identifiant du côté 1 si au moins une clef externe pointe vers cette valeur d’identifiant.
Exemple : avec le contrôle d’IR, il n’est pas possible de changer le N°Client d’un client qui aurait déjà des factures qui pointent vers lui.

·      Avec l’IR activée, Access va interdire toute suppression d’enregistrement du côté 1, s’il existe une clef externe qui pointe vers cet identifiant.
Exemple : avec le contrôle d’IR, il n’est pas possible de supprimer un client si des factures pointent vers ce client.  Autre exemple : il n’est pas possible de supprimer une facture si des lignes existent qui pointent vers elle…

Choisir d’effacer en cascade
et expliquer les avantages et les risques

On a vu qu’avec l’IR activée, Access va interdire toute suppression d’enregistrement du côté 1, s’il existe une clef externe qui pointe vers cet identifiant.
Exemple : avec le contrôle d’IR, il n’est pas possible de supprimer un client si des factures pointent vers ce client.  Autre exemple : il n’est pas possible de supprimer une facture si des lignes existent qui pointent vers elle… C’est parfois trop rigide
On peut donner de la souplesse à ce contrôle et remplacer l’interdiction par une Suppression en cascade de toutes les lignes concernées du côté
¥. C’est très dangereux dans la plupart des cas, mais c’est parfois très utile et peu dangereux. Par exemple, pour les lignes de commande, les lignes d’ordonnance, les lignes de n’importe quoi… Dans ces cas-là, c’est un réglage précieux.
Exemple : si la Suppression en cascade est cochée entre Factures et Lignes de factures, la suppression d’une facture entraîne automatiquement la suppression de toutes les lignes de la facture. C’est évidemment ce qu’il faut faire le plus souvent, chaque fois que le danger est limité et prévisible sans erreur.

Choisir de mettre à jour en cascade
et expliquer les avantages et les risques

On a vu qu’avec l’IR activée, Access va interdire toute modification de l’identifiant du côté 1 si au moins une clef externe pointe vers cette valeur d’identifiant.
Exemple : avec le contrôle d’IR, il n’est pas possible de changer le N°Client d’un client qui aurait déjà des factures qui pointent vers lui.
On peut donner de la souplesse à ce contrôle et remplacer l’interdiction par une MAJ en cascade.
Exemple : avec la MAJ en cascade cochée, on peut changer le N°Client, et Access va changer tout seul tous les N°Clients contenus dans toutes les clefs externes qui pointaient vers ce N°Client ancien.

Dire quelle est la seule relation qui aurait mérité ici, sans danger, le choix Suppression en cascade, et expliquer pourquoi, malgré cela, on n’a pas coché cette possibilité

La relation entre Factures et Lignes de factures pourrait fort bien se voir contrôler avec une Suppression en cascade car :

·      Le risque est toujours limité à une facture, et il est imaginable de recréer facilement cette facture en cas de suppression accidentelle.

·      La suppression en chaîne est d’ampleur prévisible : l’opérateur peut s’attendre à ce effet, on n’a pas à redouter un effet de surprise, un manque d’anticipation. L’opérateur, même endormi, peut bien se douter que s’il supprime une facture, il va supprimer les lignes avec…

Vous pouvez ainsi appliquer ce réglage de la Suppression en cascade entre toutes les tables qui permettent de mémoriser les lignes du tableau d’un imprimé : lignes de commande, lignes d’ordonnance, lignes de prêt dans une bibliothèque, lignes de réservation, lignes de bon de livraison, etc.

Mais ici, pour les factures, il  y a une particularité : il est interdit, en droit, de supprimer une facture. C’est donc une contrainte juridique qui oblige le programmeur de la BDD à interdire la suppression des factures. Et c’est donc une astuce (ne pas cocher Suppression en cascade) qui interdit cette suppression, sans rien devoir programmer… 

Mais il est certain qu’une personne déterminée à supprimer une facture à tout prix y arrivera sans difficulté : elle supprimera d’abord les lignes de la facture, puis la facture elle-même.

Ce sont surtout les accidents dont on se protège ici.

 


 

 

AUTOÉVALUATION  sur les requêtes, sous-formulaires et calculs

Je vérifie que j’ai bien progressé…

Retour en haut

Je sais … …    CORRIGÉ

Commandes  et  procédures

Expliquer pourquoi deux tables ne suffisent pas au formulaire Facture et pourquoi il faut deux requêtes

Le formulaire Factures demande l’affichage de nombreuses informations et aucune table, à elle seule, ne comporte toutes les informations utiles.

C’est un cas de figure très ordinaire, très courant : on utilise des requêtes pour regrouper les informations à offrir aux différentes zones du formulaire.

Chaque requête puise dans plusieurs tables, mais présente toutes les informations résultantes sous forme d’un tableau, elle aussi, ce qui permet ensuite de traiter la requête comme une nouvelle table, une nouvelle source possible, même si techniquement une requête n’est pas du tout une table : une requête est vide, elle n’est qu’une question posée aux tables et le tableau des réponses vient tout entier des tables.

Dans une requête multitable, choisir le bon champ de jointure à afficher pour saisie

Quand une requête puise dans deux tables liées, il faut toujours choisir (sélectionner) la clef externe, plutôt que l’identifiant, de la relation.

En effet, dans ce cas d’un champ mis en relation dans une requête, seule la clef externe peut faire l’objet d’une saisie, et si vous sélectionnez l’identifiant, vous bloquez (vous interdisez) toute saisie ultérieure sur ce champ via cette requête.

Calculer un champ  dans une requête

Choisir une colonne vide dans la grille des critères, y taper le nom du résultat (sans crochets, sans signe égal, sans parenthèses), suivi immédiatement du signe deux-points et de la formule de calcul, où les noms des champs, eux, sont placés entre crochets. Astuce : si les noms sont sans espace, Access ajoute tout seul les crochets qui manquent, pas besoin de les taper.

Créer, avec un Assistant, un formulaire avec un sous-formulaire

Penser à quitter Access 97 et le relancer aussitôt si on a prévu des listes déroulantes sur les clefs externes. Si on ne fait pas cette manœuvre étrange, un bug de l’Assistant va construire un formulaire et sous-formulaire en oubliant certaines listes : le résultat sera inutilisable, et il faudra tout recommencer…

Lancer l’Assistant : Insertion, Formulaire, Assistant Formulaire…

Faire passer tous les champs de la première source (en-tête) dans la zone Champs sélectionnés.

Puis, ne PAS cliquer sur  Suivant !!!

Important : c’est en indiquant ici, dans cette même étape de l’Assistant,  que l’on a besoin non pas d’une  mais de deux sources (requêtes), que l’on demande à l’Assistant de fabriquer un formulaire et son sous-formulaire.

Cliquer sur la flèche bas  du champ Tables/Requêtes, 

et choisissez la deuxième source (celle du détail qui va alimenter le SF).

Puis, ajouter  tous les champs  de cette deuxième source  à la zone  Champs sélectionnés.

Une fois que tous les champs des deux sources sont sélectionnés,  cliquer sur Suivant

Choisir des noms d’objets (requêtes, formulaires, états) qui aident à les regrouper et à les reconnaître

Sous Access, les objets sont listés par ordre alphabétique, sans qu’on puisse changer cet ordre. Pour forcer l’ordre, il faut donc jouer d’astuce avec les noms d’objets : en plaçant la même lettre devant tous les objets à regrouper, on les fait apparaître ensemble dans la liste.

Afficher les Propriétés du Formulaire

Double cliquer sur le coin haut gauche gris noir du formulaire.

Expliquer le rôle du champ père et du champ fils

Les lignes du SF doivent être celles qui correspondent exactement à l’enregistrement actuellement affiché dans le formulaire principal, en tête.

Pour assurer cette parfaite correspondance, on se sert de deux champs qui doivent être égaux :

·  l’un dans le formulaire principal, c’est l’identifiant de la source, côté 1 de la relation, qu’on appelle champ père,

·  et l’autre dans le SF, c’est la clef externe de la source, côté plusieurs de la relation, qu’on appelle champ fils.

Expliquer la nécessité d’un champ Prix Facturé, et son rôle par rapport à Prix Actuel (PU)

Le champ Prix actuel (PU) de la table Produits mémorise une info qui change tout le temps : les prix des produits ne sont pas stables dans le temps.

Le prix facturé, lui, ne doit pas varier avec le temps : si on a facturé un produit à x €, il ne faut surtout pas que ce prix soit différent quand on consulte cette facture un an après !

Le rôle du champ Prix facturé dans la table Ligne Factures est de mémoriser le prix pratiqué le jour de la facture, et de s’en souvenir sans erreur malgré toutes les variations possibles du Prix Actuel.

Bloquer la saisie d’un champ et le montrer visuellement
Expliquer l’intérêt de cette manœuvre

Donner au contrôle les propriétés Activer : non  et  Verrouillé : oui.

Et pour aider à anticiper ce blocage, changer l’apparence des contrôles ainsi bloqués : ne pas les laisser comme les autres, leur retirer la couleur du fond et la couleur des bordures : les rendre transparents.

Expliquer l’intérêt de la Barre d’état
et comment la personnaliser

La Barre d’état est la zone de messages, c’est l’endroit de l’écran où le programmeur peut parler à l’utilisateur, où il peut l’aider. Souvent, cette zone est négligée par les programmeurs et les utilisateurs en sont réduits à se débrouiller seuls.

Pourtant, la qualité des messages (qui demande une réflexion approfondie champ par champ) participe beaucoup à la qualité de l’application.

Chaque contrôle de formulaire a une propriété Texte barre d’état qu’il suffit de saisir. Dans la même famille, la propriété Texte Info-bulle permet de programmer des messages dans des post-its jaunes au survol du contrôle par la souris. On peut Copier Coller le texte de la Barre d’état vers le texte de l’Info bulle, car certains utilisateurs ne regardent jamais le bas de leur écran, ils ne savent même pas qu’il y a une Barre d’état… Alors que personne ne peut rater le post-it jaune…

Ouvrir rapidement le SF affiché dans un formulaire (avec Access 97)

Double cliquer sur le grand rectangle blanc qui symbolise l’emplacement du SF.

Attention à d’abord cliquer ailleurs : le double clic doit être direct sur le contrôle SF non sélectionné, sinon le double clic « entre dans le nom » du SF, et il faut cliquer en dehors pour en sortir.

Dimensionner, déplacer ou masquer des colonnes

Dimensionner une colonne : glisser sur le bord droit du titre.

Déplacer une colonne : cliquer sur le titre, relâcher, puis glisser sur le titre.

Masquer une colonne : cliquer droit sur le titre, Masquer…

Changer le titre d’une colonne de SF :
                                                • avec Access 97 et 2000 : il faut changer le Nom de la Zone de texte
                                                • avec Access 2002 et 2003 : il faut changer la Légende de l’Étiquette

Programmer la recopie auto d’une colonne de SF à l’autre

Déterminer le contrôle dont la saisie déclenchera la recopie (ici, c’est la saisie de la RéfProd), sélectionner la propriété AprèsMAJ (après mise à jour, juste après la saisie d’une valeur), et tapez un petit programme VBA sur la logique suivante : me.ContrôleDestination=me.ContrôleOrigine

La ligne se lit de droite à gauche car le signe égal, opérateur d’affectation d’une valeur à une variable, fonctionne comme cela. Pour s’en souvenir, on pourrait lire la ligne en disant : « le contrôle destination devient égal au contrôle d’origine ».

Exemple : Me.PU_facturé = Me.PU_actuel

Expliquer le sens de l’expression  me.

Me signifie moi en anglais (prononcer mi). Le mot me désigne le formulaire courant : ce mot évite de taper tout le fatras d’habitude requis pour désigner un objet avec précision.  C’est très commode !

Calculer un cumul de colonne dans un SF
et récupérer ce cumul
dans le formulaire principal

Pour cumuler une colonne de sous-formulaire, il faut :

1.   Placer une Zone de texte indépendante (non liée à un champ de table) dans le pied du SF.

2.   Lui donner un nom parlant (car on va s’en servir pour récupérer le résultat ailleurs), CumulMontant  par exemple.

3.   Calculer sa valeur en mettant une fonction Somme dans sa propriété Source. Exemple : =Somme([Montant])
Penser au signe égal, aux parenthèses et aux crochets.

Pour récupérer le cumul dans le formulaire principal, il faut créer une Zone de texte indépendante, et dans la propriété Source, taper une expression qui désigne précisément le contrôle cumulé du SF en respectant la syntaxe suivante : signe égal, le nom du SF entre crochets, point, le mot formulaire au singulier, point d’exclamation, le nom du contrôle entre crochets…

Exemple :  =[A SF Détail des factures].[Formulaire]![CumulMontant]

Récupérer (et affecter à un contrôle) la plus grande valeur rencontrée dans un champ d’une table

La fonction MaxDom( Champ ; Table ) repère la plus grande valeur actuellement rencontrée dans un champ de table.

Calculer le numéro suivant du prochain enregistrement, sans utiliser le type NumAuto

Le type NumAuto crée des trous dans la séquence des numéros en cas d’abandon de la saisie d’un nouvel enregistrement.

Or il est interdit, en droit, de présenter une séquence de numéros de factures avec des trous : les numéros doivent se suivre, sans exception.

Il y a un autre moyen de calculer les numéros de factures automatiquement sans souffrir de la faiblesse de NumAuto :
La fonction MaxDom( Champ ; Table ) repère la plus grande valeur actuellement rencontrée dans un champ de table. On peut s’en servir dans un calcul. Ici, on s’en sert pour calculer le prochain numéro de facture : cette expression est donnée à la propriété Par défaut (qui n’est utilisée par Access que lors de la création d’un nouvel enregistrement) du contrôle N°Facture.

Exemple : MaxDom("[N°Facture]";"[FACTURES]")+1

Expliquer l’inconvénient du type NumAuto pour les numéros de factures

Quand la saisie d’un enregistrement commence, un NumAuto est calculé et attribué au champ… Si la saisie est interrompue ou abandonnée, le numéro est perdu, il ne sera jamais plus attribué : lors du prochain nouvel enregistrement, ce sera le numéro suivant qui sera affecté par NumAuto, et n’essayez pas de discutailler, c’est sans appel…   :o)

Pour des factures, c’est rédhibitoire (inacceptable) puisque totalement interdit par le droit.

Déplacer un contrôle sans perdre son alignement

CTRL MAJ Flèche 
Raccourci essentiel pour devenir rapide et précis  à la fois


 

AUTOÉVALUATION  sur la finalisation des écrans et la programmation

Je vérifie que j’ai bien progressé…

Retour en haut

Je sais … …    CORRIGÉ

Commandes  et  procédures

Créer un sous-programme  et l’appeler à partir d’ailleurs

Taper Sub, un espace, le nom du SP (de préférence précédé des lettres SP pour faciliter son repérage parmi les autres programmes) sans espace, et Entrée : Access ajoute seul des parenthèses et la ligne End Sub.

Taper le programme entre Sub et End Sub.

Pour appeler ce SP à partir d’un autre programme, il suffit de prévoir une ligne avec son seul nom : pas de sub cette fois, pas de parenthèses non plus, le nom tout seul.

Appeler un SP après la saisie d’un contrôle de formulaire.

Sélectionner le contrôle dont la saisie doit déclencher l’exécution du SP, choisir la propriété AprèsMAJ, cliquer sur le petit bouton  à droite de la ligne et choisir Générateur de code.

Taper le seul nom du SP (sans le mot Sub, sans parenthèse)…

Créer un bouton qui ouvre un formulaire

Cliquer sur l’outil Bouton  de la Boîte à outils, puis cliquer à l’endroit où il faut placer le bouton. Cela lance l’Assistant Bouton… Choisir Opérations sur formulaires,  puis Ouvrir un formulaire

Dans le "texte" du bouton, utilisez l’esperluette &  pour souligner la lettre accélératrice, qui permettra de « cliquer » sur le bouton sans la souris.

Expliquer pourquoi et comment donner une lettre accélératrice aux boutons

Les phases de saisie intensive s’accommodent mal du travail à la souris : il est pénalisant de lâcher son clavier, prendre sa souris, repérer où est le pointeur, viser le point voulu, cliquer, et alors seulement, si on n’a pas cliqué à côté… agir…

Alors que, avec quelques techniques clavier bien maîtrisées, on va vite et bien, sans se tromper : la lettre d’appel rapide des boutons va dans ce sens : en plaçant une esperluette & dans le texte du bouton, on souligne la lettre qui suit l’esperluette et on autorise à "cliquer" avec le clavier en tapant ALT + lettre soulignée.

Créer un bouton pour fermer le formulaire et associer ce bouton à la touche Échap (Esc)

Vérifier que les assistants sont actifs : l’outil "baguette magique"   doit être "enfoncé", cliquer une fois sur l’outil Bouton de commande, cliquez approximativement là où on veut mettre le bouton : cela lance un Assistant… Choisir Opérations sur formulaires,  puis Fermer le formulaire

Pour que ce bouton Fermer soit associé à la touche Echap, on lui donne la propriété Annuler : oui.

On ne peut prévoir ce réglage que sur un seul bouton par formulaire.

Accéder aux Propriétés du Formulaire entier

Double clic sur le coin haut gauche de la fenêtre du formulaire, à l’intersection des deux règles blanches graduées.

Enregistrer la position du formulaire sur l’écran

Ctrl S

Mais pour mémoriser une position, il faut désactiver le centrage automatique : donner au formulaire la Propriété AutoCentrer : non.

Sélectionner un enregistrement entier dans un formulaire

Cliquer (ou glisser) sur le sélecteur , à gauche de la fenêtre.

Supprimer un enregistrement entier dans un formulaire,  ou dans un SF

Ctrl –   (Ctrl moins) supprime l’enregistrement courant sans avoir à le sélectionner entièrement au préalable.

Il faut quand même que le focus soit quelque part dans l’enregistrement : le curseur doit clignoter sur un des champs de l’enregistrement à supprimer.

Rendre un formulaire "auto ouvrable" au démarrage

Activer la fenêtre BDD  (F11) et lancer la commande Outils, Démarrage… et renseigner le champ Afficher le formulaire

Créer un formulaire indépendant de toute table ou requête pour y placer uniquement des textes et des boutons, supprimer les affichages habituels ici inutiles

Créer un formulaire vierge, sans assistant. Lui donner une couleur de fond, créer quelques étiquettes pour le titre et des consignes, créer les boutons permettant de naviguer vers les écrans de l’application, retirer tous les ornements (propriétés) de fenêtre inutiles ici : ascenseurs (barres de défilement), sélecteur, boutons de déplacement, diviseur d’enregistrement, autocentrage, boutons de contrôles…

Supprimer un programme VBA lié à un vieux bouton détruit puis recommencé avec un Assistant

Ouvrir l’éditeur VBA avec le bouton  : sélectionner tout le texte du programme en double, placé entre Sub et End sub (inclus),  et utiliser la touche Suppr.

Attention à laisser un des programmes quand même…

Faire apparaître un post-it jaune au survol d’un bouton

Régler la propriété Texte d’Info-bulle des boutons : taper le texte voulu dans cette propriété.

Faire qu’un formulaire soit toujours ouvert en saisie d’un nouvel enregistrement

Donner la propriété EntréeDonnées : oui au formulaire.

Créer un bouton sans assistant et lui taper son programme

Désactiver l’Assistant  sur la palette « Boîte à outils » : cliquer sur l’outil "baguette magique" , insérer un simple bouton, changer  son Nom  et  sa Légende  en pensant à  prévoir une esperluette & dans la légende, puis, cliquer sur le bouton  à droite de la propriété  Sur clic, et choisir Générateur de code…

Taper quelques Retours Chariot (avec Entrée) entre Sub et End sub, pour faire de la place, puis taper le programme entre le début et la fin (sub et End sub).

Expliquer le mot  me.

Me signifie moi en anglais (prononcer mi). Le mot me désigne le formulaire courant : ce mot évite de taper tout le fatras d’habitude requis pour désigner un objet avec précision.  C’est très commode !

Demander de l’aide sur une Propriété de contrôle de form.

Sélectionner la propriété dans la Palette des propriétés, et taper F1.

Demander de l’aide sur un mot VBA

Placé dans la fenêtre VBA, double cliquer sur le mot à expliciter et taper F1.

Récupérer un fragment d’exemple de l’aide,  pour l’intégrer à mon programme,  et ensuite le personnaliser

Sélectionner le texte exemple,
le mettre au Presse-papiers avec
CTRL C,
se déplacer vers le point d’insertion,
et verser là le contenu du Presse-papiers :
CTRL V.

Rendre un traitement conditionnel

Prévoir une instruction IF… THEN… ELSE … ENDIF.

Attention à bien mettre IF et THEN sur la même ligne.

Attention également à mettre en retrait les lignes du cas oui et les lignes du cas non.

Exemple :

If me.DataEntry=False Then            Si le formulaire n’est pas en mode Saisie
      me.DataEntry=True                  
‘Alors, mettre le formulaire en mode Saisie
Else                                                
‘Sinon (le formulaire est en mode Saisie)      me.DataEntry=False                  ‘mettre le formulaire en mode Consultation
End If

Penser à documenter tout ce qui peut l’être, avec des commentaires, pour faciliter la relecture dans six mois ou un an…

Saisir des commentaires (textes aide-mémoire non exécutés) dans un programme VBA

Mettre une apostrophe, au début ou au beau milieu, d’une ligne : tout ce qui suit l’apostrophe sera ignoré (non exécuté) par le programme : c’est une zone de liberté essentielle pour noter les astuces, les pièges, les particularités qu’il faut garder en tête si on veut modifier le programme…


 

AUTOÉVALUATION  sur les états imprimés, éventuellement filtrés

Je vérifie que j’ai bien progressé…

Retour en haut

Je sais …      CORRIGÉ

Commandes  et  procédures

Faire un brouillon d’état pour fixer mes idées : objectifs et contraintes

Repérer les textes variables, bien distinguer les variables des textes constants, réfléchir à la source des informations : ce sont rarement les simples tables qui suffiront, il faudra créer des requêtes pour regrouper des informations de plusieurs tables et éventuellement effectuer des calculs (impossibles dans les tables). Prévoir une mise en page, au moins en gros : quels grands équilibres, regrouper les informations en zones, si possible encadrées et intitulées, pour faciliter le repérage dans l’imprimé.

Utiliser l’Assistant pour créer un état  avec un tableau
(équivalent d’un sous-état)

Active la fenêtre BDD, avec F11, lancer la commande Insertion, État, choisir Assistant état,  puis cliquer sur OK.

Ici, sélectionner la première source (table ou requête), celle de l’état principal, et  prendre tous les champs utiles avec le bouton .

Ne pas cliquer sur le bouton Suivant : sélectionner la deuxième source, celle du sous-état, et prendre également tous les champs utiles avec le bouton .

Et, ensuite seulement, après avoir récupéré tous les champs utiles des deux sources,  cliquer sur le bouton  Suivant

Lire et comprendre les deux étapes suivantes de l’Assistant, sans rien y changer, et passer à la suite en cliquant sur Suivant…

Ajouter ensuite un tri éventuel, pour forcer sur papier l’ordre d’affi­chage des lignes du tableau,  puis cliquer sur Suivant.

Choisir une présentation et un style … Suivant

Taper enfin le titre et cliquez sur Terminer.

Sélectionner des groupes de contrôles (3 techniques)

·   Clic sur le premier contrôle, puis MAJ clics sur les contrôles à ajouter à la sélection, et MAJ clic pour retirer un contrôle à la sélection.

·   Dessiner un rectangle imaginaire en glissant au travers des contrôles à sélectionner : les prendre « au lasso ».

·   Cliquer ou glisser sur une des règles blanches graduées, pour sélectionner tous les contrôles placés en regard.             
Se rappeler qu’on peut ensuite
Maj cliquer sur tel ou tel contrôle pour le retirer de la sélection. Souvent, il est beaucoup plus rapide de trop sélectionner puis de retirer un ou deux contrôles

Aligner des contrôles entre eux

Sélectionner le groupe de contrôles à aligner, puis cliquer droit Aligner

Noter que c’est le contrôle le plus éloigné qui sert de repère pour les autres.

Créer un texte libre sur un état

Ajouter un contrôle Étiquette, et taper le texte voulu à l’intérieur…

Faire apparaître ou disparaître les différents En-têtes et Pieds

Lancer la commande Affichage, En-tête et pied de page pour des mentions qui doivent apparaître sur toutes les feuilles de papier, ou Affichage,  En-tête/pied de rapport (ou d’état) pour des mentions qui doivent apparaître seulement sur la première ou la dernière page de la série qui sera imprimée.

Prévoir un saut de page entre deux enregistrements

Sélectionner la zone la plus basse de l’état : le pied de page ou d’état ou de groupe, par exemple.

Faire apparaître, si ce n’est pas déjà fait, la palette des propriétés de cette zone, en double cliquant n’importe où dans la partie blanche de la zone.

Puis, poser un Saut de page Après  cette section, ce qui commencera toujours une nouvelle page pour l’enregistrement suivant, juste après le pied de groupe.

Arrêter d’imprimer des pages blanches pour rien

Il est fort possible qu’Access imprime une page blanche entre deux factures.

Cela tient au fait que l’Assistant a complètement rempli l’espace disponible (entre les marges) avec les champs voulus… Si bien qu’ensuite, le moindre petit déréglage (une glissade) d’un champ en dehors des limites (à droite) empêche d’imprimer sur la page courante tel fragment de graphisme ou tel caractère : il sera alors imprimé sur une page supplémentaire… 

Pour régler le problème, on  peut réduire un peu les marges gauche et droite : lancer la commande Fichier, Mise en page… et taper un chiffre plus petit (ce sont des millimètres) en marge gauche et droite.

Prévoir une valeur calculée sur l’état

Deux possibilités :

·     Soit on prévoit un champ calculé dans la requête qui alimente l’état, et dans ce cas, il suffit de prévoir dans l’état une Zone de texte dépendante liée à ce champ.

·     Soit on ajoute dans l’état une Zone de texte indépendante (non reliée à un champ de table), et on tape une formule de calcul (précédée du signe égal) dans sa propriété Source.
Exemple :
=Somme(Montant)

Formater un nombre de façon à forcer l’affichage de zéros non significatifs (à gauche)

Donner à la propriété Format la valeur 00000
Prévoir autant de zéros que la longueur fixe désirée pour les nombres.

Créer un bouton de formulaire qui ouvre un état en Aperçu

Créer un bouton dont le code (programme VBA) soit rédigé sur ce modèle :

DoCmd.OpenReport "Facture", acPreview

Chercher dans l’aide VBA, la syntaxe et des exemples d’une instruction donnée

Double cliquer sur le mot inconnu (OpenReport par exemple) , 
puis taper
F1.

Forcer l’impression d’un état avec les seules données du formulaire en cours

Créer un bouton dont le code (programme VBA) soit rédigé sur ce modèle :

DoCmd.OpenReport "Facture", acPreview
 
, , "[N°Facture]=" & Me!N°Facture
Attention aux deux virgules après acPreview.

Finaliser l’application

Tester l’application entière. 

Bien vérifier tous les recoins de l’ergonomie  (contrôler le confort de l’utilisateur), notamment toutes les aides de la barre d’état de tous les contrôles !   

Penser à la propriété Texte d’Info-bulle des boutons pour afficher des post-its jaunes au survol de la souris !   

Tout ce qui peut aider l’opérateur de saisie dans son travail est un facteur de qualité pour votre application sur Access.  Par exemple, un post-it sur tous les boutons Fermer peut utilement rappeler à l’opérateur que la touche Échap  ferme le formulaire sans la souris…

Déplacer un ou plusieurs contrôles  sans perdre leur alignement

Sélectionner les contrôles à déplacer, puis CTRL MAJ Flèche

Retour en haut

 

 

 

 

 

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.