Cours sur les Etats Access

Cours de base sur les Etats Access
Les états vont permettre l'impression d'enregistrements selon une présentation qui aura été définie préalablement. La création d'un état ressemble fortement à la création d'un formulaire.
- Création d'un état
Pour créer un état, dans la fenêtre principale d'Access, cliquez sur l'onglet "Etats", puis sur "Nouveau" :
Il y a plusieurs méthodes pour créer un état :
?? Mode création : on crée tout de A à Z, on n'utilisera pas cette méthode
?? Assistant Etat: Access va nous guider pas à pas dans la création d'un état complexe
?? Etat Instantané : Colonnes : Access va générer automatiquement un état à partir du contenu d'une table, la présentation se fera comme dans un formulaire, sous forme de colonnes : à gauche on aura le nom du champ et à droite, son contenu.
?? Etat Instantané : Tableau : Access va générer automatiquement un état à partir du contenu d'une table mais sous forme de tableau, on aura en haut de la page le nom des champs et en dessous, le contenu pour chaque enregistrement, comme dans la présentation d'une table
?? Assistant Graphique : Pour créer un graphique, nous verrons cela plus tard
?? Assistant Etiquette : Pour créer automatiquement des étiquettes à partir du contenu d'une table, nous ne verrons pas cette option.
- Création d'un état Instantané Colonnes
Nous allons créer un état rapidement à partir de la table Clients :
Notez qu'on choisi la table dans le menu du bas.
Access nous génére automatiquement l'état suivant (en mode prévisualisation)
On a en haut le titre de la table, à gauche le nom du champ et à droite le contenu, chaque enregistrement est séparé par un trait.
- Création d'un état Instantané Tableau
Et Access génére l'état suivant :
En haut, le nom de la table, suivi du nom des champs et sur chaque ligne, le contenu des champs pour chaque enregistrement.
- Création d'un état à partir de l'assistant
Nous utiliserons désormais cette méthode pour créer un état, les deux méthodes précédentes étant trop restrictives.
Comme précédemment, on choisit à partir de quelle table va être créé l'état, si on veut créer un état à partir de plusieurs tables, on ne met rien ici, on renseignera la provenance des données dans l'écran suivant :
Comme pour la création d'un formulaire, on choisit à gauche les champs que l'on veut voir apparaître dans l'état, notez que si vous voulez afficher des champs provenant de plusieurs tables, vous choisirez dans le menu "Table/requêtes" une nouvelle table, les champs correspondants s'afficheront en dessous. Comme dans les formulaires, pour ajouter un champ, on utilise l'icône ">", pour les ajouter tous, on utilise l'icône ">>" et dans l'autre sens pour les retirer, cliquez ensuite sur "Suivant >".
Notez que la source de l'état n'est pas nécessairement une table, on peut très bien générer un état à partir d'une requête. Le fonctionnement reste le même sauf qu'au lieu d'aller chercher des informations dans une table, Access ira les chercher dans la table résultant de la requête.
Ici, on va indiquer comment se fait le regroupement. A quoi sert le regroupement ?
Par exemple, ici, on veut créer un état qui va afficher tous nos clients, on a choisit comme regroupement le champ "Ville", ce qui signifie que dans l'état qui va être généré, Access va afficher d'abord le nom de la ville, puis tous les clients habitant cette ville, puis la ville suivante et les clients et ainsi de suite. On peut choisir plusieurs niveaux de regroupement, on aurait pu ajouter un niveau supplémentaire avec par exemple le nom, dans ce cas, Access affichera d'abord la ville, puis le nom, puis tous les clients portant ce nom dans cette ville, puis le nom suivant, puis la ville suivante, etc ... :
On va se contenter de faire un regroupement par Ville, un regroupement pas nom n'a pas, en soi, tellement de sens.
On clique sur Suivant :
On va déterminer ici si on désire que les lignes de l'état soient triées et comment elles vont l'être :
On peut trier chaque ligne de détail (la ligne de détail est la ligne qui sera affichée pour chaque enregistrement) selon quatre critères, ces quatres critères sont des champs. On va choisir sur quels champs vont se faire ces tris, les lignes seront ainsi d'abord triées par nom, puis par prénom, etc.
Notez que l'on peut trier soit par ordre alphabétique normal (par défaut) ou à l'envers (de Z à A) en cliquant sur l'icône (AZ) placé à droite du champ.
On clique ensuite sur "Suivant >"
On choisit ici le modèle de présentation de l'état.
Et enfin le style de l'état :
On nomme l'état, et Access va le générer automatiquement :
Comme vous le constatez, les clients, classés par nom, prénom et adresse, sont regroupés par Ville.
- Création d'un état avec plusieurs tables
Jusqu'à présent, nos états n'affichaient que le contenu d'une table, nous allons créer un état qui va afficher la liste des clients, avec, pour chaque client, la liste des commandes qu'il a passé.
Attention, pour que ceci fonctionne, vous devez avoir crée correctement les relations entre les tables, sinon, Access risque de se perdre...
Comme avant, on crée un état grâce à l'assistant :
La différence est qu'ici, on va chercher des données appartenant à deux tables : Nclient, Nom et Ville proviennent de la table "Clients", N° Commande, Commande réglée et Vendeur proviennent de la table "Commandes".
Et là, on voit que si on a bien fait les relations entre les tables, Access est intelligent, il a vu qu'à un client peut correspondre plusieurs commandes, il nous propose donc de générer un état qui va soit afficher tous les clients, avec, pour chaque client les commandes correspondantes, ou toutes les commandes, avec, pour chaque commande, le client qui l'a passé.
Ce qui nous intéresse n'est pas d'avoir la liste des commandes, car un client peut avoir passé plusieurs commandes, on retrouvera donc son nom plusieurs fois dans l'état, on va donc regrouper par client.
On peut ajouter ici un nouveau niveau de regroupement, je veux par exemple, pour chaque client la liste des commandes, mais en plus, je veux avoir cette liste groupée par vendeur.
Ici, on va indiquer comment va se faire le tri, on va trier sur le Date (pourquoi pas), on aura donc un état qui va afficher pour chaque client, les commandes qu'il a passé, triées par date et regroupées par vendeur.
On choisit ensuite la présentation et on donne un nom à l'état et Access génére :
Comme on peut le constater, on a ici le client, suivi de la liste de ses commandes, regroupées par Vendeur. 5. Modifier la structure d'un état
A présent, nous allons modifier l'état, nous allons ajouter, pour chaque client, une ligne qui va indiquer combien il a passé de commandes :
On clique sur l'état que l'on vient de créer et sur le bouton "Modifier" dans la fenêtre principale d'Access :
Comme on peut le constater, il y a plusieurs parties dans un état :
?? L'en-tete de l'état : c'est ce qui va être imprimé au début de l'état, ce ne sera imprimé qu'une seule fois.
?? L'en-tete de page : c'est ce qui sera imprimé au début de chaque page (un titre par exemple).
?? L'en-tete de groupe : c'est ce qui va être imprimé au début de chaque groupe, ici l'état est groupé par client, en en-tête du groupe client, on va donc imprimer les informations sur le client, il y a un sous-groupe dans le groupe client, c'est le groupe "Vendeur", on va donc imprimer dans l'en-tete de ce sous groupe les informations sur les vendeurs.
?? Le détail : c'est ici que vont être imprimées chaque ligne de l'état, en l'occurrence ici les commandes
?? Le pied de page : c'est ce qui sera imprimé en bas de chaque page (souvent la date et la numérotation des pages)
?? Le pied d'état : c'est ce qui sera imprimé une seule fois à la fin de l'état.

A chaque en-tête peut correspondre un pied, ici les pieds pour les groupes Clients et Vendeur ne sont pas affichés, mais si ils l'étaient, à la fin de chaque groupement, le contenu du pied de groupe s'imprimerait, par exemple, après chaque client, avant d'imprimer l'en-tete pour le client suivant, Access imprimerait le pied pour le client, idem pour le groupe vendeur, avant d'imprimer l'en-tete du prochain vendeur, Access imprimerait le pied du groupe vendeur.
L'impression se fait ainsi :
En tête de l'état
En tête de page
En tête de groupe (client 1)
En tête de groupe (Vendeur 1)
Détail (commandes)
Pied de groupe (Fin du vendeur 1)
En tête de groupe (Vendeur 2)
Détail (commandes)
Pied de groupe (Fin du vendeur 2)
Pied de groupe (Fin du Client 2)
Pied de Page
Pied d'état
On va afficher le nombre de commandes passées dans le pied du groupe client, ce qui est logique : à la fin d'un client, on affiche le nombre de commandes qu'il a passé :
Le pied du groupe client n'existe pas, il va falloir l'afficher, pour cela on clique sur l'icône :
Access affiche alors :
Qu'avons-nous dans cette fenêtre ?
En haut, la liste des champs sur lesquelles sont groupées ou triées les informations dans l'état, lorsque les informations sont groupées sur un champ, le nom de ce champ est précédé d'un icône (ici l'état est groupés sur les champs Nclient et Vendeur), lorsque le champ est uniquement utilisé pour trier l'état, il n'est précédé d'aucun icône (le champ Date de Commande sert uniquement au tri, il n'a pas d'icône). On peut, dans cette fenetre, ajouter un nouveau critère de tri ou un nouveau groupe.
Dans la partie infèrieure se trouvent les propriétés de chaque champ. Pour le champ Nclient, on peut voir que, entres autres, la propriété "Pied de groupe" est à "Non", ce qui signifie qu'il n'y aura pas de pied de groupe pour ce groupe là, nous voulons qu'il y en ai un pour que nous puissions imprimer dans ce pied le nombre de commandes passées pour ce client. Nous choisissons "Oui".
On peut constater que le pied de groupe "Nclient" est apparu.
Dans ce pied, nous allons ajouter les informations que nous désirons voir apparaître. Pour cela, nous procédons comme avec les formulaires, nous allons utiliser un contrôle "Zone de Texte" qui va nous permettre d'afficher le résultat d'un calcul (le calcul étant ici le nombre de commandes passées).
Nous avons notre contrôle qui, pour l'instant n'est lié à rien (il est indépendant).
Nous allons indiquer à Access que ce qui doit être affiché dans ce contrôle est le nombre de commandes passées pour ce client :
Pour cela nous utilisons la fonction "Compte" que nous avions vu dans les formulaires, cette fonction compte le nombre de fois que le champ passé en paramètre va être affiché.
On obtient donc dans le pied de groupe :
Lorsqu'on demande à visualiser l'état, on obtient :
Vous pouvez voir, qu'en dessous du détail de chaque client, se trouve le nombre de commandes qu'il a passé.
- Insertion d'un sous-état
Comme pour les formulaires, on peut insérer dans un état un sous état. Les données du sous état seront imprimées en fonction de celles contenues dans l'état. Nous allons imprimer un bon de commande, le bon de commande va contenir toutes les informations concernant cette commande : les coordonnées du client, et le détail de chaque ligne de la commande.
Pour varier les plaisirs, nous allons baser cet état non plus sur une table comme précédemment mais sur une requête, cette requête va afficher, pour un numéro de commande donné, les informations la concernant : Date, réglée, n° du vendeur, nom et coordonnées du client :
Je n'entre pas dans le détail de la requête, (vous êtes censé savoir comment on fait), sachez seulement que pour pouvoir saisir le numéro de commande, on place comme critère au champ "N° Commande" le critère "=[Entrez le numéro de la commande].
Une fois la requête créée, on va créer un état en le basant sur cette requête :
On choisit tous les champs de la requête :
Cette fois-ci, on veut que l'état affiche les renseignements par commande (on veut imprimer un bon de commande) et non pas par client :
On indique dans l'écran suivant qu'on ne veut pas de niveau de regroupement supplémentaire et on choisit le format d'impression :
Choisissez la décoration et donnez un nom à votre état, Access génére l'état et affiche :
Pourquoi ? simplement parce que comme l'état est basé sur une requête, Access appelle d'abord la requête pour construire l'état, et cette boite de dialogue est générée par la requete.
Il génére alors un état tout simple :
Nous allons, comme avec le sous-formulaire, ajouter un sous état à l'état actuel, ce sous état va afficher, pour la commande le détail de chaque ligne de la commande :
Pour cela, on passe en mode modification de l'état et on insère dans la partie "Détail" de l'état un contrôle sous-état :
Access nous demande à partir de quoi va être généré notre sous-état, il va l'être à partir de tables.
Access nous demande ensuite quels vont être les champs qui vont être affichés dans le sous-état.
On retrouve ici ce qu'on avait fait dans les formulaires, on indique ici les champs et les tables d'où proviennent les informations : num_prod, quantite et num_cde viennent de la table "lignes_commande" et libelle et prix unitaire viennent de la table "Produits"
Notez que le champ num_prod (numéro du produit) vient de la table "Lignes Commande" et non pas de la table "Produits". Pourquoi ? Parce qu'on veut la liste des produits commandés (donc présents dans la table Lignes Commandes"), si on avait choisi le numéro de produit venant de la table "Produit", cela aurait voulu dire qu'on voulait la liste de tous les produits présents dans la table "Produits".
Il va falloir maintenant indiquer à Access comment faire la relation entre l'état et le sous-état. De deux choses l'une, soit les relations sont bien faites et Access va savoir seul comment faire la relation, soit elles sont mal faites, ou Access ne voit pas comment faire et il va afficher la fenêtre suivante :
Ici, on va simplement indiquer à Access quel est le champ qui va être commun à l'état et au sous-état, c'est à partir de ce champ commun que le sous état va pouvoir être généré. On veut afficher, pour chaque commande le détail de chaque ligne de la commande, ce détail se trouve dans la table "Lignes_commande", dans la table "Ligne_Commande" se trouve le champ "num_cde" qui indique à quelle commande appartient cette ligne de commande.
La "jointure" entre ces deux tables va donc se faire sur le numéro de commande, d'un côté le champ "N° commande" dans la table "Commande" avec le champ "num_cde" dans la table "Lignes_commande" de l'autre.
D'ailleurs, on peut voir dès qu'on a choisi ces champs, qu'Access nous affiche en français la nature de cette relation entre les tables.
Access génère l'état et affiche :
Vous pouvez constater que maintenant, pour la commande, s'affiche, en plus le sous état contenant le détail de chaque commande.