Utilisation de deux combobox's , l'une dépendant de l'autre - 21 Dec 2004
But : Provoquer la mise à jour de la seconde combobox en ayant filtré sur la première combobox
Prenons une simple table avec 2 champs : 'Noms' et 'Prenoms' ; on bâtit une requête sur la table, et un formulaire sur la requête, on y ajoute 2 combobox's
que l'on renomme Combo1 et Combo2
si on a construit les combobox's en utilisant l' "Assistant Zone de liste déroulante", on doit ajouter l'option "DISTINCT" à l'instruction SQL générée
Ensuite sur la propriété 'Après MAJ' de la première combobox, on ajoute le code VBA suivant qui aura pour effet de filtrer notre formulaire
Private Sub Combo1_AfterUpdate()
Dim MonFiltre As String
MonFiltre = "[Noms] = '" & Me![Combo1] & "'"
DoCmd.ApplyFilter , MonFiltre
End Sub
Pour la seconde combobox, on utilisera les propriétés 'Sur Entrée' et 'Après MAJ'
Private Sub Combo2_Enter()
Dim MonSQL, MonFiltre As String
MonFiltre = "[Noms] = '" & Me![Combo1] & "'"
MonSQL = "SELECT DISTINCT Q_Personnes.Prenoms _
FROM Q_Personnes Where " & MonFiltre & "ORDER BY [Prenoms]; "
Combo2.RowSource = MonSQL
End Sub
Private Sub Combo2_AfterUpdate()
MsgBox "Le prénom sélectionné est " & Combo2
End Sub
La procédure Après MAJ est utile si on veut réaliser une action ou récupérer le contenu dans une variable
Autre méhode (récupérée sur le net, chez ExcelDownload, je pense...) : Code Postal
Le but avoir une première combobox avec les codes postaux, provoquer le tri des communes répondant à ce code postal et même provoquer l'ouverture automatique de la seconde combobox. L'effet est assez bluffant et surtout pratique
on peut soit utiliser des combobox indépendantes, ou basées sur les champs d'une table existante, la seule différence est de stipuler une propriété "Source Contrôle" ou pas...
Bâtissons un nouveau formulaire sur notre requête
Modifions les champs CodePostal et Ville en zone de liste déroulante
Créons la requête qui permet de lister les codes postaux, en prenant soin de réclamer un tri ascendant. Renommons la liste déroulante en "lbxCodePostal" (onglet "Autres")
Finalement, sur la proprièté "Après MAJ" de lbxCodePostal, intégrons le code VBA suivant
Private Sub lbxCodePostal_AfterUpdate()
Me.Ville = "Entrez une ville"
'Requery relance en fait la requête avec les nouveaux paramètres
Me.Ville.Requery
Me.Ville.SetFocus
Me.Ville.Dropdown
End Sub
Pour que "Requery" fonctionne, allons sur le champ "Ville" et là nous installons l'instruction SQL suivante
Sur les 2 requêtes (de Ville et de lbxCodePostal) ajouter "Distinct"
Et enfin, le résultat...
On peut utiliser cette méthode sur tous les formulaires que l'on souhaite
Cliquez ici pour télécharger le fichier zip : Fichiers