Leçon 38 : formulaires : valeurs par défaut (exemple de la date de création), interdiction d'ajout, suppression, modification d'enregistrements, Gestion avancée des propriétés, taille du formulaire

Temps nécessaire pour suivre cette leçon : Entre une heure et une heure et quart

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 ProFormation.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

Aperçu de cette leçon

Dans cette leçon, nous allons apprendre à gérer certaines propriétés de manière plus élaborée. Nous allons commencer par un cas concret d'utilité de blocage d'un champ.

Sommaire

  1. La valeur par défaut
  2. La fonction Maintenant()
  3. Protection d'un formulaire contre l'entrée de données non autorisées
  4. Protection d'un formulaire contre l'effacement d'enregistrements
  5. Protection d'un formulaire contre l'ajout de nouveaux enregistrements
  6. Résumé des grandes familles des prorpriétés des formulaires, champs et étiquettes
  7. Faire apparaître/disparaître les boutons de déplacement dans un formulaire : Propriété "Boutons de déplacement"
  8. Empêcher l'utilisateur de sélectionner un enregistrement en retirant le sélectuer : Propriété "Afficher sélecteur"


La dernière fois nous avons vu comment bloquer les champs, mais nous n'avons pas vu d'utilité à part dans les calculs.
Est-il utile de bloquer un champ "normal" ?

Prenons un exemple : imaginez que dans votre table des célébrités (qui pourrait être une table des clients), vous vouliez connaître la date et l'heure à laquelle ce nouveau client a été créé.

Comment feriez-vous ?

Dans la table T_Celebrite, je crée un champ "DateCreation", et je le met en type Date-heure !

...Et vous créez un formulaire basé sur cette table.

... Ou j'utilise un formulaire existant, et je lui rajoute ce nouveau champ...

Bien. Maintenant, imaginez que ce n'est pas vous qui saisissez les données, mais votre secrétaire, et vous n'avez pas envie qu'elle écrive n'importe quoi dans cette date de création (Parce que c'est une maligne : quand elle saisit des nouveaux clients lundi matin, elle met la date de création à vendredi soir, pour vous faire croire qu'elle a bossé tard vendredi !), ou alors qu'elle oublie carrément de l'indiquer.... (Magouilleuse ET tête en l'air... AË AÏE AÏE !!!!) Pouvez-vous lutter contre ça, et imposer la véritable date de création sans qu'elle puisse tricher ?

Je bloque le champ ?

Si vous bloquez le champ, elle ne pourra plus rien écrire dedans, même pas la bonne date... Pas terrible !


La valeur par défaut

En fait, il faudrait que le champ DateCreation soit DEJA rempli avec la date et l'heure actuelle. Pour ce faire, nous allons utiliser une option de champ que nous n'avons pas utilisé jusqu'à présent, c'est la valeur par défaut : . Vous savez ce que c'est, la valeur par défaut ?

Je suppose que c'est ce qu'il àcrit si on ne précise pas la valeur du champ ?

C'est ça. On recourt à la valeur par défaut lorsque l'on a un champ qui contient souvent la même chose.

Par exemple, imaginons que vous avez un champ "Ville", et que 9 clients sur 10 habitent Paris en moyenne : au bout d'un moment, vous en avez marre d'écrire tout le temps Paris, Paris, Paris ...Alors, vous préciserez que pour ce champ Ville, la valeur par défaut est Paris. De cette manière, pour tous les nouveaux clients, il sera déjà écrit Paris dans le champ Ville, sans qu'on ait besoin de le saisir...

Et quand de temps en temps, un client vient d'ailleurs, il suffit de remplacer Paris par une autre ville.

Et si par exemple on avait déjà 500 clients déjà saisis, et que je n'avais pas de champ "Ville", tout à coup, j'ajoute ce champ avec la valeur par défaut : "Paris", est-ce qu'il me remplace toutes les villes vides par Paris ?

Ah non ! Il ne touche pas les enregistrements déjà saisis ! Si les villes étaient vides, elles restent vides. C'est seulement pour les NOUVEAUX clients qu'il sera proposé Paris par défaut.

Si vous voulez, vous pouvez essayer.

Revenons à nos moutons : Il faudra donc alors créer un champ DateCreation, et lui donner comme valeur par défaut "maintenant" !

Oui ! Et comme il s'agira de la valeur par défaut, dès qu'un nouveau client sera créé, il aura comme date de création la date et l'heure actuelle, c'est ce qu'on veut, et pour empêcher qu'on puisse modifier cette valeur par défaut, dans le formulaire, on va BLOQUER DateCreation (Activé Non, Verrouillé Oui).

Ca, c'est efficace !


La fonction Maintenant()

Comment fait-on pour préciser que la valeur par défaut, c'est maintenant ?

Dans la valeur par défaut de votre nouveau champ DateCreation, écrivez simplement Maintenant() : (Now() si vous avez une version anglaise)

Lancez la table en mode saisie de données, et regardez dans la dernière colonne d'un nouvel enregistrement :

Ca, c'est évidemment pour les nouveaux enregistrements, les autres sont toujours vides !

C'est le principe même des valeurs par défaut. C'est exactement comme l'exemple des villes plus haut.

Maintenant que vous avez votre DateCreation avec comme valeur par défaut : Maintenant(), quittez la table, et créez un nouveau formulaire en mode création, basé sur T_Celebrite, et installez les champs Nom, Prenom et DateCreation : . Lancez le formulaire en mode saisie de données, et allez sur un nouvel enregistrement : . Ecrivez : Et voilà !

Maintenant, il s'agit de bloquer le champ date de création, et de lui donner une apparence "Fixe".

C'est un bon exercice pour vous : En mode création, demandez le Activé : Oui, Verrouillé : Non, et donnez-lui l'apparence esthétique suivante : . Comment j'ai fait pour encadrer les 2 champs à la fois ? Ah ahhhhh ! Vous avez la mémoire courte on dirait...

Par contre, rien ne l'empêche d'aller dans la table, et là, elle fait ce qu'elle veut ! Elle change toutes les dates de création...

Bienvenue dans le monde !

Elle peut aussi craquer une allumette et bouter le feu à votre bureau. C'est la dure loi des développeurs : à peine ont-ils trouvé un moyen de protéger leurs applications qu'ils pensent déjà à la manière possible de contourner leurs propres sécurités...

On ne peut pas justement l'empêcher d'aller se balader dans les tables ?

Il y a des parades, mais nous verrons ça plus tard.

Pour l'instant, nous pensons à construire. Nous protégerons notre édifice plus tard..


Protection d'un formulaire contre l'entrée de données non autorisées

Autre chose : Peut-on carrément protéger tout le formulaire contre la saisie ?

Oui. Ca va me permettre de vous expliquer un peu mieux toutes les propriétés possibles de tous les objets.

Revenez en mode création, et demandez les propriétés générales du formulaire (Rappelez-vous, nous en avons déjà eu besoin lors d'insertion d'images en arrière-plan, à la leçon 34).

Dans l'onglet Données, mettez Non dans Modif. autorisée : . Lancez le formulaire en mode saisie de données, et essayez d'écrire quelque chose d'autre à la place de Napoléon, ou de Bonaparte. Vous pouvez ?


Protection d'un formulaire contre l'effacement d'enregistrements

Non, effectivement... Et si je voulais empêcher qu'on efface des enregistrements, c'est Suppr autorisée ?

Oui. Ca empêchera de cliquer dans la zone de gauche, et d'appuyer sur Delete :

... Mais ca n'empêche pas d'effacer "Napoléon", et "Bonaparte" l'un après l'autre !

Non, mais là vous n'effacez pas un enregistrement : Vous créez un enregistrement avec des champs vides... C'est comme si vous le modifiez en quelque sorte...


Protection d'un formulaire contre l'ajout de nouveaux enregistrements

Logique ! Et pour empêcher d'ajouter des données, c'est Ajout Données : Non

Exactement. Essayez ! Lancez le formulaire en mode création, et regardez en bas : Le bouton de création de nouvel enregistrement est en grisé :

Avant d'aller plus loin, prenez soin de rendre toutes les autorisations : Qu'on puisse supprimer, ajouter ou modifier les données !

Ce que je voulais surout vous montrer, c'est que chaque objet a des propriétés définies dans différents onglets : Format - Données - Evénements - Autres et Toutes : .

Pour mieux vous les illustrer, affichez les propriétés du champ Prenom :


Résumé des grandes familles des propriétés des formulaires, champs et étiquettes

Onglet Explication Exemple

Format

Cet onglet représente l'ensemble des propriétés esthétiques, comme par exemple la couleur du texte, la couleur de fond, si c'est gras, italique, souligné ? Mais aussi la taille en largeur, en hauteur, la position à partir du bord du formulaire.

Certaines propriétés courantes telles que le gras, italique souligné sont disponibles directement dans la barre d'outils (), et d'autres propriétés ne sont disponibles que dans la fenêtre des propriétés (Par exemple, la propriété Visible : Si vous la mettez à Non, alors, en mode saisie de données, le champ sera invisible - Nous verrons l'utilité plus tard)

Dans le cas du champ Prenom, vous avez par exemple dans l'onglet format, Marge gauche : Si vous la mettez à 0.3cm : , alors, en mode saisie de données, il y aura une petite marge entre le côté gauche du champ et le moment ou on commencera à écrire :

Mais attention : Si vous sélectionnez le formulaire , vous n'aurez PAS les mêmes propriétés dans l'onglet format (ni dans les autres d'ailleurs)...

Eh oui : la propriété Marge gauche par exemple, n'est pas applicable aux formulaires entiers... ce serait idiot ! Et inversement, vous allez rencontrer des propriétés telles que "Image d'arrière plan" qui, elle, n'existe QUE pour le formulaire entier... On ne peut en effet pas déterminer d'image d'arrière-plan pour un simple champ.

Revenons au champ Prenom, et faisons une expérience : Epaississez à la main ce champ en hauteur, et lancez le formulaire en mode saisie de données : . Vous constatez qu'il n'est pas centré en largeur (il est juste décalé car on a demandé la Marge gauche à 0.3cm).

Si on voulait le centrer, on sait qu'on peut utiliser l'icône , ou en définissant la propriété Aligner texte :... Mais ca ne centre pas le texte VERTICALEMENT... Ca le laisse "collé" en haut de son champ... Arriverez-vous à le centrer verticalement, comme ceci : ? Il faudrait pour ce faire trouver une propriété du style "Alignement vertical"... Mais vous avez beau fouiller, pas de trace d'une telle propriété ! Impossible ! Peut-être dans une prochaine version d'Access ? ... Hmm ? Ah vous voulez savoir comment j'ai fait ! Et bien je n'y suis pas arrivé plus que vous, est une image que j'ai "triturée" avec mon programme dessin ! Eh oui, j'ai triché !...

Bon ceci dit, vous pouvez aussi tricher avec la propriété "Marge Haut", mais ne le répétez à personne...

Données

Cet onglet représente l'ensemble des propriétés plus techniques, comme le fait d'activer ou de verrouiller un champ.

Dans le cas d'un formulaire, il contient les propriétés permettant d'autoriser ou d'interdire la suppression, la modification, etc. des données.

Dans le cas d'un champ, il y a la propriété Source contrôle qui vous rappelle de quel champ il est issu (bon, ça c'est facile, c'est directement marqué sur le champ en mode création...)

 

Vous vous rappelez de la propriété Valide Si ? Dans les tables, quand on gérait la taille (leçon 4), il y avait déjà cette propriété. Mais alors, pourquoi y a-t-il une propriété Valide Si également dans le formulaire ?

Reprenons l'exemple de votre secrétaire qui est parfois dans la lune : Dans le formulaire qu'elle utilise, il ne faut pas qu'elle puisse mettre n'importe quel salaire !

On va la brider, et l'empêcher d'écrire un salaire supérieur à 10'000 francs (n'hésitez pas à revoir la leçon 4 si vous ne vous rappelez plus très bien). Par contre, dans la table, c'est vous qui y allez, et vous, vous savez qu'il peut y avoir des salaires qui vont jusqu'à 30'000 francs, mais ils sont rares : D'ailleurs, nous avons mis comme Valide Si : 0 ou entre 2000 et 30000.

Alors, donc, dans le formulaire dans lequel vous êtes, ajoutez le champ SalaireMensuel : .

Dans ses propriétés, dans l'onglet données, précisez les paramètres suivants :

Lancez le formulaire en mode saisie de données : Et essayez de dire que Napoléon gagne 12000 francs : Vous aurez un message d'erreur !

Et si elle n'était pas distraite :

- Patron ! J'essaie d'ajuster le salaire de Napoléon à 12000 francs, mais votre programme me dit que je suis distraite... Il n'est pas très poli !
- Ce n'est pas grave, laissez-moi faire...
... Et vous allez vous même dans la table T_Celebrite pour mettre le salaire de Napoléon à 12000 francs, puis vous revenez dans le formulaire...
- Voilà, mademoiselle, je l'ai corrigé pour vous, vous pouvez continuer à travailler

Evénement

Cet onglet s'adresse exclusivement aux utilisateurs très avancés qui ont quelques notions de programmation : C'est une musique de (proche) avenir...

On peut, avec cet onglet, faire faire des choses automatiquement (des macros ou du Visual Basic) à certains moments : Quand on double clique dans un champ, quand on change d'enregistrement, quand on ouvre le formulaire, quand on clique sur un bouton... Oubliez ça pour le moment.

Autres

Cet onglet représente simplement les propriétés qui n'ont pas vraiment de place dans les autres onglets.

C'est une sorte de fourre-tout... Par exmeple, vous avez une propriété qui ne fait simplement rien : C'est la propriété Remarque : vous pourriez y écrire un commentaire sur un champ,

Par exemple, sur le champ prénom, vous pourriez mettre comme Remarque : "Penser à créer un champ 2ème prénom pour les cas ou les clients ou 2 prénoms".. C'est tout.

Il y a une propriété "Autres" sympathique : C'est l'info-bulle. Une info-bille, c'est la petite explication qui apparait quand vous laissez la souris immobile au dessus d'une icône par exemple, comme ceci : . Vous pouvez, vous aussi, définir des petits textes qui apparaissent comme ça quand on laisse la souris immobile sur un champ. Par exemple, nous voudrions que quand on laisse la souris immobile (en mode saisie de données) sur le champ EtatCivil, il affiche "L'état civil du client" : .

Mettez "L'état civil du client" dans Texte d'info-bulle de l'onglet Format du champ EtatCivil : . Essayez !

Toutes

Cet onglet est simplement l'ensemble de toutes les propriétés des onglets Format, Données, Evénements et Autres.

Comme ça, si vous recherchez une propriété dont vous n'êtes pas sûr de l'onglet dans lequel elle se trouve, vous avez toute la liste ici !

Attention ! C'est super mal-foutu : les propriétés ne sont pas du tout rangées par ordre alphabétique !ü Dans aucun onglet d'ailleurs !

Il faut donc faire très attention à ce que vous sélectionnez avant de demander les propriétés !

Si par exemple, vous sélectionnez les champs SalaireMensuel et EtatCivil , et que vous demandez les propriétés , vous avez les propriétés communes (Sélection multiple) des deux champs (Ici, l'onglet format). Vous avez notamment la propriété Format, décimales, visible, etc...

Mais par contre, si vous sélectionnez un champ ET une étiquette : Par exemple encadrez à la souris l'étiquette Salaire mensuel ET le champ SalaireMensuel , et que vous demandez les propriétés, ALORS, vous n'aurez que les propriétés COMMUNES aux deux éléments ! Par exemple, vous trouverez les propriétés Visible, Couleur de fond, Police de caractères, mais vous ne verrez PAS les propriétés qui ne sont applicables qu'aux champs, telles que Format, ou Décimales (nombre de décimales) qui ne sont PAS des propriétés d'étiquettes...

D'ailleurs, les étiquettes n'ont aucune propriétés de Données : Essayez : Si vous sélectionnez à la fois un champ et une étiquette et que vous demandez les propriétés et que vous cliquez sur Données, vous ne verrez rien..

En fait c'est logique : Dans la vie de tous les jours, vous faites aussi comme ça : votre chat à une propriété "Couleur de poils", et votre chien aussi... Par contre pas votre télé! Mais la télé, elle, a une propriété "Taille de l'écran" que n'ont pas vos animaux domestiques... Et vos 3 "choses" ont des propriétés communes : Le poids, le prix, l'age...

Gardez cet exemple amusant à l'esprit, il vous permettra d'appréhender le fonctionnement d'Access plus facilement, et, par extension, d'autres programmes.

Attention aux subtilités : Si vous voulez mettre une image de fond sur votre formulaire, il faudra demander "Image", onglet Format, des propriétés du formulaire , tandis que si vous voulez changer simplement la couleur du fond de l'écran, c'est la propriété Couleur fond, de l'onglet format, de la zone Détail qu'il faut modifier :

Il y a d'autres propriétés intéressantes ?


Faire apparaître/disparaître les boutons de déplacement dans un formulaire : Propriété "Boutons de déplacement"

Comme vous le constatez, il y en a une sacrée quantité... Par exemple, vous pouvez supprimer les boutons en bas du formulaire : . Pour faire disparaître ça, vous avez une idée ?

Hmmmm... Ca a l'air d'être un truc rattaché à la section détail... ou plutôt du formulaire lui-même..

Oui, c'est une propriété du formulaire, mais laquelle ? Quel onglet ?

Moi, je dirais que c'est plutôt une propriété de données, je regarde... Est-ce qu'il y a une propriété comme "Flèches", ou "création d'enregistrement" ?

Je vais vous aider : Ce n'était pas dans l'onglet Données, mais dans l'onglet Format, et ça s'appelle "Boutons de déplacement". Essayez de les masquer !

Ah oui, ca marche, ils ont disparu !

De toute façon, vous pouvez toujours vous déplacer avec les boutons Page Up et Page Down


Empêcher l'utilisateur de sélectionner un enregistrement en retirant le sélecteur : Propriété "Afficher sélecteur"

Et si je voulais supprimer la barre de sélection ?

C'est la propriété "Afficher Sélecteur" de l'onglet Format du formulaire.

Mais alors je ne peux plus effacer mes enregistrements...

Si : En allant dans le menu Edition/Supprimer l'enregistrement.

Vous avez juste supprimé esthétiquement la barre de sélection, mais vous pouvez toujours techniquement effacer vos enregistrements (C'est d'ailleurs pour ça que cette propriété se trouve dans l'onglet Format)...

Et vous pouvez faire exactement l'inverse ! si vous laissez visible la barre de sélection (Afficher sélecteur), mais que vous demandez la propriété "Suppression autorisée" à Non, alors, vous verrez toujours cette barre de sélection, mais même si vous essayez de cliquer dessus et d'appuyer sur la touche Delete, ca ne marchera pas !

Ce qui serait plus logique, c'est de supprimer la barre de sélection, ET de demander "Suppression autorisée" à Non...

Ben oui... Bon ben je crois qu'à partir de maintenant, je sais vraiment ou chercher !

Fermez votre formulaire, et nommez-le F_CelebriteProprieteAvancee

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

Nous avons donc vu l'utilité de la "Valeur par défaut", qui est une propriété de champ de table principalement, ainsi que son couplage aux propriétés Activé et Verrouillé, qui sont des propriétés de formulaire.

Dans la foulée, nous avons étudié la fonction Maintenant() qui renvoie la date et l'heure actuelle.

Nous avons vu également comment on restreint un formulaire : autorisation/interdiction de : ajouter des données, supprimer des données, modifier des données. Nous avons vu plus en détail les propriétés, comment elles se structurent en 4 onglets : Format, Données, Evénements et Autre (Le dernier onglet n'étant que l'ensemble de toutes les propriétés).

Nous avons vu la propriété Marge gauche et marge haut, "Valide Si" et "Message si erreur" dans le formulaire cette fois (nous les avions vu dans les tables avant), la propriété "Texte d'info-bulle", la propriété de formulaire "Boutons de déplacement", "Sélecteur d'enregistrement".

Avez-vous bien compris ?

  1. J'ai une table T_Client, avec un champ Ville. Dans la table, ce champ vide possède la valeur par défaut "New-York". Je crée un formulaire basé sur cette table, et je place le champ ville sur ce formulaire. Dans ses propriétés, je redéfinis sa valeur par défaut à "Los Angeles".
    Je lance le formulaire en mode saisie de données, et je me place sur un nouvel enregistrement. Qu'y a-t-il dans "Ville" ?

    a. New-York
    b. Los Angeles ***
    c. Access donne un message d'erreur "Conflit de propriété 'Valeur par défaut' entre la table-source et le formulaire"
    d. Dans le formilaire, les champs n'ont pas de propriété "Valeur par défaut"

  2. Je désire changer la couleur de fond de mon formulaire pour le mettre en rouge. Que dois-je sélectionner pour définir cette propriété "couleur de fond" ?
    a. Le formulaire
    b. La section "Détail" ***
    c. Tous les champs
    d. Tous les champs ET toutes les étiquettes

  3. La propriété "Annulation" du formulaire
    a. Sert à empêcher d'annuler le dernier changement effectué
    b. Sert à demander une confirmation supplémentaire lors de l'effacement d'un enregistrement
    c. N'existe pas ***

  4. Il est nécessaire de ne pas laisser le formulaire trop s'agrandir en largeur et en hauteur:
    a. Pour éviter qu'il "saute" quand on fait page up ou page down, et pour éviter d'afficher des ascenseurs inutiles ***
    b. Parce que chaque centimètre supplémentaire de formulaire prend 1 Mo sur le disque dur
    c. A cause d'un bug d'Access qui risque de tout faire planter si on dépasse 30 centimètres par inadvertance


    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

L'exercice consiste à créer une base de données Finance.mdb, qui va contenir une table T_Client avec les champs et les données ci jointes :

NomFamille NoCompte Avoir Interet DateEntree
Muller C0-390-332 7500 3.0% 03.08.2001
Martin C0-347-991 18970 4.5% 04.10.2001

Votre travail consiste à créer un nouveau formulaire

Exigences particulières :

Table :

  • Le No de compte doit avoir un masque de saisie (A0-000-000) (ca vous fera office de révision...)
  • L'avoir est du Monétaire, en format standard
  • Il n'y a pas de clé primaire
  • L'intérêt est en type Numérique réel simple, format : 0.0% (Le format pourcentage donnerait 2 décimales, alors qu'on en veut qu'une)
  • Pensez à attribuer une légende aux champs
  • La valeur par défaut de DateEntree doit être la date du jour ( Date() )

Formulaire :

Je vous conseille de partir sur une base de formulaire instantané : Tableau

  • La propriété "Diviseurs d'enregistrement" doit être définier à Non (pour éviter les lignes noires de séparation des enregistrements)
  • Les champs doivent être encadrés d'une fine bordure noire
  • L'en-tête de formulaire doit être jaune
  • Le sélecteur d'enregistrement ne doit pas être visible
  • Les boutons de déplacement non plus
  • ATTENTION : On ne doit PAS pouvoir modifier QUOI QUE CE SOIT sur les enregistrements déjà existants (ici : Martin et Muller)
  • On ne doit PAS non plus pouvoir supprimer des enregistrements, même avec Edition/supprimer l'enregistrement
  • Mais on DOIT POUVOIR en ajouter de NOUVEAUX
  • Quant au champ DateEntree, dans le formulaire, A AUCUN MOMENT, ni pour les enregistrements existants, NI POUR LES NOUVEAUX, on ne doit pouvoir changer la valeur par défaut qui est la date du jour. On ne doit d'ailleurs même pas pouvoir cliquer dans ce champ !
  • Dans le formulaire, UNE FOIS TERMINE, ajoutez l'enregistrement suivant :
  • NomFamille NoCompte Avoir Interet DateEntree
    Wyssen C5-700-309 408 1.0% Access mettra lui-même la date du jour

Voici l'aspect général du formulaire que vous devez obtenir (Vous l'appellerez F_ClientProtege) :

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 ProFormation.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.

Avez-vous une question technique concernant cette leçon ? Cliquez ici !
Une remarque sur cette leçon ? Un problème ? Une erreur ? une ambiguité ? Soyez gentil de m'en informer