Leçon 51 : Etats : Initiation aux fonctions dans les groupes avec "Compte" et "Nom"

Temps nécessaire pour suivre cette leçon : entre vingt minutes et trois bons 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 effectuer des calculs au sein de ces groupes - à des fins statistiques par exemple.

Sommaire

  1. Utilisation de la fonction "Compte"
  2. Particularités syntaxiques des fonctions
  3. Particularité de la fonction Compte
  4. Impossibilité d'installer une fonction dans un en-tête/pied de PAGE
  5. Noms de champs déconseillés : Complément d'information

A quoi servent les niveaux de groupe, et comment les mettre en oeuvre ?

Nous allons voir ça en pratique.

Commencez par créer un nouvel état en mode création, basé sur T_Celebrite, qui ressemble à ceci : (pensez bien à virer l'en-tête/pied de page, les étiquettes des champs, et resserrez le tout)

Attendez juste une minute... que je fasse ça... VOILA !

Bien, maintenant demandez un groupe sur le domaine, comme ceci :

OK. Affichage, Trier et grouper, comme on a vu lors de la leçon précédente.

Offrez-lui un fond jaune, taille 15, et une petite bordure noire. Resserrez la section :

Vous ne seriez pas un peu perfectionniste, vous ???

Pas spécialement. mais comme je l'ai djà souvent répété, si vous ne prenez pas la peine de mettre en forme bien correctement vos états, je vous assure que vous n'allez rapidement plus rien comprendre.

Décalez un petit peu le nom et le prénom sur la droite.


Utilisation de la fonction "Compte"

Bon, nous avons fait un groupe sur le domaine, soit. Maintenant, nous allons compter les gens que nous avons dans chaque domaine. Pour ce faire, mettez un peu de place sous Domaine, et installez un champ Ab| : . Remplacez Texte3 par Nombre de célébrités : , et "Indépendant" par =Compte(NomClient) : . Attention : La moindre faute de frappe entraînera une erreur.

ATTENTION : Constatez que je vous ai fait écrire =Compte(NomClient) alors que dès que vous appuyez sur la touche ENTER de votre clavier (), il écrit en fait =Compte([NomClient]). Vous pouvez ajouter les crochets vous-même, mais ce n'est pas nécessaire : Access les rajoutera automatiquement autour des champs DANS LE CAS ou vous avez bien pris soin de ne PAS inclure d'espace dans les noms de vos champs !

Note : Les crochets s'obtiennent avec la touche de votre clavier Alt Gr (A droite de votre barre d'espace), et "è" pour les crochets ouvrants, et Alt Gr "!" pour les crochets fermants

Si vous avez eu le malheur d'appeler votre champ dans T_Celebrite Nom Client (Avec un espace) à la place de NomClient, ALORS, il vous FAUDRA systématiquement insérer les crochets partout ou ils sont nécessaires (en l'occurrence ici : =Compte([NomClient])), sinon... Une erreur apparaîtra : à l'instant ou vous appuyerez sur après avoir essayé d'écrire =Compte(Nom Client)

Je comprend enfin pourquoi vous ne vouliez pas d'espaces (Leçon 3, vers le début) !
D'ailleurs, dans les leçons 27 et 28, quand nous avons parlé de calculs et de paramètres dans les requêtes, il était déjà question de ces crochets.

C'est un peu le même principei.

Sauf que dans ces requêtes, on effectuait un calcul sur les champs d'un seul enregistrement (=[Salaire]+[prime] par exemple). Ici, nous faisons un regroupement de plusieurs enregistrements.

Vous pourriez relire rapidement ces leçons 27 et 28 pour bien vous remettre dans le bain.


Particularités syntaxiques des fonctions

Une fonction commence toujours par "=", Comme dans Excel en fait...

Toujours. C'est donc comme ceci :

  1. Le signe égal (=)
  2. le nom de la fonction (Ici, c'est Compte - Count si vous avez Access en anglais)
  3. On ouvre la parenthèse, on écrit le nom du champ et on referme la parenthèse.

Tiens : vous parliez d'Excel... Vous connaissez sans doute la fonction Somme : . Ca ressemble un peu, quelque part... Le modèle d'écriture est : =NomDeLaFonction(RéférenceDesCellules)

C'est vraiment toujours comme ça ?

Pas tout le temps, mais c'est une règle générale: =NomDeLaFonction(NomDuChamp). C'est évidemment très simplifié, mais n'allons pas trop loin pour cette leçon.

Pourquoi écrivez-vous "NomClient" entre parenthèses, et pas "Domaine" ?

En fait, pour la fonction Compte, le champ qu'on indique n'est pas important, mais ce qui se passe, c'est que si un champ est vide, il ne va pas le compter. Je vais vous montrer. Lancez l'état en mode aperçu avant impression :

Ca marche très bien : On a dans l'en-tête de chaque groupe le nombre de gens.
C'est génial. On avait déjà vu ça, mais c'était avec l'assistant (Leçon 46). On pourrait avoir le nombre total des gens ?

Oui, en haut ou en bas de l'état ?

On va dire en haut.

Pas de problème... Allez dans le menu Affichage/En-tête-pied d'état pour les afficher, et copiez-collez simplement votre formule dans l'en-tête d'état : , et voilà :


Particularité de la fonction Compte

Y'a un problème !
J'ai 100 enregistrements dans ma table, pas 99 !!!

C'est ce que j'étais en train de vous expliquer un peu plus haut : s'il y a un nom vide, il ne le compte pas... :

Il faut alors compter sur un champ qui est toujours rempli !

Oui, mais justement on n'en est jamais sûr ... Le titre ? Le nom ? Le prénom ? Le pays ?

On pourrait rajouter une clé primaire : Un champ IDCelebrite dans T_Celebrite, qu'on définit en NuméroAuto, et voilà... On est alors sûr à 100% que ce champ n'est jamais vide, comme nous l'avons vu à la leçon 13...
Et on fera =Compte(IDCelebrite)

C'est ça ! Ou alors, nous allons interdire le fait que le nom puisse être vide, parce qu'après tout, ce n'est pas très normal que des noms soient vides.

Le nom de famille de Loana est Petrucciani. Marche à suivre :

  1. Fermez votre état et Enregistrez-le sous E_CelebriteComptage
  2. Allez dans la table T_Celebrite en mode saisie de données, cherchez Loana, et ajoutez-lui son nom : Petrucciani
  3. Allez en mode création de cette même table. Interdisez les noms vides :
  4. Fermez la table (Dites oui au message d'avertissement vous précisant que vous avez modifié les règles des données)
  5. Rouvrez votre état E_CelebriteComptage

Et voilà : -


Impossibilité d'installer une fonction dans un en-tête/pied de PAGE

Puis-je obtenir le nombre d'enregistrements par page, en insérant cette même formule dans l'en-tête de page ?

NON. Il n'est pas possible de faire ceci : . Si vous essayez quand même, vous aurez cette erreur :

Pourquoi ?

Je n'en sais rien, c'est sans doute la conception interne d'Access qui interdit cette possibilité.

On ne peut rien placer du tout comme calcul dans les en-têtes et pieds de pages ?

Pas rien, mais en tout cas pas de calculs sur des groupes.

Par contre, on peut y mettre le numéro de la page : c'est pourtant le même principe, quand vous allez dans le menu Insertion/Numéros de page, c'est aussi une sorte de formule (="Page " & [Page]), mais comme c'est directement lié à la page, c'est alors possible...

On peut placer autre chose dans les en-têtes de page ?

Oui. Le nom de l'état par exemple.

Dans l'en-tête de page, intégrez un champ ab|, et écrivez =Nom dans le champ. Supprimez l'étiquette, comme ceci : . Voilà ce que ça donne : Le nom de l'état :


Noms de champs déconseillés : Complément d'information

Je comprend enfin pourquoi certains noms de champs sont à éviter, comme vous l'avez précisé dans la leçon 3, vers le début (Nom, Name, Type, Date, Index).
On pourrait rajouter Page comme nom de champ déconseillé, non ?

Effectivement ! Page est un mot réservé, mais on n'a généralement pas besoin d'un champ qui s'appellerait Page...

Je n'ai déconseillé que les noms de champs qui sont des noms réservés qu'on aurait le plus envie d'utiliser...

AJoutons une touche artistique à nos nouveaux champs : le nom de l'état, a peu près comme ceci :

Et, surtout, le comptage des gens : avez-vous vus l'espace immense entre "Nombre de célébrités" et "100" : . Cet espace est dû qu'en mode création, ce n'est pas 100 qui est indiqué, mais =Compte([NomClient]) : . Et comme ce champ est (en plus) aligné à droite (). il en résulte cet espace excédentaire : .

Conclusion : en mode création, n'ayez pas avoir peur de réduire, réduire, réduire le champ qui contient la formule =Compte([NomClient]) jusqu'à ce qu'elle soit juste assez large pour contenir un nombre à 3 chiffres (Ici : 100), comme ceci : . Attribuez-lui un fond orange bien visible.

C'est vrai qu'on n'arrive plus à lire la formule complète (On ne voit plus que =Co), mais ça n'a aucune importance.

En mode aperçu avant impression, regardez comme tout va bien : . La zone orange est juste un tout petit peu trop large pour contenir le nombre. Finalement, pour coller "Nombre de célébrités" vraiment à 100, nous allons :

  1. Coller l'étiquette "Nombre de célébrités" à son champ :
  2. Aligner l'étiquette "Nombre de célébrités" à droite :
  3. Et le champ "=Compte([NomClient])" à gauche :

Et voilà : . Il n'y a plus qu'à retirer l'orange au profit d'un fond transparent :

Nous allons nous arrêter là pour cette leçon. Fermez votre état, et Enregistrez-le

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

Nous avons vu dans la leçon 28, sur les calculs dans les requêtes, qu'il était possible d'effectuer des calculs sur différents champs d'un même enregistrements. Cette fois, dans les états, il est possible de faire des cumuls, tel que le comptage d'enregistrements par groupe.

Nous avons constaté que la fonction Compte à la particularité est de ne compter que les enregistrements non-vides. Ainsi, si nous comptions par exemple le champ Remarque, il ne donnerait que le nombre total des remarques qui ne sont pas vides.

Nous avons également constaté que ces fonctions peuvent s'appliquer dans les en-têtes de groupes, mais également dans les en-têtes (et dans les pieds) d'état, en utilisant la même syntaxe. Access rajoute automatiquement des crochets autour des champs lorsque c'est nécessaire pour autant qu'ils ne contiennent pas d'espace. Nous avons enfin vu la fonction Nom qui se contente d'afficher le nom de l'état dans lequel on se trouve.

Avez-vous bien compris ?

  1. Il est possible d'utiliser la fonction "Compte"
    a. Dans les en-êtes et pied de page
    b. Dans les en-têtes et pied d'état ***
    c. Dans les en-têtes et pied de détail (Ca n'existe pas !)

  2. L'une de ces 4 syntaxes est correcte. Laquelle ?
    a. =Compte(NomClient) ***
    b. Compte(NomClient)
    c. =Compte (Nom Client)
    d. =Compte"NomClient"
    e. =Con Te Nonk Liant

  3. La fonction "Nom" consiste à afficher :
    a. Le nom de l'état dans lequel on se trouve ***
    b. Le nom du client
    c. Rien du tout : La fonction Nom n'existe pas
    d. Le nom de la base de données dans laquelle on se trouve

  4. Dans un pied de page, je place une zone d'étiquette Aa dans laquelle j'écris littéralement : =Nom
    Il va afficher :
    a. E_LeNomDeLEtatDansLequelOnSeTrouve
    b. #ERREUR#
    c. =Nom *** (Eh oui, ce n'est pas une étiquette qu'il fallait mettre, mais un champ ab|)
    d. Bonaparte

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 au sein de votre base de données habituelle un état en mode création basé sur T_Celebrite, regroupé par pays, qui ressemble le plus possible à cet extrait :

Vous l'appellerez E_ComptageParPays

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