Leçon 29 : Les formulaires : Premiers pas

Pour suivre cette leçon, vous devez avoir suivi les leçons précédentes. Ou plus précisément, vous devez être en possession de la base de données procd.mdb telle qu'elle était à la fin de la leçon précédente. Si vous n'êtes pas certain de l'avoir, vous pouvez la télécharger ici

Résumé de la leçon précédente

La dernière fois, nous avons vu que les requêtes permettent de faire des calculs : Il est possible, tout comme Excel, d'utiliser des champs existants : [SalaireMensuel], des champs dynamiques renseignés lors du lancement de la requête : [Prime] et de simples chiffres : 0.0505. Nous avons vu que, contrairement à Excel, Access n'accepte pas du tout de laisser s'écraser ses formules de requêtes avec des données. Cette possibilité de calculs fait littéralement exploser les possibilités des requêtes.

Aperçu de cette leçon

Dans cette leçon, nous allons abandonner les requêtes, bien que nous n'avons pas du tout tout vu en ce qui les concerne, pour nous intéresser au 3ème grand objet d'Access : Les formulaires

A quoi servent exactement les formulaires ?

Les tables servent à STOCKER les données, les requêtes servent à EXTRAIRE les données, et faire des calculs, les formulaires vont servir à SAISIR les données

Mais on pouvait déjà les saisir dans le tables et les requêtes, non ?

Oui, mais pas de manière vraiment conviviale... Ce ne sont que des colonnes de type Excel... Et, dites-moi si je me trompe, mais si vous avez l'habitude d'utiliser de grandes feuilles de calcul Excel, et que tout à coup vous partez en vacances et que vos collègues, ou un apprenti prennent plus ou moins votre place, vous n'avez pas tellement envie de leur laisser libre accès à vos précieuses feuilles de calcul, non ?

Ah oui, ça c'est vrai ! J'en ai des sueurs froides ! Chaque fois que je ne suis pas là, je suis bien obligé de laisser l'accès à mes feuilles Excel, parce que sinon, la boîte s'arrête de fonctionner ! Quiand je reviens, j'ai toujours une peur bleue de ne rien retrouver comme quand je suis parti !

C'est exactement à ça que vont servir les formulaires !

C'est à dire ? ...

C'est à dire que vous allez pouvoir construire une jolie interface graphique avec des listes déroulantes, des boutons, enfin bref : Une superbe mise en page des données qui va vous permettre de laisser des gens qui s'y connaissent moins bien que vous saisir simplement ou effacer, ou modifier des données dans vos tables sans vraiment de risque d'erreur !

Pour mieux illustrer ce que je voulais vous dire, dans Access, allez dans le menu Outils/Options, et cliquez sur l'onglet "Feuille de données" :

N'est-ce pas très sympathique de choisir ses options dans un cadre aussi agréable que celui-ci ?

Voilà ce que sont les formulaires.

Compris ! Comment commence-t-on ?

Cliquez sur Formulaires, et sur Nouveau :

Dans la boîte de dialogue qui apparait, choisissez "Formulaire instantané : Colonnes", dans la liste déroulante du bas, choisissez "T_Celebrite", et cliquez sur OK :

REMARQUE : Dans la liste déroulante du bas, ou vous avez choisi T_Celebrite, vous avez constaté que les tables et les requêtes étaient mélangées dans la même liste : Grâce au fait que nous avons commencé toutes nos tables par T et toures nos requêtes par R, comme dans cette liste, tout est rangé par ordre alphabétique, les tables sont naturellement séparées des requêtes... C'est aussi simple que ça !

Dès que vous avez cliqué sur OK, vous voici maintenant l'heureux propriétaire de votre premier formulaire :

Il est possible que vous n'obteniez pas un formulaire tout gris comme moi, mais avec un fond coloré, et l'apparence des champs diffère quelque peu. Ne vous en faites pas, ce n'est pas très important, nous verrons plus tard d'ou ça vient.

Constatez quelques imperfections au sein de mon formulaire : La date de naissance ne tient tout juste pas dans sa zone, l'étiquette "Remarques éventuelles" a été un peu tronqué, à l'inverse, d'autres champs sont manifestement un peu trop larges, comme le salaire mensuel par exemple.

REMARQUE IMPORTANTE : Sure certaines versions d'Access 97, lorsque vous demandez ce même assistant formulaire, il est possible qu'il "oublie" de vous installer les listes déroulantes (Titre, Domaine, Pas et Etat civil), ainsi que la case à cocher qu'il vous transforme en simple zone de texte Oui/Non. C'est un bug... Si ça vous est arrivé, ce n'est pas grave pour l'instant, laissez comme ça.

OK. Donc maintenant, qu'est-ce que je fais avec mon formulaire ?

Nous allons commencer par nous déplacer à l'intérieur de notre formulaire : Vous constatez que contrairement aux tables, vous n'avez sous les yeux qu'un seul enregistrement : Le premier (Napoléon Bonaparte)

Bon, vous constatez que vous pouvez cliquer dans n'importe quel champ. Pour utiliser le clavier, vous appuyer sur la touche tabulation : Vous passez de Titre à nom, ensuite à prénom, etc. Quand vous arrivez sur le dernier champ (Remarques éventuelles), et que vous appuyez encore une fois sur tabulation , vous arrivez au premier champ du 2ème enregistrement (Madame de Carole Bouquet). Pour revenir en arrière champ par champ, vous appuyez sur MAJUSCULE-Tabulation ().

En utilisant les touches PAGE UP et PAGE DOWN , vous vous déplacez directement d'un enregistrement à l'autre.

Allez sur le 3ème enregistrement (C'est Georges Brassens normalement). En dessous de votre formulaire, vous voyez ce qu'on appelle les boutons de déplacement :

A
Veut simplement dire "Enregistrement"
B
Permet d'aller directement au premier enregistrement (Ici, c'est Napoléon). Equivalent clavier : CTRL/HOME ()
C
Permet de remonter d'un enregsitrement (équivalent à PAGE UP )
D
Signifie que nous sommes sur le 3ème enregistrement (Ce n'est pas d'une utilité transcendantale). Vous pouvez aller directement au 82ème enregistrement directement simplement en écrivant 82 à la place de 3, et appuyez sur ENTER
E
Permet d'avancer d'un enregistrement (équivalent à PAGE DOWN )
F
Permet d'aller directement sur le dernier enregistrement (équivalence clavier : CTRL END : )
G
Permet d'aller sur un nouvel enregistrement (Dans le but de créer un nouveau client)
H
Donne le nombre d'enregistrements total du formulaire. Attention : Si vous cliquez simplement sur G, il vous indiquera "Enr. 101 sur 101", même si vous n'avez encore rien écrit

 

En fait, ces boutons de déplacement seraient plus utiles si par exemple, les gens étaient triés par ordre alphabétique...

Absolument oui. Essayons : Triez les enregistrements par ordre alphabétique du prénom. Vous vous souvenez ? il suffit de cliquer avec le bouton droit de la souris sur le prénom, et de choisisr "Tri croissant" (c'était à la leçon 19)

Maintenant, le premier enregistrement est Coluche (il n'a pas de prénom), suivi de Fernandel, Dave, Hardi, Bourvil (pas de prénom non plus), et ça continue avec AL pacino, ALBERTO tomba, etc... Le dernier est bien ZINEDINE zidane ?

Oui, bien sûr ! Donc je suppose qu'on peut également extraire certaines données (comme les tables dans la leçon 19) ?

Bien entendu. Essayez : Demandez les gens qui gagnent plus de 28000 francs par mois : Vous devriez obtenir 8 enregistrements : . Constatez qu'il a, comme dans les tables, ajouté (Filtré) à côté de 8. Vous pouvez bien entendu les trier ensuite par ordre du plus pauvre au plus riche, ou par ordre alphabétique, ou même redemander à a^fficher tous les enregistrements...

En fait, c'est vraiment comme dans les tables !

Oui. D'ailleurs, j'irai même plus loin, nous SOMMES dans la table T_Celebrite.

Oui, bon quand même pas !

Si. En fait, le formulaire n'est qu'une sorte de filtre sur la table : Les requêtes étaient des filtres "techniques", et bien, les formulaires sont des filtres "esthétiques". Vous vous rappelez à la leçon 21 ?Avec les requêtes c'était le même principe : Si vous changez les données dans les requêtes, ça change en fait dans la table

Ah OK ! C'est le même principe ! Si je change quelque chose dans le formulaire, ça changera automatiquement dans la table, même si je ne sauvegarde pas mon formulaire !

Exactement. Faites ce test :

  1. Allez dans Napoléon Bonaparte (Ah oui, il faut le trouver... débrouillez-vous...)
  2. Remplacez Bonaparte par BonaparteXXX
  3. Quittez le formulaire. Access vous demande de le sauver (La structure du formulaire donc, PAS les données). Dites NON
  4. Allez ensuite dans la table et vérifiez : Bonaparte est maintenant BonaparteXXX

Petite astuce : Vous pouvez toujours travailler avec le clavier, sans jamais utiliser la souris pour modifier les données des formulaires : Même si vous êtes sur une case à cocher : Si vous êtes sur "Decede" (vous vous êtes déplacé jusque là avec la touche tabulation, et un petit liseré gris apparait alors), vous pouvez utiler votre BARRE D'ESPACEMENT pour mettre ou enlever la coche

Effectivement. Et donc toutes les requêtes qui contiennent Bonaparte contiennent BonaparteXXX

Evidemment. En fait, les requêtes et les formulaires travaillent vraiment drectement dans les tables.

Il faut donc faire vraiment attention !

Comme d'habitude, oui.

Bon, enlevez les XXX à côté de Bonaparte, et faites un simple exercice : Recréez le même formulaire qu'on vient de faire, et sauvez-le cette fois sous F_CelebriteAssistantInstantaneColonne.

Pour supprimer un enregistrement, cliquez dans la zone de sélection de l'enregistrement sur la gauche de l'écran : . Quand vous cliquez, cette zone devient grise foncée : . A ce moment, vous pouvez effacer un enregistrement en appuyant sur la touche DELETE . Essayez : Vous avez un message d'avertissement : . Si vous dites oui, vous allez vraiment effacer l'enregistrement y compris dans la table... Répondez donc non pour éviter celà (encore que comme vous pouvez retélécharger la base de données telle qu'elle était au début de cette leçon à tout moment, ce n'est pas très important)

Oui. En fait, c'est vraiment le même principe que dans les tables ou les requêtes. Je me rappelle de l'effacement dans les tables à la leçon 5.

Voilà. Vous avez tout compris. Je me suis un peu répété simplement parce que comme ce formulaire ne montre qu'un enregistrement à la fois, ce n'était peut être pas si évident de faire la relation.

Oui, c'est vrai : Nous n'avons vu qu'un seul enregistrement par écran... Est-il possible d'en voir plusieurs à la fois sans devoir appuyer sur page up ou page down, ni utiliser les flèches de déplacement ?

Oui. Nous pouvons. Nous allons le faire immédiatement. Fermez le formulaire F_CelebriteAssistantInstantaneColonne que vous venez de recréer, et faites à nouveau . Mais cette fois, choisissez "Formulaire instantané Tableau", et choisissez toujours T_Celebrite, et OK. Voici le résultat :

Ah oui ! Je vois ! La grande différence avec le formulaire d'avant, c'est que cette fois, on voit plusieurs enregistrements à la fois : Napoléon, Carole Bouquet, etc...

Exactement. C'est très sympa, mais regardez de plus près : Comem la table comporte un certain nombre de champs, il y a plein de choses tronquées : Le titre n'est pas complet (Monsie, Madam), Le domaine non plus, l'état civil non plus, le salaire mensuel est carrément illisible ainsi que la date de naissance !

Oui, finalement c'est nul !

L'assistant "Formulaire instantané Tableau" ne travaille pas très bien avec des tables qui ont de nombreux champs

Ce qui veut dire qu'avec des tables qui n'ont presque pas de champs (Comme T_Pays par exemple), ça se comporterait mieux ?

Absolument. Ou alors on peut carrément baser ce formulaire sur une requête qui, elle, ne comporte pas autant de champs que la table ! On va essayer : Fermez ce formulaire totalement moche, et ne le sauvegardez pas. Retournez dans les requêtes et allez visualiser "R_CelebriteCalculSalaireAvecPrime500" Vous vous souvenez ? C'était une requête avec un champ calculé...

Ah oui ! Comment ça allait déjà ?

Déjà oublié ? Retournez donc jeter un coup d'oeil à la leçon 28 pour vous rafraîchir la mémoire, sinon ça va être difficile.

OK. C'est bon.

Alors, maintenant, créez un formulaire "Assistant instantané tableau", et choisissez "R_CelebriteCalculSalaireAvecPrime500", et OK. Vocii le résultat :

Ah oui, là, c'est mieux ! Tous les champs sont là, bien aérés !

Exactement. Avec votre champ calculé "Salaire avec prime" qui est bien là. Comme dans la requête quoi...

C'est marrant, le salaire avec prime possède le signe Euro devant...

Oui, nous allons remédier à celà bientôt. Pour l'instant ne vous en préoccupez pas.

Et donc, comme dans la requête, je ne peux pas changer le montant du Salaire avec prime je suppose

Evidemment non. Dans la requête non plus. Si vous essayez de changer un Salaire avec prime, par exemple, essayez de changer les 100000 francs de Napoléon en 12000 francs, vous ne pouvez pas : Vous avz toujours le message d'erreur dans la barre d'état en dessous de votre écran :

Et si j'efface un enregistrement, ça va effacer dans la table ?

Bien sûr : Le formulaire est basé sur la requête, la requête est basée sur la table DONC ce que vous changez dans le formulaire (Ajout, modification, suppression) sera instantanément répercuté dans la table.

Evidemment... C'est vraiment logique !

Oui. Bon, fermez votre formulaire, et sauvegardez-le sous "F_CelebriteCalculSalaireAvecPrime500AssistantInstantaneTableau"

C'est pas un peu long ?

Oui, mais c'est explicite :

F_ pour "Formulaire
Celebrite Ca vient de la table Celebrite
CelebriteCalculSalaireAvecPrime500 En fait ça vient de la requête R_CelebriteCalculSalaireAvecPrime500
CalculSalaireAvecPrime500 Ca explique le calcul en 2 mots
AssistantInstantaneTableau Pour expliquer comment nous avons fait ce formulaire

Evitez d'appeler vos formulaires F_1, F_2, F_3, etc. uniquement parce que vous manquez d'imagination ou que vous avez la flemme de leur donner un nom plus explicite, parce que quand vous en aurez 30 ou 40, je vous garantis que vous ne saurez plus quel formulaire fait quoi, et vous allez devenir fou...

Bien, faites un petit exercice : Créez un nouveau formulaire en Assistant Instantané Tableau, basé sur la R_CelebriteCinemaFrancais (Voyez comme le nom de la requête est explicite : Comme elle commence par R, je n'ai pas besoin de vous spécifier que c'est une requête, et le nom est suffisamment évoquateur pour ne pas avoir à le réexpliquer)

Vous n'avez pas tous les enregistrements évidemment :

Oui, tiens, c'est marrant, ce n'est pas marqué "(Filtré)" à côté de 17...

Non puisque ça provient de la requête... Or, la requête est complète par rapport à elle-même...

Oui, je me souviens ! Il ne met "Filtré" que quand on filtre avec le bouton droit de la souris !

Exactement : Essayez de filtrer tous les "Michel" avec le bouton droit de la souris

Et voilà ! OK, maintenant, je n'en ai plus que 2 (Michel Simon et Michel Blanc), et il me met bien "Filtré" en bas.

Exactement. C'est tout ce que je voulais dire. Bien : fermez ce formulaire, et appelez-le F_CelebriteCinemaFrancais.

Nous allons voir maintenant comment créer un formulaire un petit peu plus personnalisé... Jusqu'ici nous n'avons pas pu vraiment donner notre grain de sel. Faites encore une fois Formulaire, Nouveau

C'est quoi L'assistant instantané feuille de données ?

Il n'est pas intéressant : Il va vous concevoir un formulaire qui ressemble esthétiquement à une table : Pas vraiment d'intérêt ici.

Et l'assistant graphique ?

Ah celui-là est plus sympa : C'est pour créer un graphique (comme dans Excel) mais on prend directement les données des tables. On verra plus tard les graphiques.

Et l'assistant tableau croisé dynamique ?

Pour l'utiliser, il faut posséder égaleemnt Excel : Si vous ne savez pas ce que c'est qu'un tableau croisé dynamique, Essayez d'en créer un directement avec Excel (Dans Excel : menu Données/Rapport de tableau croisé dynamique), mais ça sort largement du cadre de ce cours.

OK. Revenons à nos moutons... Nous allons donc concevoir un formulaire semi-personnalisé

Oui : maintenant, vous allez choisir donc , OK, et "Assistant formulaire", choisissez comme d'habitude T_Celebrite, et OK.

Vous arrivez dans cette première boîte de dialogue : . Il s'agit de sélectionner les champs de votre table qui vont apparaître dans le formulaire. Bon, dans 99% des cas, nous avons besoin de tous les champs, puisque le but même du formulaire est de saisir des données. Cliquez donc sur la double flèche >> et SUIVANT.

La 2ème boîte de dialogue permet de choisir la présentation :

Colonne simple C'est comme le premier formulaire que nous avons créé tout à l'heure : Un seul enregistrement par écran
Tabulaire C'est comme le formulaire instantané tableau : Plusieurs enregistrements sur un même écran
Feuille de données C'est une présentation qui ressemble à une table comme une soeur jumelle : Intérêt très limité
Justifié C'est une présentation que nous n'avons pas encore vue, on ne pouvait pas la choisir dans les formulaires instantanés, c'est seuleemnt ici qu'on peut la sélectionner.

Afin de se rendre compte de ce qu'est la présentation en Justifié, sélectionnez-là et cliquez sur SUIVANT.

Cette boîte de dialogue est sans doute la plus amusante : . C'est ici que vous pouvez choisir l'apparence générale de votre formulaire : Cliquez dans les différents thèmes : Bleu, expédition, etc. pour vous rendre compte des différents choix. Si vous travaillez avec Access 97, vous avez d'autres noms et d'autres choix mais le principe est le même. Et, justement, c'est là que c'est subtil : Ce que vous allez choisir comme thème maintenant va être mémorisé par Access, et toutes les prochaines fois que vous allez choisir un formulaire instantané Tableau ou Colonne simple, il va se rappeler de ce que vous choisissez maintenant, et vous réappliquera le même thème toutes les fois suivantes.

Choisissez Fax (International si vous êtes avec Access 97), et cliquez sur SUIVANT

Ceci est la dernière boîte de dialogue : . Donnez dès maintenant le nom de votre formulaire : F_CelebriteSemiPersonnalise, et comme il n'y a plus de bouton Suivant, cliquez sur TERMINER. Voilà :

D'accord : Le fond y est, et le style justifié, c'est quoi alors ?

C'est ça : Ce sont les étiquettes qui sont juste au dessus des champs (Nom qui est au dessus de Bonaparte par exemple). Et un seul enregistrement par écran.

C'est assez compressé comme présentation

Oui, contrairement au style Tableau, ou parce qu'il affiche plusieurs enregistrements sur un même écran, on ne peut pas avoir trop de champs, ici, ce style de formulaire est particulièrement adapté aux formulaires basés sur des tables qui possèdent un grand nombre de champs sans qu'ils se chevauchent.

Bon, on constate malgré tout des imperfections : Par exemple, le champ contenant la date de naissance est vraiment beaucoup trop large... Mais bon, c'est un détail, mais quand même ce n'est pas très très pratique.

Fermez ce formulaire.

Il ne me demande pas de sauvegarder ?

Non. Vous lui avez donné le nom F_CelebriteSemiPersonnalise dans la dernière boîte de dialogue. Il l'a déjà sauvé.

Et maintenant, donc, si je demande un formulaire instantané, il va me le faire avec une présentation "Fax" ?

Oui. Essayez : Créez un nouveau formulaire "Formulaire instantané : Colonnes", basé sur T_Fournisseur pour changer.

Ah oui : Il m'a gardé la même présentation. C'est sympa ! Mais par contre il y a juste 2 champs... ça fait idiot d'avoir un seul enregistrement par écran !

Oui. C'était pour vous montrer que chaque présentation de formulaire a son importance. Bon fermez ce formulaire sans le sauvegarder.

REMARQUE : Si dans la table, vous avez pris soin d'infdiquer les légendes des champs, les formulaires ensuite basés sur cette table reprennent les légendes des tables, d'ou l'immense intérêt des légendes

Bon... Hem... On peut résumer ?

Le formulaire est une interface utilisateur permettant de saisir et de visualiser les données des tables et des requêtes à l'écran de façon esthétique et conviviale. Il existe plusieurs styles de foirmulaires : Les formulaires en colonne (Un seul enregistrement à l'écran) et en tableau (Plusieurs enregistrements à la fois sur l'écran). Tout comme les requêtes, les formulaires puisent directement dans les tables : Tout changement apporté à une donnée (Ajout, suppression, modification) sera immédiatement effective sur la table sous-jacente. Nous avons vu deux manières de faire des formulaires : De manière semi automatique (Assistant formulaire), ou complètement automatique (Assistant instantané colonne ou tableau).

Avez-vous bien compris ?

  1. Le formulaire sert principalement à
    a. Effacer des données
    b. Ajouter des données
    c. Modifier des données
    d. Effacer, ajouter, modifier ou visualiser des données ***

  2. Est-il possible d'imprimer un formulaire ?
    a. Oui. C'est même une de ses principales fonctions
    b. Oui, mais le résultat ne sera généralement pas terrible, vu que le formulaire n'est pas optimisé pour ça ***
    c. Oui, mais seulement si on y iunstalle un programme spécial d'impression (En téléchargement sur Internet)
    d. Non

  3. Un formulaire se base sur :
    a. Une table
    b. Une requête
    c. Une table ou une requête ***
    d. Un formulaire

  4. Si on efface un formulaire que l'on aurait appelé F_CelebriteAnnee30 basé sur la requête R_CelebriteAnnee30 :
    a. Seul le formulaire est effacé ***
    b. Le formulaire ET la requête sont effacés
    c. Le formulaire, la requête ET la table T_Celebrite sont effacés
    d. Les données contenues dans le formulaire sont effacées de la table, aisni que le formulaire lui-même

  5. J'ai un formulaire basé sur T_Celebrite, que j'ai nommé F_Celebrite. J'efface la table T_Celebrite
    a. Je perd ma table et toutes les données qu'il y avait à l'intérieur. F_Celebrite existe toujours, mais ne contient plus rien ***
    b. Je perd ma table et toutes les données qu'il y avait à l'intérieur. Mais F_Celebrite continue à fonctionner comme si de rien n'était
    c. Je perd ma table, mais PAS les données qu'il y avait dedans, et donc, F_Celebrite continue à fonctionner comme si de rien n'était
    d. Il est impossible d'effacer une table qui sert de base à un formulaire

Pour voir les solutions, il vous suffit de sélectionner le questionnaire ci-dessus : 3 petites étoiles *** apparaîtront en face des bonnes réponses.

Exercice

Créez une base de données appelée Video.MDB dans laquelle vous allez entrer vos différents filsm que vous avez en cassette vidéo ou DVD. L'exercice consiste à pouvoir saisir vos films convivialement à l'aide d'un formulaire F_Video qui sera un formulaire instantané colonne, sans thème particulier (le formulaire doit être simplement gris, standard)

Voici 3 films qui vous allez rentrer à titre d'exemple : (Vous les entrerez DANS LE FORMULAIRE, PAS dans la table)

- Le Gendarme à St-Tropez, Film français, Comique, avec De Funès comme acteur principal. Il dure 95 minutes, il est en cassette vidéo
- Godzilla, Film américain, Science-fiction, Pas d'acteur principal, il dure 117 minutes, DVD
- Titanic, Film américain, Aventure, avec Leonardo di Caprio, il dure 186 minutes, DVD

Pour simplifier, ne créez pas de tables-sattelites pour créer vos listes déroulantes, mais faites les en Local, même si ce n'est pas très "pro"

A vous de déterminer quels éléments vous avez besoin (Tables ? Champs? Requêtes ? Formulaires ? Sous-Tables ? Listes déroulantes ? Types de données ? Cases à cocher ? etc.). Pensez à remplir les légendes des champs dans les tables

Téléchargez la solution de l'exercice ici

Si vous n'êtes pas tout à fait certain d'avoir suivi correctement toutes les étapes de cette leçon, vous avez la possibilité de télécharger ici la version de procd.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.

Aperçu de la leçon suivante

Lors de la prochaine leçon,