Domaines
RH
Juridique
Compta
Administratif/Moyens Généraux
Communication
Bureautique
Conseils aux débutants
Word
Excel
PowerPoint
Outlook
Access
Publisher
Windows/système
Applications pas à pas
Tests logiciels
Macros VBA
Leçons
Macros Word
Macros Excel
Astuces
Orthographe
Rédaction
Organisation
 
Outils
Ouvrages
Modèles
Macros
 
Anglais
Grammaire avec AnglaisFacile
Leçon gratuite avec AnglaisFacile
Carrière
Gestion de carrière
Fiches métier
Témoignages / vécu
 
 

Echanger

Forums

© Nadège Guilbert
Le contenu de ce site
est régulièrement déposé auprès de la SGDL
Reproduction interdite
sans le consentement
écrit de l'auteur


Imprimer la page

Bureautique > Access

16-nov-06

 

 

 

 

 

Base exemple

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 :

  1. choisir les données qui définiront la recherche
  2. élaborer les requêtes
  3. 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

Niveau

Pré-requis :

  • Aucun