deux combobox

Retour vers Access

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

Fin