Vous êtes sur la page 1sur 15

Personnalisez l'affichage des

onglets dans vos formulaires Access

Par BALLAT Jean

Date de publication : 3 octobre 2009

Cet article a pour but de montrer comment afficher un repère dans l'onglet d'un contrôle
contenant un résultat de requête.
Même s'il contient un peu de code, il s'adresse à tout public.

Commentez ♪
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

I - Introduction..............................................................................................................................................................3
II - Le cahier des charges........................................................................................................................................... 3
III - Les tables..............................................................................................................................................................3
IV - Le formulaire de consultation............................................................................................................................... 4
IV-A - La liste déroulante....................................................................................................................................... 4
IV-A-1 - Étape 1 : Sélection du type de la source des données......................................................................4
IV-A-2 - Étape 2 : Choisir la table source........................................................................................................ 4
IV-A-3 - Étape 3 : Choisir les champs sources de la liste déroulante..............................................................5
IV-A-4 - Étape 4 : Choisir les clés de tri.......................................................................................................... 5
IV-A-5 - Étape 5 : Modifier la largeur de colonne............................................................................................ 5
IV-A-6 - Étape 6 : Changer la légende de la liste............................................................................................ 5
IV-A-7 - Que s'est-il passé au niveau du contrôle ?........................................................................................ 5
IV-A-8 - Modifier le nom de notre contrôle liste déroulante............................................................................. 6
IV-A-9 - Concaténation des deux champs....................................................................................................... 6
IV-A-9-a - Définition..................................................................................................................................... 6
IV-A-9-b - Étape 1 : Afficher la requête source de la liste.......................................................................... 7
IV-A-9-c - Étape 2 : Modifier la structure de la requête..............................................................................7
IV-A-9-d - Étape 3 : Modifier les propriétés de la liste déroulante..............................................................7
IV-B - Les sous-formulaires par catégorie............................................................................................................. 8
IV-B-1 - Création de la requête source............................................................................................................ 8
IV-B-2 - Création du sous-formulaire................................................................................................................8
IV-B-3 - Modifier les propriétés du formulaire.................................................................................................. 8
IV-C - L'insertion des sous-formulaires..................................................................................................................9
IV-C-1 - Implantation du contrôle Onglet..........................................................................................................9
IV-C-2 - Implantation du sous-formulaire dans le contrôle Onglet................................................................. 10
IV-D - Le code d'affichage des repères...............................................................................................................11
IV-D-1 - À l'ouverture du formulaire............................................................................................................... 11
IV-D-2 - Après sélection d'un auteur.............................................................................................................. 11
IV-D-2-a - Déclaration des variables.........................................................................................................12
IV-D-2-b - Initialisation des variables........................................................................................................ 12
IV-D-2-c - Traitement................................................................................................................................. 12
IV-D-2-c-i - Exécution des requêtes.................................................................................................... 13
IV-D-2-c-ii - Récupération du nombre d'enregistrements.................................................................... 13
IV-D-2-c-iii - Affichage des images...................................................................................................... 13
IV-D-2-c-iv - Fermeture et libération des RecordSet........................................................................... 13
IV-D-2-d - Intégralité de la procédure....................................................................................................... 14
V - Conclusion........................................................................................................................................................... 15
VI - Remerciements................................................................................................................................................... 15
VII - Téléchargement................................................................................................................................................. 15

-2-
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

I - Introduction

L'utilisation du contrôle d'onglet est souvent très intéressante lorsqu'on a besoin d'afficher beaucoup d'informations
sur un formulaire. Hormis l'organisation des champs à afficher par thème afin d'alléger l'interface, celui-ci permet
aussi d'organiser l'affichage du résultat d'une requête concernant plusieurs thèmes différents.
À partir de là, comment savoir dans quel onglet la requête retourne des informations ?
Quelle galère pour l'utilisateur, s'il doit cliquer sur chaque onglet afin de voir si un enregistrement est renvoyé pour
un thème donné.
L'objectif de ce petit article est donc de montrer comment afficher un repère dans le ou les onglets qui contiennent
une information répondant au critère posé.

II - Le cahier des charges

Notre base de données gère une petite bibliothèque.


Afin de faciliter le travail du bibliothécaire, nous devons afficher dans un sous-formulaire, le résultat de la recherche
des ouvrages écrits par un auteur sélectionné.
Afin de rendre plus pratique sa recherche, nous devons :
- lui mettre à disposition une liste déroulante affichant les auteurs disponibles ;
- ventiler le résultat par catégorie de lecteurs (Adulte - Adolescent - Enfant).

Le formulaire de consultation (cf. l'image


ci-contre) affichera donc :
1) Une liste déroulante reprenant la
concaténation du nom et du prénom de
l'auteur ;
2) Un contrôle d'onglet affichant dans
chaque onglet,
- un petit livre ouvert si la requête
renvoie des infos,
- un petit livre fermé si la requête est
vide ;
3) Sous-formulaire identique
dans chaque onglet affichant les infos
souhaitées.

III - Les tables

Afin de prendre en main la base et les tables qui entrent en jeu, vous trouverez ci-dessous le modèle relationnel.

-3-
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

IV - Le formulaire de consultation

Le formulaire se compose donc d'une liste déroulante qui nous permettra de sélectionner un auteur et d'un contrôle
d'onglets contenant les sous-formulaires (tous identiques, un par catégorie de lecteur) affichant les résultats des
différentes requêtes.

IV-A - La liste déroulante

Cette liste déroulante est basée sur une requête qui récupère les données de la table T_Auteur.
Pour les débutants, nous allons reprendre les différentes étapes de la construction de la liste, puis nous allons
contrôler les différentes propriétés modifiées et enfin nous allons intervenir directement dans le contenu de la source
afin d'afficher le nom et le prénom de l'auteur concaténés comme demandé dans le cahier des charges.

IV-A-1 - Étape 1 : Sélection du type de la source des données

Nous allons créer un nouveau formulaire indépendant (c'est-à-dire sans


source attachée à celui-ci).
Suivant la version :
- avant 2007 : affichez la boîte à outils et cliquez sur l'outil : Zone de
liste modifiable ;
- à partir de 2007 : Cliquez, dans le ruban, sur l'onglet Créer, puis sur
l'outil Création de formulaire et enfin sur l'outil Zone de liste déroulante.
Dans les deux cas, cliquez ensuite sur le formulaire afin d'y déposer le
contrôle à créer.
Access nous propose de choisir le type de source. Laissez le choix par
er
défaut (1 choix)

Petit rappel sur les choix disponibles :

Choix « Je veux que la liste déroulante recherche… » : la liste sera dynamique (fonction
du contenu de la table source) ;

Choix…« Je taperai les valeurs … » : liste statique, la mise à jour de la liste devra passer par
une séquence de code (voir dans la F.A.Q : Ajouter une valeur dans une liste).

Puis cliquez sur « Suivant ».

IV-A-2 - Étape 2 : Choisir la table source

Lors de cette étape, il nous faut choisir la table source de notre liste
déroulante.
Choisissez la table « T_Auteur » puis cliquez sur Suivant.

-4-
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

IV-A-3 - Étape 3 : Choisir les champs sources de la liste déroulante

Il est temps maintenant de sélectionner les champs qui s'afficheront dans


notre liste déroulante.
Il suffit de double cliquer sur les divers champs dont nous avons besoin,
en l'occurrence :
- Code_Auteur ;
- Nom_Auteur ;
- Prenom_Auteur.
Cliquez sur le bouton « Suivant ».

IV-A-4 - Étape 4 : Choisir les clés de tri

Nous passerons l'étape 4 qui permet de choisir de trier le contenu de la


liste sur un ou plusieurs champs.
Cliquez sur « Suivant ».

IV-A-5 - Étape 5 : Modifier la largeur de colonne

Cette étape a pour but de redimensionner les colonnes de la liste. On


ne perdra pas de vue que seule la première colonne visible sera affichée
dans la liste, mais que toutes les autres seront affichées lors de l'ouverture
de la liste déroulante.
On remarquera aussi la case à cocher mentionnée par le warning. Celle-
ci nous indique que la colonne contenant la clé primaire est masquée. Ce
champ est implanté par défaut. Il représente la valeur que mémorisera
la liste lorsqu'un choix sera fait par l'utilisateur et il pourrait nous servir
pour faire le lien entre le formulaire principal et le sous-formulaire via les
propriétés Champs pères et Champs fils.
Pour modifier la largeur des colonnes, il suffit de manipuler le pointeur
comme pour les colonnes d'Excel (voir le repère sur l'image ci-contre).

IV-A-6 - Étape 6 : Changer la légende de la liste

Durant cette étape, nous saisissons la légende de notre contrôle et non


le nom de l'objet qu'il faudra modifier via les propriétés.
Manipulation importante pour la suite. Il est nécessaire de nommer tout
objet placé sur un formulaire ou un état.
À ce propos lire l'excellent tuto de Jean-Philippe Ambrosino (Argyronet)
Descriptif des conventions typographiques.

IV-A-7 - Que s'est-il passé au niveau du contrôle ?

Lors de la création de notre liste déroulante, tout en suivant les différentes étapes de la création, Access a modifié
les propriétés de notre contrôle.
Passons en revue les modifications.

-5-
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

En affichant la fenêtre des propriétés (clic droit sur le contrôle puis clic sur
Propriétés), on trouvera deux onglets concernés par les modifications.
1) L'onglet Données :
1) Origine Source : propriété renseignée lors de la première étape ;
2) Contenu : propriété renseignée lors des étapes 2 et 3.
Représente une syntaxe SQL générée lors de la sélection de la table et
des champs à afficher dans la liste ;
3) Colonne liée : propriété renseignée par défaut à 1.
Représente la colonne de la requête contenant le champ dont la valeur
sera stockée dans la liste après sélection d'une ligne.

2) L'onglet Format :
1) Nombre de colonnes : propriété renseignée lors du choix des champs
(Étape 3).
Indique le nombre de champs contenus dans la requête (masqués ou
non) ;
2) Largeur des colonnes : propriété renseignée lors de l'étape 5.
On peut remarquer une largeur à 0 cm. Cette colonne fait partie de la
requête, mais est masquée à l'affichage.

Nous avions choisi deux champs (nom_auteur et prenom_auteur). Rappelons-nous


qu'Access avait ajouté d'office la clé primaire !

IV-A-8 - Modifier le nom de notre contrôle liste déroulante

Lors de l'étape 6 nous avions, à la demande de l'assistant, modifié


l'étiquette de notre liste déroulante. J'avais alors insisté sur le fait qu'il était
nécessaire de nommer tout objet placé sur le formulaire (ou sur un état).
Pour réaliser cette opération, cliquez sur l'onglet Autres dans la fenêtre
des propriétés. Dans la propriété Nom, saisissez un nom évocateur du
contrôle concerné. Ici, vous tapez cboAuteur

IV-A-9 - Concaténation des deux champs

IV-A-9-a - Définition

La concaténation est une opération permettant la juxtaposition de deux expressions alpha ou numérique. Le résultat
sera une expression de type texte.
L'opérateur à utiliser : &
Exemples :
bon & jour -> bonjour
1 & 2 -> 12
La modification du contenu de la liste (donc de la syntaxe SQL générée automatiquement par ACCESS) peut se faire
en direct dans la propriété correspondante ou par l'intermédiaire de l'assistant requête.
J'opte pour cette seconde solution, plus simple pour les débutants.

-6-
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

IV-A-9-b - Étape 1 : Afficher la requête source de la liste

Pour afficher notre requête, il nous faut passer par la fenêtre des
propriétés :
- cliquez droit sur la liste déroulante puis cliquez Propriétés ;
- cliquez sur l'onglet Données.
Nous voici à pied d'œuvre. Dans l'image ci-contre j'ai placé deux repères :
1) cliquez dans la ligne Contenu.
2) cliquez sur le bouton avec les points de suspension afin d'afficher
la fenêtre de création de requête.
2) C'est dans cette fenêtre que nous allons intervenir pour modifier le
contenu de la liste.

IV-A-9-c - Étape 2 : Modifier la structure de la requête

Dans cette étape nous procèderons à trois opérations :


- créer un champ calculé pour générer la concaténation des deux
champs Nom et Prénom de l'auteur.
- Pour cette opération :
1) Pour cette opération :1) cliquez devant le nom du second champ et
tapez idAuteur : (nom du champ calculé) ;
1) Pour cette opération :2) & " " & prenom_auteur (Expression de la
concaténation).
- Appliquer un tri (n° 3 sur l'image) afin d'avoir toujours une liste
ordonnée lors de la mise à jour de la table T_Auteur.
- Sélectionner le champ prenom_auteur (n°´4 sur l'image) afin de le
supprimer, celui-ci n'ayant plus de raison d'être dans la liste.

Les modifications de la structure de la requête étant terminées, il suffit de fermer l'interface et répondre par l'affirmative
à la demande de sauvegarde des modifications de la syntaxe SQL. De retour à la fenêtre des Propriétés, validez
la nouvelle syntaxe en faisant Entrée.

Nous mettons un espace entre guillemets afin de séparer le nom et le prénom lors de la
concaténation.

IV-A-9-d - Étape 3 : Modifier les propriétés de la liste déroulante

La structure étant modifiée, les paramètres des propriétés enregistrées


lors de l'utilisation de l'assistant sont devenus obsolètes.
Si la source a été enregistrée précédemment, il faut corriger le format de
notre liste (cliquez dans l'onglet FORMAT de la fenêtre des propriétés).
Pour cela deux valeurs à changer :
1) Nombre de colonnes : saisissez le nombre de champs de notre
nouvelle structure de requête (ici 2) ;
2) Largeur des colonnes : sélectionnez les deux dernières valeurs et
saisissez une dimension ad hoc (ici tapez 5).

Remarquez que les dimensions de colonnes sont indiquées en cm. Il est inutile de saisir cette
unité, Access l'ajoute automatiquement.

-7-
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

Voilà, nous en avons terminé avec notre liste déroulante, vous pouvez fermer votre formulaire et l'enregistrer sous
le nom de F_Consultation. Nous allons maintenant créer les différents sous-formulaires que nous insèrerons dans
un contrôle à onglets.

IV-B - Les sous-formulaires par catégorie

Afin de simplifier la mise en forme, l'affichage des sous-formulaires sera de type feuille de données.
Les trois sous-formulaires étant identiques, on pourra procéder à une copie de l'objet et seul le critère de sélection
dans la requête source sera à modifier.

IV-B-1 - Création de la requête source

Nous allons créer une nouvelle requête.


Ajoutez, comme ci-contre, les différentes tables et sélectionnez les
champs dont nous aurons besoin.
Il est à remarquer :
1) Le champ CodeCategorie est le critère de sélection de la catégorie
de lecteurs ENFANT.
1) C'est cette valeur qu'il faudra changer dans les deux autres requêtes.
1) Vous pouvez lire les valeurs des catégories de lecteurs dans la table
T_Categorie.
2) Nous avons inséré également le champ code_auteur.
2) Ce champ sera le lien entre le sous-formulaire et la liste déroulante
(champ père) et la requête (champ fils).

La requête étant terminée, sauvegardez celle-ci sous le nom : R_OuvragesEnfant.


Procédez à la copie de cette requête deux fois en prenant soin de modifier la valeur du critère de sélection de la
catégorie.
Sauvegardez ces copies en les nommant successivement : R_OuvragesAdo et R_OuvragesAdulte.

IV-B-2 - Création du sous-formulaire

Créez un nouveau formulaire en lui donnant comme source :


R_OuvragesEnfant.
Placez dans la section Détail les deux champs Titre et Genre.
Le champ Code_Auteur sert de lien et ne doit pas être affiché.
Le champ Code_Categorie ne doit pas être visible puisqu'il y a un sous-
formulaire par catégorie.

IV-B-3 - Modifier les propriétés du formulaire

Le cahier des charges nous demande un affichage en mode feuille


de données. Pour optimiser l'affichage, nous allons modifier quelques
propriétés.
Affichez la fenêtre des Propriétés du formulaire et cliquez sur l'onglet
Format :
1) Affichage par défaut : choisir FEUILLE DE DONNÉES ;
2) Autoriser le mode Formulaire : choisir NON ainsi seul le mode choisi
restera accessible ;
3) Autoriser le mode Feuille de données : choisir OUI ;
4) Autoriser le mode Tableau croisé : choisir NON ;
5) Autoriser le mode Graphique : choisir NON ;
6) Boutons de déplacement : choisir NON

-8-
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

6) (il s'agit des boutons situés en bas à gauche du formulaire et qui


permettent de se déplacer dans les enregistrements) ;
7) Barre de défilement : choisir VERTICALE
7) (la barre de défilement horizontale étant inutile).

Ce sous-formulaire étant terminé, enregistrez -le sous le nom de F_OuvragesEnfant.

Il ne reste plus qu'à copier cet objet et à changer la source en conséquence.

Sauvegardez les copies sous les noms de F_OuvragesAdo et F_OuvragesAdulte.

IV-C - L'insertion des sous-formulaires

IV-C-1 - Implantation du contrôle Onglet

Pour créer le contrôle, cliquez :


- Version 2007 : dans le ruban sur l'onglet Outils de création de formulaire puis onglet Créer puis sur l'outil Contrôle
d'onglet ;
- Versions antérieures : dans la boîte à outils, clic sur l'outil Contrôle Onglet.
Cliquez ensuite sur le formulaire et redimensionnez l'objet créé en fonction de la dimension des sous-formulaires à
incorporer puis renommez le contrôle ctlConsultation (voir l'image ci-dessus à droite).
Enfin, nous avons besoin de trois onglets pour afficher les résultats de nos requêtes. Il nous faut en insérer un
supplémentaire :
cliquez à droite du dernier onglet avec le bouton droit de la souris puis, dans le menu contextuel, choisissez : Insérer
une page (voir l'image ci-dessus à gauche).
Il faut maintenant identifier les onglets :

Affichez la fenêtre des Propriétés et cliquez sur l'onglet Toutes.


1) Nom : saisir pgEnfant.
1) Il s'agit en fait de l'identifiant de l'onglet qui sera utilisé dans le Code.
2) Légende : saisir Enfant.
2) Il s'agit du texte affiché dans l'onglet. S'il n'y a pas de légende, Access
affiche alors le nom de l'objet.

Recommencez cette opération pour les trois onglets en donnant successivement :

- Nom : pgAdo / Légende : Adolescent ;

-9-
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

- Nom : pgAdulte / Légende : Adulte.

Dans Access, les onglets sont appelés des pages.

IV-C-2 - Implantation du sous-formulaire dans le contrôle Onglet

L'insertion d'un sous-formulaire dans un contrôle d'onglet est une opération simple.
- Activez l'onglet qui doit recevoir le sous-formulaire.
- Suivant la version :
Antérieures à 2007 : affichez la fenêtre base de données (F11) puis cliquez maintenu sur le nom du sous-formulaire ;
Version 2007 : cliquez maintenu sur le nom du sous-formulaire affiché dans le volet de gauche.
Glissez dans le sous-formulaire. Lorsque le cadre noir apparaît, lâchez la souris.
Maintenant, il nous faut relier le formulaire principal et le sous-formulaire.
Pour cela, affichez la fenêtre des Propriétés :
- cliquez sur l'onglet Données ;
- modifiez les deux propriétés ci-dessous :
- Champs pères : saisir cboAuteur (nom de la liste déroulante);
- Champs Fils : saisir code_auteur (champ présent dans la requête source du sous-formulaire).

L'implantation est terminée. Il suffit de renouveler ces opérations sur les deux autres onglets
avec les deux autres sous-formulaires sans oublier de modifier les propriétés.

- 10 -
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

IV-D - Le code d'affichage des repères

IV-D-1 - À l'ouverture du formulaire

Ouvrez le formulaire principal en mode création et affichez la fenêtre des


propriétés du formulaire, cliquez sur l'onglet Évènements et recherchez
dans la liste l'évènement Sur ouverture. Cliquez dans la ligne puis sur
le bouton liste déroulante (voir image ci-contre) et choisissez Procédure
évènementielle. Enfin cliquez sur le bouton affichant les points de
suspension.

Nous sommes dans l'éditeur de VBA (interface VBE : Visual Basic Editor). C'est ici que nous allons saisir les lignes
de code permettant d'implanter les images à l'ouverture du formulaire. Le curseur étant placé entre deux lignes
présaisies :

Private Sub Form_Open(Cancel As Integer)


End Sub

Saisir les lignes suivantes :

' Initialisation des images des onglets


Me.pgEnfant.Picture = CurrentProject.Path & "\image\livreferme.ico"
Me.pgAdo.Picture = CurrentProject.Path & "\image\livreferme.ico"
Me.pgAdulte.Picture = CurrentProject.Path & "\image\livreferme.ico"

Pour avoir de plus amples informations sur la gestion des images dans une base de données,
je vous conseille la lecture du tuto de Caféine : Gestion des images et des photos.

IV-D-2 - Après sélection d'un auteur

Ce code concerne la liste déroulante. Chaque fois que je choisis un nouvel auteur, les sous-formulaires se mettent
à jour grâce au lien champ père/Champ fils, mais je ne sais pas qui contient des enregistrements.
Nous allons écrire une procédure qui va calculer le nombre d'enregistrements récupérés par chaque requête source
des sous-formulaires.
Cette procédure sera placée sur l'évènement Après MAJ de la liste déroulante.
Affichez les propriétés de la liste déroulante et cliquez sur l'onglet Évènements. Positionnez-vous dans l'évènement
Après MAJ et choisissez Procédure évènementielle puis cliquez sur les points de suspension. (Idem que ci-dessus
pour la procédure sur l'ouverture du formulaire.)
La procédure se divise en plusieurs parties :
1) Déclaration des variables ;
2) Initialisation des variables ;
3) Traitement.

- 11 -
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

IV-D-2-a - Déclaration des variables

Nous allons exécuter en arrière-plan les requêtes sources des sous-formulaires. Pour cela nous aurons besoin de
zones de travail (dites variables en programmation).

' Déclaration des variables


' Variable représentant la base de données en cours
Dim MaBase As DAO.Database
' Variables contenant des enregistrements
Dim rsEnfant As DAO.Recordset, rsAdo As DAO.Recordset, rsAdulte As DAO.Recordset
' Variables stockant le nombre d'enregistrements récupérés
Dim intEnfant As Integer, intAdo As Integer, intAdulte As Integer
' Variables de type texte permettant de stocker les syntaxes des requêtes
' Variable représentant la partie SELECT de la requête
Dim strRequete As String
' 2 Variables pour la catégorie Enfant : la partie condition et la concaténation de la requête de
base et la partie conditionnelle
Dim strWhereEnfant As String,strEnfant As String
' 2 Variables pour la catégorie Adolescent : la partie condition et la concaténation de la
requête de base et la partie conditionnelle
Dim strWhereAdo As String, strAdo As String
' 2 Variables pour la catégorie Adulte : la partie condition et la concaténation de la requête de
base et la partie conditionnelle
Dim strWhereAdulte As String, strAdulte As String
' Variable représentant un onglet
Dim pgOnglet As Page

IV-D-2-b - Initialisation des variables

Une fois les variables déclarées, nous allons les initialiser :

' Initialisation de la Variable Base de données


Set MaBase = CurrentDb

' Intitalisation de la partie commune de la requête


strRequete = "SELECT T_Auteur.code_auteur, T_Livres.titre, T_Genre.genre FROM " _
& "T_Categorie INNER JOIN " _
& "(T_Genre INNER JOIN " _
& "(T_Auteur INNER JOIN T_Livres " _
& "ON T_Auteur.code_auteur = T_Livres.code_auteur) " _
& "ON T_Genre.code_genre = T_Livres.code_genre) " _
& "ON T_Categorie.code_categorie = T_Livres.code_categorie "

' Création de la clause de condition avec récupération de la valeur stockée dans la liste
déroulante (Concaténation)
strWhereEnfant = "WHERE T_Categorie.code_categorie = 1 AND T_Auteur.code_Auteur = " &
Me.cboAuteur
' Concaténation de la requête de base et de la clause WHERE
strEnfant = strRequete & strWhereEnfant & ";"
' Création de la clause de condition avec récupération de la valeur stockée dans la liste
déroulante (Concaténation)
strWhereAdo = "WHERE T_Categorie.code_categorie = 2 AND T_Auteur.code_Auteur = " & Me.cboAuteur
' Concaténation de la requête de base et de la clause WHERE
strAdo = strRequete & strWhereAdo & ";"
' Création de la clause de condition avec récupération de la valeur stockée dans la liste
déroulante (Concaténation)
strWhereAdulte = "WHERE T_Categorie.code_categorie = 3 AND T_Auteur.code_Auteur = " &
Me.cboAuteur
' Concaténation de la requête de base et de la clause WHERE
strAdulte = strRequete & strWhereAdulte & ";"

IV-D-2-c - Traitement

Les éléments pour faire le traitement sont prêts. Celui-ci se déroule en quatre temps :
1) Exécution des requêtes ;

- 12 -
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

2) Récupération du nombre d'enregistrements ;


3) Affichage des repères ;
4) Fermeture et libération des RecordSet.

IV-D-2-c-i - Exécution des requêtes

' exécution des requêtes


Set rsEnfant = MaBase.OpenRecordset(strEnfant)
Set rsAdo = MaBase.OpenRecordset(strAdo)
Set rsAdulte = MaBase.OpenRecordset(strAdulte)

IV-D-2-c-ii - Récupération du nombre d'enregistrements

' repérage du nombre d'enregistrements de chaque requête


intEnfant = rsEnfant.RecordCount
intAdo = rsAdo.RecordCount
intAdulte = rsAdulte.RecordCount

IV-D-2-c-iii - Affichage des images

' Affichage des images


Set pgOnglet = Me.pgEnfant
' Empêche Access de redessiner l'onglet à chaque appel de la procédure
Me.Painting = False
' Appel de la routine d'affichage
Call AfficherRepere(pgOnglet, intEnfant)
Set pgOnglet = Me.pgAdo
Call AfficherRepere(pgOnglet, intAdo)
Set pgOnglet = Me.pgAdulte
Call AfficherRepere(pgOnglet, intAdulte)
' Met à jour les onglets en une seule fois
Me.Painting = True

On peut remarquer dans cette procédure l'instruction : Call AfficherRepere(pgOnglet,


intAdulte)

Cet appel évite de réécrire plusieurs fois les mêmes instructions. Cette procédure est écrite
à la suite des autres procédures évènementielles.

Ci-dessous le détail de la procédure :

Sub AfficherRepere(pgOnglet As Page, NbrEnregistrements As Integer)


' Teste le nombre d'enregistrements dans la requête
If NbrEnregistrements = 0 Then
pgOnglet.Picture = CurrentProject.Path & "\image\livreferme.ico"
Else
pgOnglet.Picture = CurrentProject.Path & "\image\livreouvert.ico"
End If
End Sub

IV-D-2-c-iv - Fermeture et libération des RecordSet

' Fermeture et libération des Recordset


rsEnfant.Close
Set rsEnfant = Nothing
rsAdo.Close
Set rsAdo = Nothing
rsAdulte.Close

- 13 -
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

Set rsAdulte = Nothing

IV-D-2-d - Intégralité de la procédure

Voici ci-dessous l'intégralité de la procédure :

Private Sub cboAuteur_AfterUpdate()

' Déclaration des variables


Dim MaBase as DAO.CurrentDb
Dim rsEnfant As DAO.Recordset, rsAdo As DAO.Recordset, rsAdulte As DAO.Recordset
Dim intEnfant As Integer, intAdo As Integer, intAdulte As Integer
Dim strRequete As String
Dim strEnfant As String, strWhereEnfant As String
Dim strAdo As String, strWhereAdo As String
Dim strAdulte As String, strWhereAdulte As String
Dim pgOnglet As Page

' Initialisation des variables


Set MaBase = CurrentDb

strRequete = "SELECT T_Auteur.code_auteur, T_Livres.titre, T_Genre.genre FROM " _


& "T_Categorie INNER JOIN " _
& "(T_Genre INNER JOIN " _
& "(T_Auteur INNER JOIN T_Livres " _
& "ON T_Auteur.code_auteur = T_Livres.code_auteur) " _
& "ON T_Genre.code_genre = T_Livres.code_genre) " _
& "ON T_Categorie.code_categorie = T_Livres.code_categorie "

strWhereEnfant = "WHERE T_Categorie.code_categorie = 1 AND T_Auteur.code_Auteur = " &


Me.cboAuteur
strEnfant = strRequete & strWhereEnfant & ";"

strWhereAdo = "WHERE T_Categorie.code_categorie = 2 AND T_Auteur.code_Auteur = " & Me.cboAuteur


strAdo = strRequete & strWhereAdo & ";"

strWhereAdulte = "WHERE T_Categorie.code_categorie = 3 AND T_Auteur.code_Auteur = " &


Me.cboAuteur
strAdulte = strRequete & strWhereAdulte & ";"

' Traitement
'----------------
' exécution des requêtes
Set rsEnfant = MaBase.OpenRecordset(strEnfant)
Set rsAdo = MaBase.OpenRecordset(strAdo)
Set rsAdulte = MaBase.OpenRecordset(strAdulte)

' repérage du nombre d'enregistrements du résultat


intEnfant = rsEnfant.RecordCount
intAdo = rsAdo.RecordCount
intAdulte = rsAdulte.RecordCount

' Affichage des images


Set pgOnglet = Me.pgEnfant
' Empêche Access de redessiner l'onglet à chaque appel de la procédure
Me.Painting = False
' Appel de la routine d'affichage
Call AfficherRepere(pgOnglet, intEnfant)
Set pgOnglet = Me.pgAdo
Call AfficherRepere(pgOnglet, intAdo)
Set pgOnglet = Me.pgAdulte
Call AfficherRepere(pgOnglet, intAdulte)
' Met à jour les onglets en une seule fois
Me.Painting = True
' Libération des Recordset
rsEnfant.Close
Set rsEnfant = Nothing
rsAdo.Close
Set rsAdo = Nothing
rsAdulte.Close

- 14 -
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/
Personnalisez l'affichage des onglets dans vos formulaires Access par BALLAT Jean

Set rsAdulte = Nothing


End Sub

V - Conclusion

L'utilisation du contrôle Onglet est évidente dans la création des interfaces contenant beaucoup d'informations.
J'espère que cette petite application vous ouvrira de nouveaux horizons dans la création de vos futures interfaces.

VI - Remerciements

Je voudrais remercier l'ensemble de l'équipe DVP qui fait un travail énorme, qui a fait de Développez.com ce qu'il
est aujourd'hui et qui nous tire toujours vers le haut.
Merci également à Arkham46, Philippe Jochmans, User et Tofalu pour leurs précieux conseils.
Merci à Chtulus et Claude Leloup pour leur relecture attentive.

VII - Téléchargement

La base exemple est disponible en suivant ce lien :


Afficher les repères dans les onglets

- 15 -
Copyright ® 2009 Jean BALLAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.
https://jeannot45.developpez.com/articles/access/afficherreperes/

Vous aimerez peut-être aussi