Temps nécessaire pour suivre cette leçon : Environ une 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 effectuer quelques opérations supplémentaires,
et voir en détail les fonctions |
Demandez les propriétés du champ SalaireMensuel, et dans Format, choisissez Standard :
Mais notre propos n'est pas là. Nous allons calculer la somme totale des salaires. Vous savez à quel endroit nous allons installer cette information ?
Exactement. Dans le pied d'état. Nous aurions pu choisir de la placer dans l'en-tête, mais il me parait est plus "normal" qu'elle soit en bas..
Installez un champ Ab| dans le pied d'état, et modifiez-le comme ceci : L'étiquette contient : Total des salaires : et le champ : =Somme(SalaireMensuel) : . Les crochets autour de [SalaireMensuel] sont ajoutés automatiquement par Access sauf ?...
Biennnnnn ! Lancez l'état ! Rende-vous à la fin : votre somme :
Il y a des choses à redire, en effet !
Elle n'est pas correctement formatée (Pas de séparation entre les milliers et les centaines), et elle est décalée par rapport à la colonne de chiffres.
Faites ceci :
Simplement parce qu'elle est de la même taille que les champs de Salaire, qui, eux-mêmes, sont un peu trop larges... On peut les resserer : :
J'ai un tout petit peu trop resseré, alors il a arrondi le chiffre.
ATTENTION : Si votre champ est trop étroit, il se peut même qu'il manque des chiffres importants : Regardez, je rétrécis encore un peu : . Il a carrément affiché la somme en notation scientifique : 1E+06 veut dire : 1 suivi de 6 zéros : 1000000... Un million, inutile de dire que ça ne va pas... ET ENCORE, on a une approximation parce que nous n'avons pas encore demandé le format correct... Vous vous souvenez ? il s'agissait de demander la séparation entre les milliers et les centaines, en demandant les propriétés du champ de la somme : Format/Format : Choisir Standard. Faites-le (Bouton droit de la souris sur la somme, et "propriétés").
Regardez ce que ça donne, un champ trop court, avec un format Standard : . Il donne carrément une somme de 339.86... Bizarre, non ?
Ben oui...
Ben non...
Non. Dans Excel, si vous avez une colonne qui contient du chiffre qui devient trop petite, ce sont des dièses qui apparaissent prouvant que la cellule est trop étroite :
Avant le rétrécissement : , et après :
Donc, faites bien attention dans Access à ne pas élargir ni rétrécir les champs exagérément.
Ajoutons maintenant la moyenne des salaires, juste en dessous de la somme. Pour ce faire, il vous suffit de copier/coller le champ contenant la somme en dessous de lui-même : . Maintenant, remplacez l'étiquette "Total des salaires" par "Moyenne des salaires". Remplacez le contenu du champ =Somme([SalaireMensuel]) par =Moyenne(SalaireMensuel) : . Lancez l'état : Ragardez à la fin, la moyenne :
Oui, puisque à la base vous avez copié la somme qui était déjà en bon format, c'est pour ça.
Oui, et ?
Il aurait fallu créer une requête qui les exclut, et baser ensuite notre état sur elle...
Heureusement, non !
Nous allons pouvoir maintenant créer une nouvelle requête qui exclut les salaires inconnus, et préciser que l'état actuel est maintenant basé sur elle.
Marche à suivre :
Et voilà : Lancez votre état, il n'y a plus un seul salaire à 0, ça ne change pas la somme (C'est normal), mais la moyenne vient de passer de 13'453.40 à 15'463.68 :
Si. On peut demander un filtre directement dans l'état... Attention : Ce n'est pas en mode aperçu avant impression qu'on peut filtrer quoi que ce soit (Contrairement aux tables, requêtes et formulaires qui peuvent se filtrer dynamiquement avec le bouton droit de la souris : "Filtrer par". Vous vous souvenez ? Leçon 19). Ici, une fois que l'aperçu est lancé, on ne peut plus RIEN faire.
C'est donc en mode création que ça va se passer : Dans les propriétés de l'état, onglet données, remettez T_Celebrite dans la source à la place de R_StatSalaire, pour se retrouver comme avant.
Juste plus bas, il y a les deux propriétés qui vont nous éviter
une requête : Filtre et Filtre Actif.
Dans Filtre, écrivez : SalaireMensuel>0, et dans Filtre actif, choisissez
Oui :
Et voilà : Le résultat est le même.
C'est vous qui verrez... Il y a avec Access, souvent plusieurs manières d'arriver au même résultat.
ATTENTION : J'ai constaté à plusieurs reprises, que ce soit sous Access 97 ou 2000, que cette fonction était parfois instable... Il m'invente quelquefois une erreur de syntaxe comme quoi il ne reconnait pas SalaireMensuel, et, sans raison apparente, je recommence l'opération après avoir fermé et rouvert l'état, et tout à coup ça marche... Donc, votre expérience vous dictera quel comportement adopter... La requête, par contre, marche à tous les coups.
Min permet d'obtenir le salaire le plus bas, et Max le plus élevé, tout simplement. Vous imaginez comment les mettre en place ?
Exactement. Allez-y, mettez les en place sous la somme et la moyenne : . Notez que cette fois, le salaire le plus bas est 2284, et pas 0, puisqu'on les a exclus.
Bien entendu. Créez un groupe basé sur le domaine (Leçon 50 si vous avez besoin de vous rafraîchir la mémoire), afin d'obtenir à peu près ce résultat : . Maintenant, ajoutez un pied de groupe au domaine (C'est la même chose que l'en tête de groupe, mais il se trouvera en dessous du groupe Domaine, pas au dessus, pour pouvoir mettre les sommes, moyennes, max et min en dessous, c'est plus lisible). Comme ceci : . Dans le pied de groupe qui vient d'apparaître , copiez tous les champs et étiquettes du pied d'état : (La leçon 33, vers le milieu vous rappellera comment on fait pour sélectionner plusieurs champs à la fois) : . Vous avez maintenant les statistiques pour chaque domaine :
Oui. Donnez une apparence plus "Flashy" aux totaux de fin d'état :
J'ai rajouté une étiquette "Totaux Finaux", j'ai rajouté un cadre, j'ai tout peint en... Mais... Qu'est ce qui me prend de répondre à une question pareille !!! Vous devriez avoir honte, toutes ces considérations esthétiques ont été vues et revues dans les leçons sur les formulaires 31, 32 et 33 !
Y'a pas de mais ! Allez hop ! On révise !
Ce qui serait bien, ce serait de commencer chaque groupe sur une nouvelle page, comme ça, ça commence tout de suite par le titre, plus de problème... Ca ne vous rappelle rien ?
Oui, exactement, on va demander à ce qu'il change automatiquement de page dès qu'il a écrit les totaux d'un groupe, à savoir exactement ici : , ce qui donne ceci :
C'est normal, on a demandé un saut de page en bas de chaque groupe
Non, pas du tout facilement.
On pourra par la suite faire ce genre d'acrobaties, mais il faudra plonger les mains dans Visual Basic.
Oui, par contre, ça c'est possible, et c'est même très facile. Commencez par effacer le saut de page que vous avez installé. Ensuite, allez dans Affichage/Trier et grouper, damandez Section Insécable : Groupe Entier : . C'est exactement ce que vous demandiez : . Par exemple, sur la première page, il y a assez de place pour caser les Affaire ET la Chanson, mais ensuite, en dessous, il y a un grand espace vide. Grand, mais pas suffisamment pour accueillir Cinéma, qui passe donc à la ligne suivante. Et ainsi de suite.
Dans ce cas, effectivement, il n'y a pas le titre sur la 2ème page. Nous pouvons nous en rendre compte simplement en élargissant un peu en hauteur la section détail, comme ceci : . Ce qui donne ceci : : Cinéma commence sur une page, et se termine sur l'autre, mais sans le rappel "Cinéma" au dessus de la 2ème page. Heureuzsement qu'il y a une astuce. Demandez les propriétés de la section "En-tête de groupe Domaine" : . Dans l'onglet Format, mettez Oui dans Répéter Section : . Et voilà :
Mais oui, chef ! En mode création, demandez simplement à grouper par pays en dessous des domaines, avec un en-tête de groupe : , ce qui va insérer une nouvelle section, juste ici : . Comme d'habitude, vous placez le pays dans cette section, et vous supprimez l'étiquette.
Constatez ce que je fais, je met en forme de manière à ce qu'il y ait une sorte de hiérarchie dans les groupes : : , ce qui donne ceci : . Tiens, ben juste pour rigoler, regardez ce que donne le MEME état, mais sans mise en exergue des titres : :
C'est ça. Si vous alourdissez trop votre état avec trop de sous-totaux, finalement, il ne servira plus à grand chose, mais c'est exactement ça : cet état est la version finale : Des groupes Domaine, avec un sous groupe Pays, mais pas de sommations pour les pays.
Fermez cet état, sans oublier de l'enregistrer. Je vous rappelle que nous l'avions baptisé E_StatSalaire.
Nous avons cette fois plongé les mains profondément dans la structure des états. Nous avons vu comment créer une somme, une moyenne, calculer la plus grande et la plus petite valeur d'une série, dans un pied de groupe, ou dans le pied d'état. Nous pouvons dynamiquement changer l'origine de l'état, en précisant que ce n'est plus une table, mais une requêtes (Pour exclure les gens dont le salaire est inconnu par exemple), Nous avons vu la propriété "Filtre de l'état" (Mais qui ne marche pas à tous les coups d'après mes expériences) Nous avons ensuite vu comment faire pour éviter que des fins de groupe ne se situent sur la page suivante, avec Section Insécable, et Répéter section. Nous avons revus dans ce contexte le saut de page manuel. Et enfin, nous avons étudié la notion de sous groupes en prenant l'exemple de l'état qui est d'abord groupé par domaine, et ensuite par pays. La limite des sous groupe est de 10 niveaux. On peut donc avoir un groupe Pays, sous groupé par domaine, sous groiupé par Titre, sous groupé par EtatCivil, etc. jusqu'à 10. Plus qu'il n'en faut ! Les sommes et moyennes ne sont pas obligatoirement présentes dans chaque sous-groupe. Et enfin, nous avons encore revu que l'aspect esthétique était absolument primordial, faute de quoi, les états peuvent devenir littéralement illisibles. |
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 exactement cet état dans votre base de données ProFormation, que vous appellerez E_StatTitreEtatCivil: Vous constatez qu'il est particulièrement court, puisque sur une seule page, nous avons l'en-tête (SOMME MOYENNE) et le pied (Totaux Généraux) d'état. Il n'y a pas de noms ni de prénoms. Cette astuce, si je puis dire est simplement obtenue en écrasant complètement la section détail, et donc en ne mettant rien du tout dedans... Eh oui, on n'est pas obligé... Vous constatez donc qu'il s'agit d'un état qui groupe d'abord par EtatCivil, et qui ensuite sous groupe par Titre (Les 9 premières personnes ont un groupe EtatCivil vide simplement parce qu'il n'est pas renseigné dans la table, c'est pour ça... Ca fait un peu bizarre). Il y a donc en en-tête de groupe des EtatCivil le nombre de personnes correspondant à cet EtatCivil, suiv du mot "Personne(s)". Ensuite, pour chaque sous groupe Titre, il n'y a non plus le nombre de personnes, mais, côte à côte, la somme et la moyenne des salaires (Moyenne un peu faussée, car nous n'avons pas exclu les gens dont le salaire est inconnu). Donc par exemple, si vous prenez l'ensemble des salaires de toutes les personnes "Célibataire", "Mademoiselle", on trouvera effectivement un total de 76581.76 francs. Je n'ai pas vérifié... Vous pouvez le faire, c'est toujours plus prudent. Leur moyenne est de 10940.25... Mais ça ne nous dit pas combien de "Célibataire" "Mademoiselle" il y a. Ce n'est pas renseigné. Et tout en dessous, en pied d'état, les totaux et moyennes générales. En pied d'état, donc, pas en pied de page, sinon, comme on a vu, ça fera une erreur. Bon, la mise en page, les cadres, les traits, tout ça, vous vous débrouillez. Appréciez le fait que je me sois donné bien de la peine pour vous fournir un exercice clair à visualiser ! PS : Oui, oui, il y a des "Madame" "Célibataire". Mais encore une fois, ces données sont fictives... Téléchargez la solution de l'exercice ici, qui n'est autre que ProFormation telle qu'elle devrait être à la fin de cette leçon |
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