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.
Double cliquer sur le fichier résultant pour l'ouvrir dans Access,
Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
Puis, dans le volet de navigation sur la gauche, double cliquer sur le formulaire f_villes,
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.