Sommaire
- Création d'un état groupé par année de naissance
- Groupe par les premières lettres d'un texte
- Astuce pour faire apparaître les initiales même si aucune donnée ne commence par ces lettres
C'est bizarre ce que vous dites, parce que effectivement, j'ai bien compris que les groupes ne peuvent s'appliquer qu'à des champs qui se répètent, autrement, il n'y a pas vraiment d'intérêt... Autant ne pas faire de groupes !
C'est idiot : Il n'y aura qu'une personne par groupe, a moins que par miracle, deux personnes soient nées le même jour... C'est aussi idiot que de grouper par nom !
Création d'un état groupé par année de naissance
Ah oui... MAIS... Que penseriez-vous de grouper les gens non pas par date de naissance, mais par ANNEE de naissance !Ca, ce serait bien, mais il va falloir un champ dans la table T_Celebrite "Année de naissance", non ?
Eh bien non ! L'assistant état va être assez malin pour récupérer l'année de naissance dans chaque date de naissance, pour justement grouper les gens par année.Je suis impatient de voir ça !
Demandez un état/Nouveau/Assistant état, basé sur T_Celebrite, cliquez sur suivant, sélectionnez le nom, le prénom et la date de naissance. Vous savez faire ça je suppose ?Oui ! Autrement, je n'ai qu'à refaire la leçon 44 si j'ai besoin de me rafraîchir la mémoire.
A ce tableau, demandez le groupe par DateNaissance :



Comme on va grouper par année, ce serait bien de voir la date de naissance précise pour chaque personne, non ?
Vous réfléchissez bien ! Cliquez sur suivant, et triez par date de naissance, cette fois :
Ca va servir à quoi ?
Comme on va avoir plein de gens pour chaque année, ce serait bien de les afficher triés du plus jeune au plus vieux.Cliquez sur Suivant, Demandez une présentation Bloc,
encore Suivant, demandez une présentation Société, Suivant, donnez comme nom E_CelebriteGroupeParAnnee, et Terminer. Voici un extrait de la première page :

C'est génial, mais c'est juste un peu bête d'avoir ces premières personnes qui n'ont pas de date de naissance..
Si on ne voulait pas qu'elles s'affichent, nous aurions simplement construit une requête basée sur T_Celebrite qui contient l'année de naissance, le nom et le prénom, et comme critère de Année de naissance, on aurait écrit "Pas Null", et c'est aussi simple que çaJe n'y pense jamais à ces requêtes !
Sur la 2ème page, constatez qu'il y a pas mal de gens nés en 1950 et, comme nous l'avons demandé (

Groupe par les premières lettres d'un texte
Avec les dates de naissance, je comprend.
Mais vous avez dit en début de leçon qu'on pouvait également grouper par Nom ? Comment cela se passe-t-il cette fois ?
C'est simplement par la ou les premières lettres du nom que nous allons grouper.Par exemple, tous les gens qui commencent par A, puis tous les gens qui commencent par B, etc.
Faisons ça. Fermez votre état.
Demandez un nouvel état, avec assistant, basé sur T_Celebrite, avec simplement le champ Prenom et NomClient. Groupez par le nom :


Ah oui, facile :
, et je clique sur OK.
Exactement.Et si on avait choisi 2 lettres initiales ?
Il aurait groupé par les 2 premières lettres : Tous les gens qui commencent par AA, pui AB, puis AC ... Puis BA, puis BB, etc.Ici, ce n'est pas une bonne idée. Mais si nous avions eu une liste de produits avec des numéros de ce style :
LEG01 - Poireau
FRU01 - Abricots
DES01 - Crème
FRU02 - Pommes
FRU03 - Oranges
DES02 - Gateau
LEG01 - Poireau
LEG01 - Pommes de terre
Les 3 premières lettres du code sont représentatives. On pourrait alors grouper avec les "3 lettres initiales", pour obtenir un état qui ressemblerait à ceci :
FRU
FRU01 - Abricots
FRU02 - Pommes
FRU03 - Oranges
DES
DES01 - Crème
DES02 - Gateau
LEG
LEG01 - Poireau
LEG01 - Pommes de terre
Dans notre cas, on a pas beaucoup de monde, ce serait un peu nul !
Oui, laissez donc une seule lettre de regroupement Cliquez donc sur OK :
Cliquez sur Suivant, triez par Nom, demandez une perésentation "Echelonné", cliquez sur Suivant, choisissez "Informel", Suivant, appelez votre état E_CelebriteGroupeAlphabetique, et Terminer.
C'est très chouette comme présentation !
Il y a malgré tout quelques imperfections, comme par exemple tout au début une erreur :
Parce que Loana n'a pas de nom de famille, c'est ça ?
Exactement, il n'a pas digéré ce fait. Ceci dit, ce n'est pas très normal non plus d'avoir des clients sans nom !!!A la dernière page, il y a des initiales non utilisées :

Astuce pour faire apparaître les initiales même si aucune donnée ne commence par ces lettres
Pourrait-on faire apparaître ces lettres même s'il n'y a personne dedans ?
Là tout de suite, non. Il faudra attendre de voir des techniques plus avancées pour ça... Eh oui, Access se laisse dompter jusqu'à un certain point.. Dès que vous désirez des fonctions qui ne sont pas directement prévues, c'est tout de suite un gros travail d'investigation technique!
Quoique dans ce cas précis, c'est simple, je vais dans la table, et je crée les clients suivants :
, ce qui fait que quand je relance mon état, j'obtiens cet affichage sur la dernière page :
. Vous voyez que je suis malin !
Effectivement, vous avez un tout bel état, c'est vrai. Mais avez vous pensé aux conséquences ? (Qu'on appelle également "Effets de bord").Vous avez maintenant 4 clients de plus que prévu, ce qui va paraître bizarre, et dans tous les formulaires, dans toutes les rquêtes et dans tous les autres états, vous aurez sans arrêt ces 4 "clients parasites" qui vont venir s'afficher au milieu de tout le monde alors qu'on en a pas besoin ailleurs que dans ce cas précis
Eh bien, je crée mes 4 clients bidons juste avant de lancer l'état, et je les efface juste après, et voilà tout !
Ah oui ? Et si vous lancez l'état 10 fois par jour, vous allez faire ce travail 10 fois par jour ?Vous allez vite en avoir marre !
D'autant plus que vous risquez bien une fois ou l'autre d'oublier de les enlever !
Ah ce sont des choses auxquelles on ne pense pas... Je pensais avoir trouvé LA solution, et voilà que vous me cassez la baraque !
Mais non, séchez vos larmes ! La conception Access, ça ne s'apprend pas comme le patin à roulettes. Nous y reviendrons. La leçon est terminée, fermez votre état, et surtout, si vous avez fait l'expérience d'ajouter les 4 clients bidons, retirez-les.
Bon... Hem... On peut résumer ?
Les groupes dans les états s'effectuent traditionnellement sur des champs répétitifs, tels que le pays ou le domaine, mais ce n'est pas une règle absolue : il est possible de grouper par des champs uniques, mais dans ce cas, il faut trouver des points de regroupement : Comme l'année de naissance, ou la ou les premières lettres du nom ou du prénom. Ces options se conçoivent lors de l'exécution de l'assistant état (![]() |
Avez-vous bien compris ?
|
Exercice
Voici un petit fichier au format texte (Aliment.txt). Il va s'agir pour vous de l'importer en tant que table dans votre base de données habituelle Proformation.mdb. Comment ? Vous avez oublié comment importer des données venant d'ailleurs ? Revoyez la leçon 18 pour vous rafraîchir la mémoire. Astuce : Si vous cliquez simplement sur le lien Aliment.txt, votre navigateur va vous en afficher le contenu... Il suffit de faire Fichier/Enregistrer sous pour lui donner un nom, et ainsi l'avoir sur votre propre disque dur afin de pouvoir l'importer dans Access. Une fois que vous avez réussi à l'importer, appelez votre table T_Aliment. Elle devrait ressembler à ceci (Un seul champ, donc): ![]() Votre travail ? Simplement créer un état avec l'assistant afin d'avoir un état qui ressemble à ceci : ![]() ATTENTION : astuce de la mort-qui-tue : Si vous essayez de créer un état avec assistant basé sur une table qui ne contient qu'UN SEUL champ, l'assistant état va se comporter un peu différemment, et ne carrément PAS vous proposer de faire un regroupement. La seule parade que j'ai trouvé pour avoir l'assistant qui se comporte normalement, et me permette de faire un regroupement, est de créer un nouveau champ que j'appellerai "Bidon", directement dans la table T_Aliment : C'est un champ qui reste tout vide, et ne sert à rien d'autre que de permettre le regroupement sur le champ Aliment. Téléchargez la solution de l'exercice ici, |
0 commentaires:
Enregistrer un commentaire