Comment passer à un enregistrement spécifique à partir d’une sélection de zone de liste déroulante dans Microsoft Access
Modéré : nécessite des compétences de base en macro, en codage et en interopérabilité.
Cet article s’applique à un fichier de base de données Microsoft Access .MDB ou .ACCDB.
Résumé
Cet article présente quatre méthodes de déplacement vers un enregistrement spécifique en fonction de la sélection à partir d’une zone de liste déroulante. Les méthodes sont les suivantes :
- Dans l’événement AfterUpdate d’une zone de liste déroulante, exécutez du code qui utilise la méthode FindFirst.
- Dans l’événement AfterUpdate d’une zone de liste déroulante, appelez une macro qui réexécutera la propriété Filter d’un formulaire.
- Utilisez un formulaire/sous-formulaire, avec une zone de liste déroulante sur le formulaire main et les données du sous-formulaire, liées par les propriétés LinkMasterFields et LinkChildFields du contrôle de sous-formulaire.
- Basez le formulaire sur une requête qui joint deux tables, puis utilisez la technique recherche automatique pour lier une zone de liste déroulante au champ qui contrôle la jointure.
Ces quatre méthodes sont décrites dans la section « Plus d’informations » de cet article et sont basées sur l’exemple de base de données Northwind.
Informations supplémentaires
Microsoft fournit des exemples de programmation à titre d’illustration uniquement, sans garantie expresse ou implicite. Cela inclut, sans y être limité, les garanties implicites de commercialisation et d’adaptation à un but en particulier. Cet article considère que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du Support technique Microsoft peuvent vous expliquer les fonctionnalités d’une procédure particulière, mais ils ne peuvent pas modifier les exemples en vue de vous fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques.
Attention
Si vous suivez les étapes décrites dans cet exemple, vous modifiez l’exemple de base de données Northwind.mdb. Vous pouvez sauvegarder le fichier Northwind.mdb et suivre ces étapes sur une copie de la base de données.
Le tableau suivant compare les fonctionnalités (avantages et inconvénients) des quatre méthodes :
Méthode | 1 | 2 | 3 | 4 |
---|---|---|---|---|
Ne nécessite aucun code/macro | x | |||
Le sous-formulaire n’est pas obligatoire | x | x | ||
Peut faire défiler vers d’autres enregistrements | x | x | ||
Ne nécessite pas de requête | x | x | x | x |
Peut modifier des enregistrements | x | x | x | x |
Ouvre le formulaire dans d’autres modes | x |
Remarque
Ces méthodes peuvent également s’appliquer aux zones de texte.
Méthode 1
Créez une table nommée Products qui contient les champs ProductID et ProductName.
Utilisez l’Assistant Formulaire automatique : Colonne pour créer un formulaire basé sur la table Products, puis enregistrez le formulaire en tant que frmComboTest.
Pour ce faire dans Microsoft Office Access 2003 et les versions antérieures d’Access, procédez comme suit :
- Dans la fenêtre Base de données , cliquez sur Formulaires sous Objets.
- Cliquez sur Nouveau dans la barre d’outils de la fenêtre Base de données.
- Dans la boîte de dialogue Nouveau formulaire , cliquez sur AutoForm : Columnar, sélectionnez la table Products dans la liste déroulante, puis cliquez sur OK.
- Enregistrez le formulaire sous le nom frmComboTest.
Pour ce faire dans Microsoft Office Access 2007 ou une version ultérieure, procédez comme suit :
- Sous l’onglet Créer , cliquez sur Assistant Formulaire dans le groupe Formulaires .
- Dans la boîte de dialogue De l’Assistant , sélectionnez la table Products dans la liste déroulante.
- Sélectionnez les champs que vous souhaitez afficher dans le nouveau formulaire, puis cliquez sur Suivant.
- Sélectionnez l’option Columnar pour définir la disposition du formulaire, puis cliquez sur Suivant.
- Tapez frmComboTest comme titre du formulaire, puis cliquez sur Terminer.
Utilisez l’Assistant Zone de liste déroulante pour ajouter une zone de liste déroulante indépendante. Pour cela, procédez comme suit :
- Ouvrez le formulaire frmComboTest en mode Création.
- Dans la barre d’outils, vérifiez que l’option Assistant Contrôle est sélectionnée.
Remarque
Dans Access 2007 ou une version ultérieure, assurez-vous que l’option Utiliser les Assistants Contrôle est sélectionnée dans le groupe Contrôles de l’onglet Création .
- Créez une zone de liste modifiable sur le formulaire frmComboTest.
Remarque
Dans Access 2007 ou une version ultérieure, cliquez sur Zone de liste déroulante dans le groupe Contrôles sous l’onglet Création , puis cliquez sur le formulaire frmComboTest. Dans la boîte de dialogue Choisir un générateur , cliquez sur Assistant Zone de liste déroulante, puis sur OK.
- Dans la boîte de dialogue Assistant Zone de liste déroulante, sélectionnez l’option Rechercher un enregistrement sur mon formulaire en fonction de la valeur que j’ai sélectionnée dans ma zone de liste déroulante , puis cliquez sur Suivant.
- Sélectionnez les champs ProductID et ProductName, puis cliquez sur Suivant.
- Cliquez sur Terminer.
L’Assistant Zone de liste déroulante crée une procédure événementielle similaire à ce qui suit :
Private Sub Combo0_AfterUpdate() ' Find the record that matches the control. Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[ProductID] = " & Str(Nz(Me![Combo20], 0)) If Not rs.EOF Then Me.Bookmark = rs.Bookmark End Sub
Affichez le formulaire frmComboTest dans la vue Formulaire.
Notez que lorsque vous choisissez un nom de produit dans la zone de liste déroulante, vous êtes déplacé vers l’enregistrement du produit que vous avez sélectionné.
Méthode 2
Créez un formulaire basé sur la table Products à l’aide de l’Assistant Formulaire automatique : Colonne, comme indiqué à l’étape 2 de la méthode 1, puis enregistrez le formulaire en tant que frmComboTest2.
Dans la page Feuille de propriétés du formulaire frmComboTest2, définissez la propriété Filter sous l’onglet Données sur
[ProductName] = Forms![frmComboTest2]![cboLookup]
.Ajoutez une zone de liste déroulante indépendante nommée cboLookup, puis définissez les propriétés du contrôle comme suit :
Combo Box ----------------------------------------------------- ControlName: cboLookup ControlSource: <leave blank> RowSourceType: Table/Query RowSource: Select [ProductName] from Products; BoundColumn: 1 ColumnWidths: 1" AfterUpdate: mcrLocateProduct
Créez la macro suivante nommée mcrLocateProduct :
Action -------------------------------------- SetValue Requery mcrLocateProduct Actions -------------------------------------- SetValue Item: Forms![frmComboTest2].FilterOn Expression: True
Notez que lorsque vous ouvrez le formulaire frmComboTest2 et que vous sélectionnez un nom de produit dans la zone de liste déroulante cboLookup, le filtre est défini sur cette valeur.
Méthode 3
Créez un formulaire basé sur la table Products à l’aide de l’Assistant Formulaire automatique : Colonne comme indiqué à l’étape 2 de la méthode 1, puis enregistrez le formulaire en tant que frmSub.
Dans la page Feuille de propriétés du formulaire frmSub, définissez la propriété Affichage par défaut sous l’onglet Format sur Formulaire unique.
Créez un formulaire (qui n’est basé sur aucune table ou requête) et enregistrez-le en tant que frmMain. Ensuite, ajoutez une zone de liste déroulante et définissez ses propriétés comme suit :
Combo Box ---------------------------- ControlName: cboLookup ControlSource: <leave blank> RowSourceType: Table/Query RowSource: Products ColumnCount: 4 ColumnWidths: 0";2" BoundColumn: 1
Insérez un contrôle Sous-formulaire du formulaire frmSub.
- Accédez à Créer>un sous-formulaire/sous-rapport, puis annulez l’Assistant Sous-formulaire.
- Faites glisser et déposez le frmSub à partir du volet de navigation dans le formulaire frmMain.
Définissez les propriétés du contrôle de sous-formulaire comme suit :
Subform ---------------------------- LinkChildFields: [ProductID] LinkMasterFields: cboLookup
En modifiant la valeur dans le contrôle cboLookup, Access s’assure que les enregistrements du sous-formulaire correspondent à la zone de liste déroulante.
Le formulaire Commandes dans l’exemple de base de données Northwind illustre cette méthode. Le sous-formulaire Détails de la commande est associé aux propriétés LinkMasterFields et LinkChildFields .
Méthode 4 : Utiliser l’action de macro OpenForm avec la clause WHERE
Créez un formulaire basé sur la table Products à l’aide de l’Assistant Formulaire automatique : Colonne, comme indiqué à l’étape 2 de la méthode 1, puis enregistrez le formulaire en tant que frmComboTest5.
Ajoutez une zone de liste déroulante indépendante nommée cboLookup, puis définissez les propriétés du contrôle comme suit :
Combo Box ----------------------------------------------------- ControlName: cboLookup ControlSource: <leave blank> RowSourceType: Table/Query RowSource: SELECT [ProductID], [ProductName] FROM Products ORDER BY [ProductName]; BoundColumn: 1 ColumnCount: 2 ColumnWidths: 0";1"
Dans le Générateur de macros, créez une macro incorporée dans l’événement
AfterUpdate
pour la zone de liste modifiable cboLookup.Dans la liste déroulante Ajouter une nouvelle action , sélectionnez OpenForm, puis définissez les propriétés suivantes :
Form Name: frmComboTest5 View: Form Filter Name: <leave as empty> Where Condition: [ID] = [Forms]![frmComboTest5]![cboLookup].value Data Mode: <optional> Window Mode: <optional>
Enregistrez et fermez la macro.
Enregistrez et exécutez le formulaire.
Une fois que vous avez modifié la valeur de la zone de liste déroulante, le formulaire est fermé et ouvert à nouveau avec un filtre appliqué.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : tout au long de 2024, nous allons éliminer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d'informations, consultez :Envoyer et afficher des commentaires pour