Temps
nécessaire pour suivre cette leçon : Environ trois quarts d'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 à nouveau utiliser les crochets [ et ], mais pas pour retourner 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 Excel la 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 ProFormation, 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 qu il 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é malgré tout 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 Bouquet par exemple a un "Zébulon" qui est "Ecureuil" à la place de "Pince à linge", où diable voudriez-vous 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 donc !), Pouf ! Fini la formule! Eh oui : Parce que là, Excel va simplement utiliser la cellule qui contenanit la formule pour stocker votre nouvelle information.
Ah ben on est chez Access ici ! la musique change ! Fini la belle vie avec Excel où tout le monde fait n'importe quoi ! (Entre nous, n'est pas plus confortable finalement ???)
Nous allons voir ça. 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 concevoir des choses bien plus intéressantes !
Fermez cette requête mais ne l'enregistrez 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 : .
Enregistrez-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à, 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.
Ceci dit, si en mode création vous cliquez avec le bouton droit de la
souris sur le champ "Salaire avec prime", et que vous choisissez "Propriétés",
vous pouvez choisir dans l'onglet Format : "Standard" : .
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 résultat 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é...
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.
Astuce : Si vous voulez un titre de colonne ressemblant le plus possible, ajoutez un trait de soulignement devant : _Prime : [Prime]
Ajoutez à la main encore dans la colonne plus à droite salairemensuel+prime
: , qui se transforme
automatiquement en Expr1:[SalaireMensuel]+[Prime].Remplacez
Expr1 par SalaireAvecPrime
(
). Bon le SalaireMensuel,
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 avons une retenue sur salaire 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 sociales 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 maintenant ? 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 obtenez 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 :
Grâce aux [crochets], nous avons vu à la leçon précédente qu'il était possible de créer des requêtes dynamiques. Cette fois, nous avons constaté une autre fonction : La possibilité 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 nombres : 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. |
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 consiste à créer une nouvelle
base de données que vous appellerez Commerce.MDB. Dans cette base
de données, vous créerez une seule table avec 3 champs :
Le libellé de l'article, le prix d'achat et le prix de vente, avec
les articles et les prix suivants : Vous allez ensuite créer une requête R_ArticleCalcul avec les 3 champs de la table PLUS :
Voici exactement le résultat que vous devez
obtenir dans la requête (ne vous occupez pas des formats, comme
le signe Euro): Et maintenant, un challenge (il est dur celui-là
!) : |
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