|
Synchroniser deux zones de liste
Contribution de Geneviève Simard, Canadienne,
région de Quebec
Depuis
plusieurs semaines, Geneviève
élabore une base de données.
Ses besoins l'ont amené à devoir synchroniser le contenu
de deux zones de listes.
La liste principale contient le nom des Parents. Un clic sur le
nom de l'un d'eux et le prénom des enfants s'affiche aussitôt
dans une autre zone de liste.
Voici la démarche à adopter :
- choisir les données qui définiront la recherche
- élaborer les requêtes
- assimiler le principe Parent/Enfant
Prenons un exemple
Créez une table intitulée TblParent
et contenant les champs ParentID (type
: numéroAuto) et Parent (type : texte)
De la même manière construisez une table appelée
TblEnfant et contenant les champs EnfantID
(type : numéroAuto), ParentID (type :
numérique (relation avec la Table Parent), et Enfant
(type : texte pour le nom de l'enfant)
Alimentez vos tables avec les données suivantes :
TblParent
| ParentID |
Parent |
| 1 |
Jean-François Simard |
| 2 |
Jacques Turcotte |
| 3 |
Jérôme Verville |
TblEnfant
| EnfantID |
ParentID |
Enfant |
| 1 |
1 |
Bérangère Simard |
| 2 |
1 |
Geneviève Simard |
| 3 |
2 |
Gabrielle Turcotte |
| 4 |
2 |
Dominique Turcotte |
| 5 |
3 |
Luc Verville |
Les Requêtes
Créez une nouvelle requête : Nouveau,
mode création. Ne sélectionnez
aucune table (cliquez sur le bouton Fermer
lorsque la fenêtre Ajouter une Table
s'affiche).
Activez le menu Requête, Spécifique
SQL, Définition des données
et copiez (ou collez) le texte ci-dessous (il faut respecter les
lettre majuscules et minuscules) : SELECT
tblParent.ParentID, tblParent.Parent FROM tblParent ORDER BY tblParent.Parent.
Enregistrez cette requette sous le nom "cboParent".
Ouvrez une autre requête et répétez les manipulations
ci-dessous en copiant ces données : SELECT tblEnfant.EnfantID,
tblEnfant.Enfant FROM tblEnfant WHERE ((tblEnfant.ParentID)=[Forms]![frmExemple]![cboParent])
ORDER BY tblEnfant.Enfant. Enregistrez cette requête
sous le nom "cboEnfant".
Note : Si votre base contient de nombreuses données,
ajoutez le mot DISTINCT tout de suite
après le mot SELECT dans chacune de vos
requêtes. Ceci vous permettra de voir qu'une seule fois les données
qui se répètent dans votre base.
Le Formulaire
Créez un formulaire avec l'option Mode création.
Vérifiez que l'Assistant Contrôle
soit enfoncé et cliquez sur .
Cliquez sur votre zone de travail : l'assistant se déclenche.
Vous devez en tout premier lieu sélectionner l'option Je
veux que la zone de liste recherche les valeurs dans une table ou
une requête, puis appuyez sur Suivant.
Vous allez, en bas de la seconde boîte de dialogue, sélectionner
l'option Requête puis choisir la Requête
cboParent. Appuyez sur Suivant.
A présent, sélectionnez le champ Parent,
et cliquez sur la flèche simple pointant vers la droite pour l'envoyer
dans la zone Champs sélectionnez
et appuyez sur Suivant.
Vous pouvez ensuite sélectionner l'option ordre Ascendant
pour le champ Parent. Appuyez sur Suivant.
Passez outre les boîtes de dialogue suivantes et cliquez sur
Terminer.
Choisissez un nom pour votre liste déroulante, ici cboParent.
Cliquez sur Terminer.
Désactivez l'assistant contrôle
et, toujours sur le même formulaire, créez une zone
de liste que vous appellerez cboEnfant.
Activez la fenêtre des propriétés et, dans l'onglet
Données, Contenu,
sélectionnez cboParents, Colonne
liée : 1.
Dans l'onglet Autres, champ Nom,
nommez votre liste cboEnfant. Faites de
même avec cboParent et nommez-la...
cboParent !
Enregistrez votre formulaire sous le nom frmExemple.
Le code VBA
Et oui, vous allez devoir faire un peu de code VBA, mais ne vous
inquiétez pas, celui-ci est tout simple.
Sélectionnez votre zone de liste cboParent.
Activez l'onglet Évenements, et dans
le champ After Update (Après
MAJ) cliquez sur les trois petits points (.).
Vous devriez avoir, sur la partie droite de votre écran :
Option Compare Database
Private Sub cboParent_AfterUpdate( )
Me.cboEnfant.Requery
End Sub
Ajoutez la ligne en rouge, puis vous enregistrez et fermez votre
fenêtre !
C'est terminé ! Testez votre formulaire et vous verrez il n'y a
rien de plus simple.
En fait moi j'ai dû chercher pendant plus de 4 jours d'affilée
et imaginez : j'ai fait ma recherche en anglais car je suis parfaitement
bilingue !
Haut
|