Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Valeurs par défaut de listes déroulantes
Au chargement d'un
formulaire Access, il est souvent opportun de proposer des
valeurs par défaut dans des
listes déroulantes plutôt que de les garder muettes, tant que le premier choix n'a pas été effectué.
Sur l'exemple illustré par la capture, l'utilisateur travaille sur un
formulaire offrant
trois listes déroulantes reliées entre elles. S'il choisit un département avec la première liste, la deuxième lui offre toutes les villes de ce département. S'il choisit une ville de ce département avec cette deuxième liste, la troisième restreint ses propositions d'activités strictement à celles recensées dans cette ville pour ce département. Ce sont des
syntaxes Sql avec
Clauses Where qui sont exploitées en
sources de données de ces
listes déroulantes pour les articuler entre elles.
Mais surtout et comme vous avez pu le constater, chacune d'entre elles est remplie d'une valeur par défaut au
premier chargement du formulaire. Naturellement, les listes dépendantes piochent la première proposition dans les choix restreints, induits par les liaisons qui les animent.
Base de données Access à télécharger
Pour démontrer cette nouvelle
astuce VBA Access, nous suggérons d'appuyer les travaux sur une
base de données offrant ces trois listes déroulantes reliées en cascade.
Ainsi, nous l'exécutons.
Comme vous pouvez le voir, les trois listes déroulantes sont bien présentes. Mais elles sont muettes effectivement au premier chargement. Si vous désignez des valeurs en cascade, elles réagissent entre elles, comme nous l'avions annoncé, pour proposer des choix entonnoirs.
Initialiser au chargement du formulaire
Pour que des valeurs soient proposées par défaut, nous devons entreprendre des actions au
chargement du formulaire, ou plus précisément dès que celui-ci est
activé.
- A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans les propositions, choisir le mode Création,
Nous basculons ainsi dans la vue en conception du formulaire et ce dernier est sélectionné par défaut. C'est ce qu'indique la
feuille de propriétés.
- Activer l'onglet Evénement de sa feuille de propriétés,
- Cliquer sur le petit bouton associé à son événement Sur activation,
- Dans la boîte de dialogue qui suit, choisir le générateur de code et valider par Ok,
Nous basculons ainsi dans l'
éditeur VBA Access entre les bornes de la
procédure événementielle Form_Current. Son
code VBA se déclenchera à chaque
activation du formulaire, donc au chargement notamment. Vous notez de même la présence de deux autres procédures nommées respectivement
dep_Change et
ville_Change. Nous les avions développées à l'occasion d'une précédente astuce pour actualiser les données aux changements de valeurs dans les listes et pour réinitialiser les valeurs portées par chacune d'entre elles.
Valeurs par défaut et listes déroulantes
C'est une
astuce VBA Access qui permet de charger une valeur par défaut dans une zone de liste. Cette astuce consiste à affecter le contrôle lui-même sur une des valeurs qu'il porte. C'est la
collection ItemData d'un
contrôle de zone de liste déroulante qui permet de pointer sur l'une d'entre elles, en fonction de l'indice qui lui est passé en paramètre, par exemple 0 pour la première donnée. Ces trois zones de liste se nomment respectivement
dep,
villes et
activites.
- Dans les bornes de la procédure Form_Current, ajouter les instructions VBA suivantes :
Private Sub Form_Current()
dep = dep.ItemData(0)
villes = villes.ItemData(0)
activites = activites.ItemData(0)
End Sub
- Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
- Exécuter ce dernier, par exemple avec la touche F5 du clavier,
Comme vous pouvez l'apprécier, la première liste déroulante affiche automatiquement le premier département qu'elle porte. Et comme ces trois listes sont reliées entre elles grâce à des travaux précédents, la deuxième affiche naturellement la première ville de ce département tandis que la dernière propose la première activité recensée pour cette ville dans ce département.
Si vous changez de département, les deux listes dépendantes effacent leurs valeurs par défaut. C'est le
code VBA qui était déjà en place, qui s'en charge. Et les contenus de ces listes sont bien réajustés en fonction des choix parents.
Valeurs par défaut aux changements
Nous souhaitons maintenant exploiter le principe précédent pour afficher les premières valeurs dans les listes dépendantes, dès lors qu'un changement est opéré en amont. Pour cela, il suffit d'adapter les
procédures événementielles dep_Change et
villes_Change.
- Revenir dans l'éditeur VBA Access,
- Adapter ces deux procédures événementielles comme suit :
Private Sub dep_Change()
DoCmd.Requery
villes = villes.ItemData(0)
activites = activites.ItemData(0)
End Sub
Private Sub villes_Change()
DoCmd.Requery
activites = activites.ItemData(0)
End Sub
Très simplement, nous remplaçons les lignes consistant à effacer la précédente valeur portée. Lorsque le département est changé, nous chargeons la première ville dépendante dans la deuxième liste et la première activité associée dans la troisième. Lorsqu'une autre ville est choisie, nous chargeons la première activité qu'elle propose dans la troisième liste.
Vous pouvez désormais constater ces propositions automatiques sur le formulaire en opérant différents choix dans les
trois listes déroulantes dépendantes.