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
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. |
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 :
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 :
.
Dans la requête, vous pouviez ?
Pourquoi ?
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 ?
Donc ?
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 ?
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 !
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 !
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 ?
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]:
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 :
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 : .
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
:
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à :
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.
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..
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.
Sélectionnez le champ "salaire net" (pas l'étiquette, le champ). Et :
Et voici le résultat en mode saisie de données :
Oui. recopiez simplement le format du salaire net :
Voilà :
Les deux champs ont les mêmes attributs d'apparence.
Oui. C'est une autre manière de faire.
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.
"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...
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 :
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 :
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.
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. |
|
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 :
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 |
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