![]()
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
| La dernière fois, nous avons vu que les paramètres entre crochets [ et ] permettent de créer une seule requête qui renvoie une foule de résultats différents, puisque c'est celui qui exécute la requête qui doit, au dernier moment, préciser sa demande. Cette astuce permet d'éviter la création de dizaines ou même de centaines de requêtes différentes. |
| Dans cette leçon, nous allons à nouveau utiliser les crochets, mais cette fois pas pour rtourner dynamiquement tels ou tels enregistrements, mais pour effectuer des calculs : Dans Excel, si vous avez 45 dans la cellule A1, et que vous voulez calculer le double de cette cellule dans la cellule B5 par exemple, dans B5, vous écririez =A1*2. Mais il vous est peut-être déjà arrivé avec Excxel la malheureuse mésaventure qui consiste à écrire sans le faire exprès sur une cellule qui contient un calcul, et hop ! Plus de calcul ! Vous allez voir dans cette leçon qu'Access est nettement plus sécurisant ! |
Il faut bien comprendre le mécanisme de calcul d'Access. Dans votre base de
données habituelle ProCD, créez une nouvelle requête basée sur T_Celebrite comme
d'habitude. Placez-y les champs Prenom et NomClient. A doite de la colonne
NomClient, ne mettez pas de champ, mais écrivez littéralement Tralala :
. Appuyez sur
ENTER, ou cliquez dans une autre case : Il écrit spontanément Expr1: [Tralala] :
. Vous vous rappelez de la
leçon précédente ? Nous avions également écrit Tralala, mais comme critère de
PaysOrigine :
. Cette fois, c'est comme en-tête de colonne que nous écrivons
Tralala.
Lancez cette requête. Tout comme lors de la précédente leçon, Access nous
demande ce que c'est que ce truc-là, Tralala ? 
. Répondez Pollux
, et cliquez sur OK.
Cette fois, vous obtenez ceci :
Une nouvelle colonne titrée Expr1 qui contient Pollux
pour chaque personne.
Il faut donc bien comprendre la façon de fonctionner de cette requête :
En fait :
Relisez bien cette première partie de leçon avant d'aller plus loin, parce que c'est très important de ne pas tout confondre.
Maintenant, essayons de remplacer Expr1 par Zébulon :
. Essayez de deviner ce
qui va se passer en lançant la requête avant de la lancer.
Parfaitement : 
Alors non. Absolument pas. Zébulon (je l'appelle zébulon parce que c'est le
titre de la colonne, le nom du champ en quelque sorte) est un champ qu'on
appelle un "champ calculé". Bon il n'y a pas grand chose comme calcul, mais
c'est considéré comme un calcul par la requête. Essayez : Remplacez Pince à
linge de n'importe qui (Carole Bouquet si vous voulez) par Ecureuil : Vous ne
pouvez pas : Il fait Bip, et surtout, dans la barre d'état (la barre qui est
tout en dessous de votre fenêtre, vous vous souvenez, quand on parlait de taille
: "La taille doit être exprimée en centimètres", à la leçon
4). Eh bien, c'est dans cette même barre d'état que vous pouvez lire :
. Le champ que
vous avez appelé Zébulon, est basé sur une expression (un calcul en quelque
sorte), et ne peut être modifié. Eh oui : Si vous dites que Carole Bouque par
exemple a un Zébulon qui est Ecureuil à la place de Pince à linge, ou
voudriez-vous donc qu'Access stocke cette information ??? Avec Excel, c'est
différent, si vous écrivez une belle formule dans une cellule, et que vous
arrivez ensuite avec vos gros sabots pour écrire quelque chose par dessus cette
formule (l'écraser), Pouf ! Fini la formule! Eh oui : Parce que là, Excel va
simplement utiliser la cellule qui contenanit la formule pour stocker votre
nouvelle information. Ici, la musique change !
Nous allons voir ça. Un peu de patience. Enregistrez votre requête sous R_CelebriteCalculZebulonTralala. Fermez-là, et donnez lui la description : Zébulon: [Tralala].
Créez une nouvelle requête comme d'habitude basée sur T_Celebrite avec les
champs Prenom et NomClient. A côté de Nomclient, Ecrivez simplement la lettre s.
Vous constatez qu'iul complète automatiquement par le champ salaireMensuel :
. En
fait, c'est simplement comme si vous aviez glissé le champ SalaireMensuel.
Lancez la requête : 
Par contre... Revenez en mode création, et effacez le champ SalaireMensuel,
réécrivez Salaire mensuel, MAIS AVEC UNE FAUTE : SallaireMensuel (Avec 2 L à Salaire) :
. Appuyez sur Enter, ou
cliquez dans une autre case : Cette fois, nous nous retrouvons dans le cas de
figure
,
c'est à dire qu'il écrit
, il ne sait pas ce que c'est, lui, SallaireMensuel ! Lancez la requête : Et comme il fallait s'y
attendre, il nous demande ce que c'est, SallaireMensuel. Répondez par exemple
Tasse à café, et... Vous avez une colonne Expr1 qui contient sur toute sa
hauteur Tasse à café, Tasse à café, tasse à café, etc.
Eh oui. Bon, jusqu'ici, nous n'avons fait qu'observer au microscope les différents mécanismes de champ calculés des requêtes. Maintenant, nous allons passer aux cas pratiques et faires des choses bien plus intéressantes ! Fermez cette requête, et ne la sauvegardez pas : Ce n'est pas la peine, c'était juste pour vous montrer l'importance de l'orthographe !
Créez ensuite une nouvelle requête comme d'habitude, basée sur T_Celebrite,
avec le prénom et le nom. Dans la 3ème colonne, nous allons calculer
automatiquement le salaire, avec une prime de noël de 500 francs. Ecrivez
. Appuyez sur
Enter, ou cliquez dans une autre case, ça se transforme en Expr1: [Salairemensuel]+500. Lancez la requête
. Et voilà :
Le salaire avec une prime de 500 francs automatiquement calculée !
Absolument. Faites glisser le champ SalaireMensuel sur Expr1: [Salairemensuel]+500 afin d'obtenir
et relancez
la requête : 
Exactement. D'ailleurs, essayez ! Lancez ensuite la requête :
. Sauvegardez-là sous
R_CelebriteCalculSalaireAvecPrime500
!J'ai constaté ça : Je n'ai pas vraiment d'explication à donner. En fait, je m'en fiche un peu parce que pour tout vous dire, les requêtes ne sont pas une fin en soi : C'est un outil de calcul et d'extraction des données des tables, mais en fait, nous allons utiliser les formulaires et les états pour présenter les données de manières plus jolie que sur de simples colonnes comme nous le faisons, et,à ce moment-là, quand nous y serons, là, nous allons vraiment nous occuper des formats des différents champs, pour qu'ils soient affichés de manière tout à fait impeccables. Ici, que ce soit tel ou tel format, qu'il y ait le signe Euro, FF, $, ou n'importe quoi avant les chiffres, là n'est pas le problème.
Ah, si chaque personne a droit à une prime différente, là, nous ne pouvons plus faire de calcul : Il va vous falloir aller dans la table T_Celebrite, et y ajouter un champ Prime, et, pour chaque client, indiquer à quelle prime il a droit...
Absolument, oui ! Nous allons mélanger les champs existants avec les nouveaux
champs calculés. En mode création de votre requête, remplacez Salaire avec prime: [Salairemensuel]+500 par [Salairemensuel]+Prime.
Appuyez sur Enter, ou cliquez dans une autre case, des crochets viennent
s'installer automatiquement autour de Prime
. Il y a donc 2 éléments
dans ce calcul : SalaireMensuel, qui est déjà connu car c'est un champ de
T_Celebrite... Et Prime qui est un truc complètement nouveau... Access ne sait
pas ce que c'est. Alors, il va nous le demander. Lancez la requête : Comme
prévu, il nous demande ce que c'est que cette bête bizarre : "Prime"
. Répondez
600, et cliquez sur OK
. Et voilà: 
Si vous voulez obtenir le salaire avec une autre prime, il suffit de relancer la requête une 2ème fois...
Faites Fichier/Enregistrer Sous R_CelebriteCalculPrimeVariable
Exactement. Attention : Vous avez oublié les crochets autour de [Entrez la prime SVP].
Eh bien justement : Il rajoute les crochets lui-même uniquement s'il s'agit
d'un titre de colonne qui ne contient pas d'espace(s) ! Essayez d'écrire Salaire avec prime: [Salairemensuel]+Entrez la prime
SVP, et appuyez sur ENTER, ou cliquez dans une autre case : Vous
obtenez cette erreur :
. Cliquez sur OK (Pas le choix...). Ajoutez les crochets Salaire avec prime: [Salairemensuel]+[Entrez la prime SVP], et lancez la requête : Cette fois ça marche !
En résumé :
Souvent, Access rajoute lui-même ces encadrements, mais... parfois pas, comme dans l'exemple que nous venons de voir. C'est donc utile de connaître ces caractères d'encadrements.
Enregistrez les modifications de cette requête (CTRL-S si vous ne connaissiez pas le raccourci de Fichier/Enregistrer)
Oui. Fermez votre requête, et créez une nouvelle requête comme d'habitude (T_Celebrite, prénom, nom, et SalaireMensuel)
Ecrivez Prime dans une nouvelle colonne:
. Appuyez sur Enter. Il
remplace Prime par Expr1:[Prime]. Si vous
lancez la requête, il va vous demander la prime, vous répondez par exemple 500,
et il vous donne le rséultat avec comme titre de colonne Expr1, et 500 sur toute
la hauteur. Bon, remplaçons Expr1 par Prime :
, Comme ça, le titre de
la colonne sera le même que ce qu'on demande : Prime ! Vous suivez ? On crée une
confusion, mais pour que les choses soient plus claires aussi d'un autre
côté...
Vous êtes d'accord ? C'est un peu confus ? Access est d'accord avec vous : Il
vous donne ce message d'erreur dès que vous lancez cette requête :
. Vous ne
pouvez pas écrire Prime:[Prime]... C'est comme ça ! Il faut donner un titre ou
un calcul différent. Essayons ceci : Prime : [Entrez la prime] :
. Cette fois ça
marche.
Ajoutez à la main encore dans la colonne plus à droite salairemensuel+prime :
, qui se transforme
autoamtiquement en Expr1:[SalaireMensuel]+[Prime].Remplacez Expr1 par SalaireAvecPrime (
). Bon le
SalaireMesnuel, il connait, et la prime, il ne va la demander qu'une seule fois,
et la réutiliser pour les 2 colonnes : Lancez la requête :
. Voilà un exemple ou
nous avons une colonne "calculée" (Prime), et un re-calcul dans une autre
colonne de cette prime (SalaireAvecPrime).
Donc maintenant, sur cette nouvelle colonne SalaireAvecPrime, nous pouvons justement retirer les charges sociales. En Suisse, nous av ons une retenue qui s'appelle la retenue AVS/AI/APG (Assurance Vieillesse et Survivants / Assurance Invalididé / Assurance Perte de Gains) de 5.05% du salaire brut. C'est à dire que sur le total du salaire avec la prime, on va retirer le 5.05%.
Pour savoir comment faire, il faut réfléchir un peu, et imaginer comment on ferait sur une calculatrice qui ne serait pas pourvue du signe %. Alors ?
Exactement. Par exemple, pour un salaire de 4'000 francs, ça ferait 4000* 0.0505, ce qui donne 202 francs. C'est le montant de la retenue. Alors donc, comment feriez-vous dans votre requête pour obtenir une colonne avec toutes les retenues socuiales de toutes les célébrités ?
Oui. Vous n'avez pas besoin de mettre les crochets autour de SalaireAvecPrime
car il n'y a pas d'espace (Access le fera à votre place), et vous ne pouvez pas
écrire *5.05%, mais bien *0.0505 parce que les calculs dans les requêtes ne
digèrent pas le signe pourcentage :
, qu i va être transformé en
. Vous commencez à avoir
l'habitude : Remplacez Expr1 par RetenueSociale, ce qui va donner quand vous lancez la
requête avec une prime par exemple de 250 francs :
. Et voilà... Qu'est ce
qui reste à faire mai ntenant ? Eh bien, il faut calculer le salaire net : C'est
à dire le salaire avec la prime moins la retenue sociale. Vous devriez pouvoir
faire ça tout seul, non ? Comment feriez-vous ?
Mais oui... Et pour peaufiner, vous remplacerez Expr1 par SalaireNet (SalaireNet : [SalaireAvecPrime]-[RetenueSociale]), et finalement vous otenez le résultat suivant (si la prime est de 120 francs):

Oui, ça vous pouvez le faire vous-même... Je vous laisse faire si vous voulez. Mais avant ça, sauvegardons notre précieuse requête : R_CelebriteCalculSalairePrimeRetenueSociale, et fermez-là. Mettez les descriptions suivantes à ces 3 dernières requêtes :

| le résumé |
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. |
|
L'exercice 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.