Sommaire
- Calculs : Création d'une colonne de calcul, comparaison avec le paramètre dynamique
- Calculs : Création d'un calcul simple
- Formats des champs calculés dans les requêtes
- Calculs variables selon un paramètre
- Calculs : Effectuer un calcul sur un champ déjà calculé
- Calculs : Calcul d'un pourcentage
Calculs : Création d'une colonne de calcul, comparaison avec le paramètre dynamique
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 :


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 ?



Il faut donc bien comprendre la façon de fonctionner de cette requête :
- Vous avez écrit juste Tralala comme en-tête de colonne
- Quand vous avez appuyé sur Enter, ou cliqué sur une autre case, ce tralala s'est transformé en Expr1:[Tralala]
- Quand vous avez lancé la requête, Access vous a demandé ce que c'était que Tralala
- Vous avez répondu Pollux
- Il a donné le résultat de la requête avec une colonne titrée Expr1, qui contenait systématiquement toujours Pollux
- Tralala est une variable (une sorte de champ "calculé") qui va être rempli avec ce que vous allez lui préciser, et qui va bêtement répéter cette information sur toute la hauteur de la colonne
- Pollux est ce que vous allez mettre dans Tralala - En quelque sorte, Tralala est le "nom de la place de parking", et Pollux est la "marque de la voiture" que vous allez parquer dedans
- Expr1 est le titre de la colonne qui va contenir PolluxPolluxPolluxPollux etc. - Pourquoi est-ce que qu'Access ne met pas Tralala comme en-tête de colonne ? Simplement parce que vous pouvez très bien ne pas vouloir que Tralala soit comme en-tête de colonne, et nous allons voir qu'on peut remplacer Expr1 qui n'est pas terrible comme titre de colonne par un meilleur titre
Maintenant, essayons de remplacer Expr1 par Zébulon :

Alors si j'ai bien compris, il va encore me demander ce que c'est que Tralala, je répond cette fois par exemple "Pince à linge" et... Il va me faire une nouvelle colonne avec Pince à linge sur toute la hauteur de la colonne, mais cette colonne sera titrée Zébulon, et non plus Expr1 !
Parfaitement :
Mais alors, est-ce que je peux remplacer la "Pince à linge" de Carole Bouquet par, je ne sais pas moi... Par "Ecureuil" par exemple ?
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 :

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 ???)
C'est bien gentil tout ça, j'ai bien compris, mais a quoi est-ce utile ce "Zébulon" ?
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 :


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) :



Calculs : Création d'un calcul simple
OK : Si le champ est connu, on peut l'écrire directement au lieu de le glisser vers le bas depuis la liste des champs, mais gare aux fautes d'orthographe ! Comme d'habitude, quoi !
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


Super... Mais ce serait bien d'avoir également le salaire sans la prime quand même, pour pouvoir comparer les 2 colonnes...
Absolument. Faites glisser le champ SalaireMensuel sur Expr1: [Salairemensuel]+500 afin d'obtenir

Et si à la place de Expr1, je voulais que ce soit marqué "Salaire avec prime", j'écrirais :
?
Exactement. D'ailleurs, essayez ! Lancez ensuite la requête : 
Formats des champs calculés dans les requêtes
C'est marrant que les 2 colonnes ne soient pas du même format :
!
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" :

Calculs variables selon un paramètre
Et est-il possible d'attribuer une prime variable ?
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...Oui, d'accord, mais ce n'était pas ça que je voulais demander : Je voulais que quand on lance la requête, il nous demande quelle prime on désire, et, pour chaque personne, il attribue cette même prime : Par exemple, si je dis 300, hop, il me donne tous les salaires ave 300 francs de prime. Je relance la requête une 2ème fois, cette fois, je dis 600, et zou ! il me renvoie tout le monde avec 600 francs de prime. C'est possible ?
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



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
Et si on voulait qu'il nous dise "Entrez la prime SVP" au lieu de tout sèchement "Prime", on pourrait écrire Salaire avec prime: [Salairemensuel]+ Entrez la prime SVP au lieu de Salaire avec prime: [Salairemensuel]+[Prime]
Exactement. Attention : Vous avez oublié les crochets autour de [Entrez la prime SVP].Non, je m'en fiche puisque Access les rajoute automatiquement si besoin est !
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 :
En résumé :
- Autour du texte, on met des guillemets : "Le texte"
- Autour des dates, on met des dièses : #01.01.1987#
- Autour des champs calculés ou des critères dynamiques, on met des crochets : [Entrez la prime SVP]
Enregistrez les modifications de cette requête (CTRL-S si vous ne connaissiez pas le raccourci de Fichier/Enregistrer)
Calculs : Effectuer un calcul sur un champ déjà calculé
Pourrait-on effectuer des calculs sur d'autres calculs ? Par exemple, une fois qu'on a le salaire avec la prime, on calcule sur ce nouveau salaire les retenues sociales ?
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:


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 :


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 :



Calculs : Calcul d'un pourcentage
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 ?
Hmmm... Je ferais le salaire fois 5.05%... Mais s'il n'y a pas le signe % je ferais donc le salaire fois 0.0505, 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 ?Eh bien, dans une nouvelle colonne, j'écrirais SalaireAvecPrime * 0.0505 ?
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 :


J'écrirais dans une colonne encore plus à droite SalaireAvecPrime - RetenueSociale, tout simplement...
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):
C'est vraiment génial ! C'est juste dommage que les gens qui ont 0 francs de salaire ont également une prime... On devrait les exclure du résultat, non ?
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 :
Bon... Hem... On peut résumer ?
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. |
Avez-vous bien compris ?
|
Exercice
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 :
![]() Et maintenant, un challenge (il est dur celui-là !) : Vous avez un prix d'achat et un prix de vente : Vous avez sans doute réussi sans trop de mal à obtenir le bénéfice, mais ce qui serait particulièrement intéressant, ce serait d'obtenir le POURCENTAGE de bénéfice sur chaque article : Pour la chaise, c'est facile : on achète à 100 francs, on revend à 110 francs : on gagne 10 francs, et on fait 10% de bénéfice... Mais pour l'armoire, on l'achète à 260 francs pour la revendre à 300... On fait 40 francs de bénéfice, mais ce n'est pas 40% ! C'est 15.3846% environ... Mais comment puis-je savoir ça ? C'est ça le challenge ! Je vous donne juste un petit coup de pouce : Prenez un bout de papier et un crayon, et essayez de résoudre des exemples simples : Si vous avez un article que vous payez 4 francs et que vous revendez 8 francs, vous faites 100% de bénéfice, mais si vous ne le vendez que 6 francs... Vous ne faites plus que 50% de bénéfice (vous gagnez la moitié du prix d'achat)... Continuez... Si vous le vendez 5 francs, quel est votre pourcentage de bénéfice cette fois ? Et si vous le vendez 12 francs ? Une fois que vous avez trouvé la formule... Si vous la trouvez bien sûr... Il s'agit de retranscrire tout ça dans la requête... Voici le résultat final que vous devez obtenir : ![]() |
0 commentaires:
Enregistrer un commentaire