Leçon 46 : Etats avec groupes et sous-groupes

Temps nécessaire pour suivre cette leçon : Entre une demie heure et 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

Aperçu de cette leçon

Dans cette leçon, nous allons simplement voir comment faire pour établir non pas un seul groupe, mais un groupe ET un sous groupe. Vous allez vous rendre compte qu'on peut ainsi morceller les tables en groupes, sous-groupes, sous-sous-groupes, etc.à l'aide de l'assistant état.

Sommaire

  1. Rappel de l'assistant état semi personnalisé
  2. Création de deux groupes à l'aide de l'assistant
  3. Problèmes de groupement inhérents aux champs laissés vides
  4. Les groupes dans les états permettent de débusquer des erreurs de saisie
  5. Problèmes de présentation de groupes : La non répétition des titres de groupe sème la confusion
  6. Précision sur les groupes : Les groupes logiquement inexistants ne sont pas représentés
  7. Problèmes de présentation liés aux groupes qui contiennent très peu de données

Rappel de l'assistant état semi personnalisé

Nous allons commencer par créer un état composé de deux niveaux de regroupement : demandez un état Nouveau, Assistant état, basé sur T_Celebrite

, cliquez sur OK.

A cet écran, demandez le prénom, le nom, le domaine et le pays d'origine : . Cliquez sur Suivant.


Création de deux groupes à l'aide de l'assistant

Ici, vous constatez qu'Access tente de vous imposer un regroupement sur le Pays d'origine : . Heureusement, vous pouvez vous en débarasser simplement en cliquant sur le bouton <: . En fait, nous allons demander deux niveaux de regroupement : Placez à droite le Domaine et le Pays d'origine :

Pourquoi PaysOrigine est-il écrit en gras ?

C'est simplement celui qui est sélectionné. Cliquez sur Domaine, et c'est lui qui devient gras. Nous allons voir plus bas à quoi ça sert de sélectionner l'un ou l'autre.

Qu'est ce que ça va faire de spécial d'avoir deux niveaux de regroupement ?

Vous vous rappelez du regroupement que nous avons fait sur les titres à la leçon 44 ?

Oui, ça groupait et triait sur les titres : d'abord toutes les Mademoiselle, toutes les Madame et tous les Monsieur.

Exactement. Alors, quand il y a plusieurs niveaux de regroupement (ici : deux), ça va faire comme ça : comme on a un regroupement d'abord sur Domaine et ensuite sur Pays d'origine, l'assistant va regrouper de toute façon les gens par domaine, ça, c'est clair, c'est comme les titres. Mais ce qui va changer, c'est que pour chaque domaine, il va nous créer un sous groupe par pays : par exemple, il va commencer à nous afficher tous les gens du domaine "Affaire" (Parce que c'est le premier domaine : Il commence par "A"), et dans les "Affaire", Bill Gates apparaître, avec Alfred Sirven, Napoléon Bonaparte et Bernard Tapie.

Mais parmi ces gens, Bill Gates provient des Etats Unis, et les 3 autres sont issus de France,. Il va donc y avoir à initérieur du groupe Affaire, 2 sous groupes : un sous groupe "Etats-Unis" avec dedans une seule personne : Bill Gates, et, dans le 2ème groupe (France), il y aura Alfred Sirven, Napoléon Bonaparte et Bernard Tapie.

On recommence ensuite avec le 2ème groupe "Domaine" : ce sera la "Chanson", et là, nous aurons des gens du Canada, des Etats-Unis, de France, etc, alors, il y aura un sous-groupe de gens qui font de la "Chanson" pour chaque "Pays d'origine".

Expliqué théoriquement comme ça, c'est trop compliqué, vous comprendrez vraiment mieux quand nous aurons terminé cet état..

Let's go !

Vous en êtes donc ici : . Vous avez donc deux groupes : D'abord le groupe des domaines, et ensuite, le groupe des pays. Mais en fait, en cliquant sur ces icones , on a la possibilité de mettre d'abord PaysOrigine et ensuite Domaine, cliquez sur PaysOrigine , et cliquez sur : Les deux niveaux de titre se sont maintenant échangés :

Si j'ai bien compris, c'est comme l'explication plus haut, ou vous avez dit que lorsqu'il y a d'abord un regroupement sur Domaine et ensuite sur Pays d'origine : tout à l'heure, on groupait d'abord tous les domaines, et pour un domaine, on avait un sous groupe avec tous les pays, tandis que si on échange les champs de place (On transforme en ), on aura alors un groupe principal "Pays", et par exemple, quand on sera dans le pays "France", on aura, groupe par groupe, tous les domaines, et les gens qui font partie de chaque domaine (Affaire, Chanson, sport, etc.) ?!

Exactement.

Mais alors, je pourrais avoir un groupe, un sous groupe, un sous-sous-groupe, un sous-sous-sous-groupe, etc, à l'infini, comme ceci si je voulais :

Vous pourriez... tant que vous n'essayez pas de faire des groupes avec des champs assez uniques comme le Nom, par exemple, ce qui ne créerait pas d'erreur, mais qui serait vraiment inutile. Bon dans le cas d'une assez petite table comme la nôtre, avoir autant de niveaux de groupes ne donnera pas un résultat terriblement lisble, parce que il s'agira de très très petits goupes... (De plus, le champ décédé s'afficherait sous la forme de -1 ou 0, ce qui n'arrange pas la lisibilité. Vous vous souvenez pourquoi -1 ou 0 ? C'était dans la leçon 9)

Pas évident effectivement... Pas facile à lire ni à comprendre... On va peut-être reprendre l'exemple que nous avons commencé avec juste le Pays et le Domaine...

OK. Vous avec donc ces deux groupes, comme ceci : . Cliquez sur Suivant : Triez simplement par NomClient, histoire de les avoir dans chaque groupe par ordre alphabétique : . Cliquez sur Suivant. Demandez Contour 1 : . Cliquez sur Suivant. Demandez Gras : , cliquez sur Suivant. Appelez votre état E_CelebriteGroupePaysDomaine : , et comme il n'y a plus de bouton Suivant, cliquez sur Terminer : (Les ractangles de couleurs et les numéros de 1 à 5 sont là pour une explication au bas de l'état)


Problèmes de groupement inhérents aux champs laissés vides

Sur cette première page, nous avons les pays suivants : Rien, Allemagne, Belgique, Canada et ... La première partie de l'Espagne (parce qu'on arrive en base de la page physiquement...) Cette première page est même un peu particulière, car à y regarder de plus près, on constate que chaque groupe n'est constitué que d'une seule personne... Notre table T_Celebrite n'étant pas énorme, c'est donc tout à fait normal.

Prenons le cadre bleu, numéro 1 : C'est le groupe complet des gens qui ont pour pays d'origine ... Rien ! On les a laissés vides... Regardez, voici un extrait de la table avec tous les gens qui habitent nulle part : , et comme vous le constatez, ce sont justement ceux qui aparaissent dans le premier groupe de notre état : Jennifer Lopez, Johnny Weissmuller, Albert Einstein et Ayrton Senna.

Et donc, nous avons (comme prévu) un sous groupe des Domaines, avec chaque fois les gens qui en font partie : comme vous le constatez, dans la liste des gens qui ont pour pays d'origine Rien, il n'y en a pas deux qui ont le même domaine d'activité : Jennifer Lopez = Chanson, Johnny Weissmuller = Cinéma, Albert Einstein = Non spécifié et Ayrton Senna = Sport. Si lors de la leçon précédente, nous avions décidé de laisser en blanc les gens qui n'ont pas de domaine à la place d'écrire en toute lettre "Non spécifié", alors, dans la partie que j'ai peint en bleu, il n'y aurait qu'une zone blanche toute vide précédée du mot Domaine, comme ceci :

Le rectangle rouge (2) est la liste de tous les gens originaires de Belgique (Nous n'en avons que deux : Jacques Brel et Eddy Merckx : ).

J'ai peint et encadré en gris Jacques Brel, pour mettre en évidence la hiérarchie : Belgique, Cinéma, et enfin, Jacques Brel.


Les groupes dans les états permettent de débusquer des erreurs de saisie

Mais il fait de la chanson, pas du cinéma !

C'est juste, et lors du nettoyage des tables à la leçon précédente, ça nous avait échappé, mais cette fois, l'état nous l'a mis en évidence. Drôlement efficace, non ? Ceci dit, Jacques Brel aaussi fait du cinéma (Il a notamment joué avec Lino Ventura, dans le film "L'emmerdeur").

On ne peut pas le faire apparaître dans les deux rubriques à la fois (Cinéma et Chanson) ?

En tout cas pas dans l'état actuel des choses. Lorsque nous avons conçu notre table, l'énoncé était clair et net : un seul domaine par personne ! Si on avait voulu mettre un 2ème domaine, nous aurions dû prévoir un champ "Domaine2" pour sélectionner pour une même personne un 2ème domaine, mais ce n'est pas le cas ici, et des doubles domaines sont finalement assez rares. Donc, nous allons continuer comme ça.

Comme vous l'avez toujours souligné, les tables doivent être absolument impeccables au niveau de la création des champs, et au niveau de la saisie (ça nous l'avons vu à la leçon d'avant), autrement, effectivement, comme je vois, ça allait bien jusque là, et tout à coups, lors de la conception d'état, ça coince...

Oui. Un peu plus bas au rectangle vert (N° 3), là nous constatons qu'il n'y a qu'une seule personne d'un seul groupe : Céline Dion est à elle toute seule un groupe (Pays : Canada),et un sous groupe (Domaine : Chanson)


Problèmes de présentation de groupes : La non répétition des titres de groupe sème la confusion

Et en dessous (Rectangle jaune N°4), c'est le début du goupe Espagne. C'est vraiment une présentation à deux balles, parce que nous avons ici bien tous les titres (PaysOrigine : Espagne, Domaine : Non-spécifié, et même le titre Nom et Prénom), et c'est seulement en haut de la 2ème page qu'on commence à voir la liste des gens d'Espagne :

Voici donc la liste des gens originaires d'Espagne (Rectangle jaune N° 1). Il n'y a plus de titres, puisqu'ils étaient en bas de la page précédente

On ne peut pas les répéter sur cette page, les titres ?

Si, il y a toute une série d'astuces de mise en page que nous verrons ultérieurement. Pour l'instant contentons-nous de comprendre comment les groupes des états fonctionnent.

Vous avez donc les deux espagnols Pablo Picasso (Domaine non-spécifié, mais on ne le voit pas, c'éest en dessous de la page précédente) et Miguel Indurain (Sport)

En dessous, dans le rectangle bleu, il y a les Etats-Unis. Ce groupe est nettement plus intéressant, puisque nous avons enfin des sous groupes domaines qui contiennent plus d'une personne. Dans les "Affaire", il y a juste Bill Gates, mais en chanson il y a déjà 2 personnes : Jim Morisson et Britney Spears. Concernant le cinéma, là, il y en a une quantité ! Au moins 18 personnes (de Woody Allen à Bruce Willis). Je dis au moins, car rien ne me prouve qu'il a assez eu de place pour les afficher tous. Si ça se trouve, il y en a d'autres encore sur la page suivante. Nous verrons ça plus tard. C'est ici que nous voyons l'utilité d'un tri croissant par nom dans l'assistant ()

Effectivement, il les a mis par ordre alphabétique !

Et les groupes aussi. Si vous avez remarqué, vous avez comme pays : Rien, Allemagne, Belgique, Espagne, etc. Et pour chaque pays, les domaines sont également triés. Prenons par exemple les Etats Unis qui contiennent beaucoup de monde : Affaire, Chanson, Cinéma, Non-spécifié, Politique et Sport.


Précision sur les groupes : Les groupes logiquement inexistants ne sont pas représentés

Et je constate qu'il ne met que le nécessaire. Par exemple, je reprend la première page, je regarde la Belgique, et comme pour la Belgique il n'a trouvé que des personnes qui font du sport ou du cinéma, il n'a pas créé de groupes tous vides avec les autres domaines : Il n'y a pas de belges qui sont dans le domaine Affaire, Chanson ou Politique, donc il ne crée pas ces groupes. C'est génial !

C'est très sympathique de la part d'Access.

Quelque part, c'est aussi assez logique... Et si vous vouliez quand même voir les groupes vides parce que ça vous serait utile pour une raison ou l'autre, vous ne pourriez pas...

Ah bon ? On ne pourrait pas ?

Non, pas facilement comme ça en tout cas. Nous y reviendrons quand ce sera nécessaire. Ne compliquons pas.

A la page suivante (la 3ème), Je n'ai pas grand chose à dire, si ce n'est que nous avons eu la chance de pouvoir afficher toute la liste des gens qui sont des Etats-Unis qui font du cinéma dans la page précédente, et dans cette 3ème page, nous avons simplement plus de grands groupes, mais cette fois, quand on regarde la grande liste des "Chanson" du pays "France", la liste est encore plus grande que les "Cinéma" "Etats-Unis", et cette fois la liste se termine malheureusement sur la page suivante.

La 4ème page continue dans le même élan... La voici :

Elle ne se compose que de très grands groupes : la fin de Chanson, tout le groupe Cinéma et le début de Non-spécifié


Problèmes de présentation liés aux groupes qui contiennent très peu de données

Mais de quel pays provient tout ce beau monde ?

Justement, c'est bien là le problème : Ce sont de tellement grands groupes que le nom du pays a carrément disparu. Il est pourtant bien écrit, mais dans la page précédente (C'est la France en fait, mais vous l'avez sans doute deviné !). C'est pourquoi, ce ne sera pas du luxe dans les prochaines leçons, que de regarder comment personnaliser cet affichage qui est, osons le dire, un peu concon...

Après tout, un état est destiné à la présentation des tables et des requêtes pas excellence, on peut se permettre d'être pointilleux !

Passons enfin à la dernière page pour voir comment tout ceci finit :

Il fat quoi, Dave, tout seul en haut ???

C'est simplement la seule et unique personne des "Pays-Bas", en "Chanson", mais c'est en dessous de la page précédente que ses titres sont affichés ()

C'est un sacré problème ! Au premier regard, moi, j'avais trouvé génial cette histoire de groupes, mais à y regarder de plus près, y'a vraiment des sérieuses lacunes !

C'est toujours dans ce genre de cas un peu particuliers qu'on constate les faiblesses d'un système.

On va s'arrêter ici pour cette leçon. Fermez votre état

Et on le sauvegarde sous ? ...

Sous rien du tout il s'est enregistré tout seul dès que vous lui avez donné un nom tout à l'heure dans l'assistant :

Bon... Hem... On peut résumer ?

Les états sont la manière la plus effcicace d'obtenir une présentation synthétique/esthétique de vos données. L'un des points forts des états est de permettre l'affichage des données par groupe (Nous en avons vu une partie lors de la leçon 44). Ensuite, à la leçon 45, nous avons nettoyé T_Celebrite afin d'éviter d'avoir des états un peu bizarres. Maintenant que cette table a été nettoyée de fond en comble, nous avons pu dans cette leçon créer un état avec non pas un seul groupe, mais deux : Le groupe principal : PaysOrigine, et un sous groupe : Domaine.

Malgré tout le soin apporté à la table, et l'utilisation correcte de l'assistant état, nous avons constaté certaines particularités/anomalies, notamment certains groupes qui ne contiennent qu'une seule personne (La notion de groupe devient alors un peu galvaudée), et d'autres groupes tellement grands qu'ils ne tiennent même pas sur une page, et enfin certains groupes scindés au niveau des titres (Le titre du pays et/ou du domaine est en bas d'une page, et les personnes commencent à la page suivante), ne manquant pas de créer une certaine confusion..

Avez-vous bien compris ?

  1. Je crée un état basé sur T_Celebrite, et je groupe d'abord par Titre, et ensuite par Pays d'origine :
    a. J'obtiendrai tous les gens groupés par leur titre, et pour chacun des titres, j'aurai autant de sous groupes Pays que nécessaire ***
    b. J'obtiendrai tous les gens groupés par leur pays, et pour chacun des pays, j'aurai autant de sous groupes Titre que nécessaire
    c. Je ne peux pas grouper par Pays
    d. Je ne peux pas grouper par Titre

  2. Je crée un état basé sur T_Celebrite simplement groupé par Pays d'origine. Or, dans la table T_Pays, admettons que j'aie un pays "Ribouldingue-Land", mais absolument personne ne fait partie de ce pays
    a. L'état va contenir un groupe vide "Ribouldingue Land"
    b. L'état va contenir un groupe "Ribouldingue Land", qui cointiendra une personne fictive, dont tout les champs seront vides
    c. L'état ne contiendra simplement pas de groupe "Ribouldingue Land" ***
    d. Une erreur se déclenchera : "Erreur : Un ou plusieurs pays introuvable dans la table de correspondance T_Pays"

  3. Je crée un état basé sur T_Celebrite (Avec l'assistant état), je groupe par Domaine, et je sous-groupe encore par Domaine (Testez pour connaître la solution):
    a. L'état va simplement ignorer le sous groupe, et faire comme s'il n'y avait qu'un seul groupe domaine
    b. L'assistant ne me donnera simplement pas la possibilité de faire une telle chose ***
    c. Une erreur se produira "Un groupe ne peut pas contenir un sous-groupe portant sur le même champ"

  4. Je crée un état (Avec assistant) basé sur T_Celebrite, je groupe par Pays. J'appelle mon état E_Premier. Je crée ensuite un autre état (Toujours avec l'assistant) que je base sur mon état E_Premier, et ce nouvel état, je le groupe par Titre :
    a. Il va faire comme si c'état un seul état avec un groupe Pays, et un sous groupe Titre
    b. Il va ajouter le groupe Titre dans E_Premier
    c. Il va ajouter le groupe Pays dans mon nouvel état, et supprimer E_Premier
    d. Qu'est ce que c'est que cette nouveauté ? Depuis quand un état peut il être utilisé comme source d'un autre état ??? ***

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.

Exercice

L'exercice consiste à créer 3 états avec assistant au sein de votre base de données habituelle (Je vous laisse le soin de choisir la présentation que vous désirez. Ne demandez pas de tri) :


  1. Ce premier état montre simplement qu'un groupe placé sur un champ unique donne un résultat idiot :
    Nom : E_Lecon46Exercice1
    Table : T_Celebrite
    Champs : Nom et prénom
    Groupe : sur le nom
    (Recherchez ensuite la page ou Hallyday apparait pour vous rendre compte de l'effet du groupe)

  2. Nom : E_Lecon46Exercice2
    Table : T_Celebrite
    Champs : Nom, Prenom, Domaine et Pays
    Groupe : Domaine
    Sous-Groupe : Pays

  3. Cet état est exactement l'inverse de l'état d'avant. Ce serait intéressant de les exécuter tous les deux, et de les mettre côte à côte dans votre base de données, pour constater les effets des groupes
    Nom : E_Lecon46Exercice3
    Table : T_Celebrite
    Champs : Nom, Prenom, Domaine et Pays
    Groupe : Pays
    Sous-Groupe : Domaine

  4. Cet état sert à montrer l'étonnante apparence de Decede
    Nom : E_Lecon46Exercice4
    Table : T_Celebrite
    Champs : Nom, Prenom, Decede et Domaine
    Groupe : Domaine
    Sous-Groupe : Decede

Téléchargez la solution de l'exercice ici, qui n'est autre que ProFormation.MDB 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