Leçon 37 : Formulaires : Les champs calculés, blocage des champs avec Activé et Verrouillé, différences entre étiquette Aa et champ Ab|, la fonction Date()

Temps nécessaire pour suivre cette leçon : entre une petite et une grosse heure

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 voir comment faire quelques calculs et opérations avec des champs calculés.
Nous verrons également comment faire pour protéger des champs contre l'écriture et contre l'accès. Nous verrons enfin la différence fondamentale entre un champ et une étiquette.

Sommaire

  1. Formulaires : fomat monétaire des champs monétaires
  2. Formulaires : comparaison théorique entre les calculs effectués dans une requête et un calcul effectué directement dans un formulaire
  3. Formulaires : création d'un calcul directement dans un formulaire
  4. Formulaires : calcul basé sur un champ déjà calculé
  5. Formulaires : aspect esthétique conseillé des champs calculés
  6. Formulaires : les propriétés de champs Activé et Verrouillé
  7. Formulaires : différences fondamentales entre l'étiquette Aa et le champ Ab|
  8. La fonction date()

Rappelez-vous de la leçon 28, nous avons vu comment faire pour effectuer des calculs à partir des champs dans les requêtes. Je vous conseille fortement de revoir cette leçon si vous avez quelques trous de mémoire concernant les calculs dans les requêtes avant de continuer, sinon vous risquez la noyade !

C'est fait. Mes souvenirs sont revenus à la surface !

Dans cette leçon, nous allons voir qu'il est possible d'effectuer également des calculs dans les formulaires. Pour bien comprendre, nous allons comparer strictement les calculs dans les requêtes et dans les formulaires. Nous allons reprendre l'exemple d'un champ qui va automatiquement calculer le salaire additionné d'une prime de 500 francs, à la fois dans un formulaire et dans une requête.

Commencez par créer une nouvelle requête basée sur T_Celebrite, en mode création. Installez-y le Nom, le prénom et le salaire mensuel : . Dans la colonne à droite du salaire mensuel, calculez une prime de 500 francs : . Vous obtenez ce résultat en mode sasie de données : .

Fermez cette requête, et nommez-là R_CelebriteCalculPrime500Franc.

Maintenant, créez un nouveau FORMULAIRE en mode création, basé sur cette nouvelle requête R_CelebriteCalculPrime500Franc.

La liste des champs contient les 3 champs normaux NomClient, Prenom et SalaireMensuel, et le champ calculé SalaireAvecPrime, qui est représenté comme les autres champs (C'est moi qui l'ai colorisé en rose).

Placez tous ces champs les uns en dessous des autres dans votre formulaire : , et lancez-le en mode saisie de données :


Formulaires : Fomat monétaire des champs monétaires

C'est normal le signe Euro € avant 10'000 ?

Non. C'est dans la requête que ce petit magouilleur d'Access acru bon de l'ajouter, je ne sais pas vraiment pourquoi. A vrai dire, je m'en fiche un peu dans la requête. Par contre, ici, dans le formulaire, c'est plus grave !

Ce n'est vraiment pas esthétique. Nous allons lui régler son compte une bonne fois. Revenez en mode création, et demandez les propriétés du champ SalaireAvecPrime : . Dans l'onglet Format, choisissez la propriété Format : Standard. Lancez en mode saisie de données : .

Et puis-je changerla valeur de ce salaire avec prime ?
Par exemple pour lui dire 12000 à la place de 10000 ?

Dans la requête, vous pouviez ?

Non, dans la requête je ne pouvais pas !

Pourquoi ?

Parce que c'est un calcul !

Oui, et il n'y a aucun champ dans la table pour accueillir ce résultat. Il y a juste un champ SalaireMensuel, et c'est tout. Ou pourrait-il bien stocker physiquement le résultat du calcul ?

Nulle part, effectivement...

Donc ?

Donc, dans le formulaire, on ne peut rien changer non plus !

Voilà ! Essayez : en mode saisie de données, essayez de changer 10000 en 12000 dans le salaire avec prime. Qu'est-ce qui se passe ?

Il m'affiche dans la barre d'état : .

Ce qui est normal.

Bien, maintenant, nous allons voir comment faire un calcul DIRECTEMENT dans le formulaire. Admettons que nous ayons créé notre formulaire directement sur la table T_Celebrite, et que nous n'avons PAS de champ calcule SalaireAvecPrime, mais nous en avons quand même besoin !


Formulaires : comparaison théorique entre les calculs effectués dans une requête et un calcul effectué directement dans un formulaire

Mais pourquoi ferait-on ça, puisqu'il suffit de créer une requête avec un champ calculé, et de baser le formulaire sur elle ???

Justement pour ne PAS à avoir à créer de requête ! Les informaticiens sont de gros fainéants ! Tant qu'on peut faire plus simple, on ne se gêne pas !

Dans ce cas, pourquoi faire des requêtes avec des champs calculés, puisqu'il est plus simple de les faire dans les formulaires ?

Je n'ai pas de réponse nette à vous donner.

Vous constaterez dans certains cas qu'il est plus simple et/ou plus efficace de faire des calculs dans les requêtes, et dans d'autres cas dans les formulaires... Il y a également des cas où on doit faire le calcul dans une requête, et d'autres cas pour lesquels il est obligatoire de le créer dans les formulaires, vous constaterez par vous-même avec l'expérience... C'est bon, je peux continuer ?


Formulaires : Création d'un calcul directement dans un formulaire

Allez-y, je me tais. Alors, comment-fait-on un calcul dans un formulaire ?

D'abord, affichez la boîte à outils (Affichage/Boîte à outils), et sélectionner l'icône Ab| : (Ne confondez pas avec Aa), et placez cette zone sous le dernier champ , ce qui a pour effet d'ajouter un nouveau champ : . Il y a une étiquette Texte4 (Ou Texte5, ou Texte4765, ce n'est pas important du tout car on va la changer), et un champ qui s'appelle Indépendant.

Cliquez dans Indépendant, il s'efface tout seul : .

Ecrivez dedans : =SalaireMensuel+500 , et appuyez sur ENTER pour valider. Constatez qu'il a ajouté des [crochets]:

Comme dans les requêtes qui contiennent des champs calculés, d'ailleurs.

Oui. Il rajoute les crochets quand il y a besoin : c'est à dire autour des champs.

ATTENTION : Il rajoute des crochets automatiquement si, et seulement si vous avez pris soin de ne PAS mettre d'espace dans les noms de vos champs. Admettons que vous ayez nommé votre champ Salaire Mensuel à la place de SalaireMensuel, et que vous ayez écrit dans la zone Ab| =Salaire mensuel + 500, au moment d'appuyer sur ENTER, vous auriez écopé d'un message d'erreur : .

Dans le cas ou vous avez des noms de champs avec des espaces, ce que je vous ai d'ailleurs toujours déconseillé, vous DEVEZ alors mettre ces crochets A LA MAIN : =[Salaire mensuel] + 500.

Bien. Ecrivez un titre sympathique : Salaire avec prime :

Vous vous retrouvez donc avec 2 champs qui font la même chose : Un calcul de 500 francs de plus sur le salaire : une fois dans la requête qui sert de base au formulaire, et une fois dans le formulaire directement :

Et maintenant, est-il possible de refaire un calcul sur un résultat de calcul déjà existant : par exemple, peut-on calculer le résultat du salaire avec la prime, MOINS les charges sociales (5.05% en Suisse)

Mais bien sûr. Nous allons essayer de faire ce calcul-sur-calcul depuis le champ calculé de la requête (le premier), et dans le champ calculé du formulaire (le deuxième). Pour ce faire, vous allez placer 2 zones Ab| à côté des champs, comme ceci : . Constatez que j'ai effacé les étiquettes, et que j'en ai rajouté une au dessus : "Montant des charges".

Nous allons commencer par le premier champ : Il suffit d'écrire =SalaireAvecPrime*0.0505 : . Lancez le formulaire en mode saisie de données : . (Je suis sur un enregistrement dont le salaire est égal à 10'000 francs) ca marche (Bon il faut encore aligner le contenu du champ à droite, et demander le format standard, mais ce sont des détails).

Passons maintenant au 2ème cas de figure : Le cas ou on se base sur un calcul effectué dans le formulaire : . Ici, il faut savoir COMMENT se nomme la zone de gauche, qui contient le calcul ! Pour le savoir, demandez ses propriétés : . Le nom apparait en haut (Chez moi, c'est Texte4, chez vous ca devrait être a peu près la même chose . Peut-être un autre chiffre que 4).

Changez son nom : Cliquez sur l'onglet "Toutes", et demandez la propriété nom : EDISalaireAvecPrime : .

Pourquoi EDI ?

EDI comme EDItion (zone d'EDItion). C'est pour me rappeler qu'il s'agit bien d'une zone Ab|, également appelée zone d'édition. (Pour l'instant, ce n'est pas très important, mais plus tard, lorsque nous devrons nommer un grand nombre d'objets de différentes natures, ce sera bien utile).

Dans la zone résultante , écrivez : =EDISalaireAvecPrime*0.0505 : . Si vous lancez le formulaire en mode saisie de données, Vous verrez que tout va bien :

Peut-on en une seule fois aligner les nombres à droite, et leur donner le format standard, sans avoir besoin de chaque fois les sélectionner ?

Nous avons déjà vu ça : Vous sélectionnez les 4 champs en mode création, et vous cliquez avec le bouton droit de la souris sur l'un des 4, et demandez les propriétés : Vous voyez qu'il indique "Sélection multiple" . Dans l'onglet standard, sélectionnez le format standard, et avec l'icône que vous connaissez bien, alignez les champs à droite, et voilà :


Formulaires : calcul basé sur un champ déjà calculé

Pourrais-je avoir ENCORE un champ supplémentaire à droite pour calculer le salaire AVEC la prime MOINS les charges sociales ?

Oui ! Vous allez faire ça en guise d'exercice. Voici le résultat à d'obtenir (exemple de Napoléon Bonaparte): (Ce qui est encadré en rouge, et ne vous occupez plus de la 2ème ligne)

Si vous êtes vraiment perdu et que vous n'y arrivez pas, vous avez toujours la possibilité de télécharger la base de données telle qu'elle sera à la fin de cette leçon.

C'est bon, j'y suis arrivé. C'est vraiment logique quand on y pense...

Maintenant, constatez que les champs "Montant des charges" et "Salaire net" sont des champs qui ont l'apparence de champs normaux. On pourrait croire qu'on peut écrire quelque chose dedans..

Mais non, puisque ce sont des calculs !

Oui, maintenant c'est évident pour vous. Mais si vous développez un formulaire destiné à être utilisé par d'autres personnes, ou simplement vous-mêmes dans quelques mois, vous risquez d'entretenir une certaine confusion : "Mais pourquoi ne peut-on rien écrire dans ces champs ???". Aussi, je vous propose de modifier l'apparence de ces champs afin qu'on aie pas "envie" de cliquer dedans pour changer des données.


Formulaires : aspect esthétique conseillé des champs calculés

Sélectionnez le champ "salaire net" (pas l'étiquette, le champ). Et :

Et voici le résultat en mode saisie de données :

On fait la même chose pour le montant des charges ?

Oui. recopiez simplement le format du salaire net :

  1. Cliquez sur le champ "Salaire net"
  2. Cliquez sur le petit pinceau : (Reproduire la mise en forme)
  3. Cliquez sur le champ "Montant des charges"

Voilà : Les deux champs ont les mêmes attributs d'apparence.

On aurait pu aussi les sélectionner tous les deux pour leur appliquer la même mise en forme ...

Oui. C'est une autre manière de faire.


Formulaires : Les propriétés de champs Activé et Verrouillé

Je constate qu'en mode saisie de données, bien qu'on en ait pas "envie", il est malgré tout possible de cliquer dans ces deux champs. On ne peut pas empêcher ça ?

Si. Il faut les "désactiver". Demandez les propriétés de ces deux champs Montant des charges et Salaire Net : . Dans l'onglet Données, choisissez Activé : Non, et Verrouillé : Oui : . Fermez les propriétés, et lancez le formulaire en mode saisie de données : vous ne pouvez même plus cliquer dans ces deux champs.

Quelle est la différence entre activé et verrouillé ?

"Activé", c'est le fait de ne pas pouvoir cliquer dans un champ (impossible d'y faire clignoter le curseur). Verrouillé, c'est quand on peut cliquer dans le champ, mais qu'on ne peut pas changer les données.

Dans notre exemple, on ne pouvait pas changer les données de toute façon, mais si vous aviez défini Verrouillé = Oui pour le champ prénom par exemple, alors, vous auriez pu cliquer dedans, mais vous n'auriez plus pu changer le contenu...

Tableau récapitulatif :

Activé Verrouillé Résultat
Oui Non C'est la valeur par défaut de tous les champs... On peut cliquer dedans, et on peut modifier comme on veut (Pour autant qu'il ne s'agisse pas d'un champ calculé, bien entendu)
Oui Oui On peut cliquer dans le champ, mais on ne peut pas changer sa valeur
Non Non On peut changer les données (pas verrouillé), mais comme on ne peut pas cliquer dans le champ (pas activé), on est bien avancé ! En fait, dans ce cas de figure, le champ apparaît en grisé, comme quand vous êtes dans une boîte de dialogue et que certaines options sont en grisé : on ne peut pas les sélectionner parce que c'est impossible pour le moment (Comme quand vous ne sélectionnez rien du tout et que vous essayez de faire "Edition/Copier", c'est impossible, parce qu'il n'y a rien à copier)
Non Oui La totale : On ne peut pas cliquer dans le champ ET de toute façon on ne peut rien y changer... C'est comme l'exemple d'avant (Activé Non, verrouillé Non), mais dans ce cas, le champ reprend son apparence normale, sans devenir grisé. C'est la solution pour laquelle nous avons opté dans notre formulaire.

Ca va me permettre de vous montrer ce qui dit l'aide d'Access concernant les diverses propriétés. Demandez les propriétés du champ qui contient le Salaire Net, et cliquez sur la propriété Activé (Onglet données) . Appuyez sur la touche F1 pour obtenir l'aide d'Access : . Nous verrons un peu plus tard comment fonctionne l'aide d'Access. C'était juste un petit avant-goût histoire de vous faire constater que l'aide d'Access n'est pas vraiment facile d'accès aux néophytes, mais est d'une grande puissance...


Formulaires : différences fondamentales entre l'étiquette Aa et le champ Ab|

Pour revenir aux calculs, l'icôneAa, c'est pour créer une étiquette simple, sans calcul, tandis que Ab|, c'est pour créer un champ calculé ?

Oui. Il ne faut pas se tromper : faions un petit test pour illustrer cette difflérence : insérons la date du jour dans notre formulaire. Placez une étiquette Aa en dessous des champs, et écrivez-y =date() : , et lancez le formulaire en mode saisie de données :


La fonction Date()

Il n'a rien compris ! Il ne met pas la date du tout !

Parce que c'est une étiquette ! Mais maintenant, placez un champ Ab|, et écrivez à la place de indépendant : =date(): . Lancez le formulaire en mode saisie de données :

Et ça marche ! Quant au "Texte13", on peut l'effacer !

Oui. Et ensuite, le champ qui contient la date, vous pouvez à titre d'exercice :

Ca donne ceci :

Le champ Ab| est donc une zone "intelligente", tandis que l'étiquette Aa est une zone "bête qui ne comprend rien"

Fermez ce formulaire, et Enregistrez-le sous F_CelebriteChampCalcule.

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

Il existe 2 manières de faire des calculs : Soit dans les requêtes, soit dans les formulaires (Nous verrons quand il sera temps que nous pourrons en faire également dans les états). Les 2 techniques donnent des résultats équivalents. Il n'est pas possible de modifier manuellement le résultat d'un calcul, mais au contraire, il est possible (recommandé) de carrément empêcher de cliquer dans cette zone (Activé).
Nous avons vu également comment installer la date du jour dans notre formulaire.

Avez-vous bien compris ?

 
  1. Une étiquette :
    a. Est synonyme de Champ
    b. Se place souvent devant les champs mais peut aussi se créer grâce à l'icône Aa ***
    c. Permet de faire des calculs

  2. J'ai une table avec deux champs : NomCollaborateur, et ChiffreAffaire. Je voudrais connaître la valeur de ce chiffre d'affaire avec une augmentation de 10% (Par exemple, si le champ ChiffreAffaire contient 500, le résultat du calcul sera 550 (500 + 10% de 500, soit 500 + 50, soit 550)) dans un formulaire :
    a. Dans la table elle-même je crée un champ ChiffreAffaireAugmente, et je le remplis à la main dans le formulaire que je créerai par la suite
    b. Dans le formulaire basé sur cette table, je crée une étiquette Aa dans laquelle j'écris ChiffreAffaire*1.1
    c. Dans le formulaire basé sur cette table, je crée un champ Ab| dans lequel j'écris ChiffreAffaire*1.1
    d.
    Dans le formulaire basé sur cette table, je crée un champ Ab| dans lequel j'écris =ChiffreAffaire*1.1 ***
  3. Je peux, dans un formulaire, créer un champ Ab| qui va effectuer un calcul sur un autre champ Ab| qui est LUI MEME le résultat d'un calcul ?
    a. Oui ***
    b. Non

  4. J'ai une table T_Statistique, dans laquelle j'ai 2 champs : NombreLancer et Resultat. Je crée un formulaire basé sur cette table dans lequel je place des deux champs. Je crée un champ Ab| dans lequel j'écris =(NombreLancer/Resultat)-1. Je vais en mode saisie de données, et je me retrouve sur le premier enregistrement qui contient NombreLancer : 50, et Resultat : 10. Que va contenir le champ Ab| qui contient le calcul ?
    a. 4 ***
    b. 5
    c. 10
    d. une erreur, car on ne peut pas faire de calculs dans un champ Ab|, et de toute façon la syntaxe est incorrecte

  5. Dans quel objet ne peut on pas faire de calculs ?
    a. Dans les tables ***
    b. Dans les requêtes
    c. Dans les formulaires
    d. Dans les états


    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

Lisez bien l'énoncé jusqu'au bout avant de commencer.

L'exercice consiste à créer une base de données Examen.MDB, qui va contenir les champs et les données suivants dans une table T_Eleve :

NomEleve
NoteTrimestre1
NoteTrimestre2
NoteTrimestre3
Jean Dubois
4.5
4
5.5
Hans Muller
3
2.5
3.5
Valérie Lavière
6
6
5

NoteTrimestre1, 2 et 3 sont des numériques/réel simple.

L'exercice consiste à créer un formulaire F_EleveResultat, qui ressemble approximativement à ceci :

Attention : Pour ce faire, créez votre formulaire avec un Assistant instantané Tableau pour visualiser plusieurs élèves l'un en dessous de l'autre (que vous corrigerez à la main en allant en mode création). Je pense que vous n'aurez pas trop de peine à vous en sortir même si nous n'avons pas vu comment créer des champs calculés dans un formulaire de ce type.

Vous constatez donc qu'il y a 2 nouveaux champs calculés : Total et Moyenne. C'est simple : Le total représente simplement le total des notes, et la moyenne est le résultat des 3 notes, divisé par 3, A vous de voir comment mettre ça en oeuvre.

Important : Quand vous allez installer vos champs Ab| à côté du 3ème trimestre, vous constaterez qu'une étiquette vient avec. Vous n'allez pas pouvoir facilement faire glisser l'étiquette dans l'en-tête du formulaire pour ensuite lui changer son nom (L'appeler "Total", et l'autre : "Moyenne"). Je vous conseille d'effacer l'étiquette créée, et de recréer une étiquette Aa de toute pièce dans l'en-tête du formulaire. Si vous n'avez pas bien compris ce que je veux dire, commencez l'exercice, vous tomberez sur le problème vous-même.

N'oubliez pas de les définir ensuite en Activé : Non et Verrouillé : Oui

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