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

  1. Créez une table nommée Products qui contient les champs ProductID et ProductName.

  2. 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 :

    1. Dans la fenêtre Base de données , cliquez sur Formulaires sous Objets.
    2. Cliquez sur Nouveau dans la barre d’outils de la fenêtre Base de données.
    3. 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.
    4. Enregistrez le formulaire sous le nom frmComboTest.

    Pour ce faire dans Microsoft Office Access 2007 ou une version ultérieure, procédez comme suit :

    1. Sous l’onglet Créer , cliquez sur Assistant Formulaire dans le groupe Formulaires .
    2. Dans la boîte de dialogue De l’Assistant , sélectionnez la table Products dans la liste déroulante.
    3. Sélectionnez les champs que vous souhaitez afficher dans le nouveau formulaire, puis cliquez sur Suivant.
    4. Sélectionnez l’option Columnar pour définir la disposition du formulaire, puis cliquez sur Suivant.
    5. Tapez frmComboTest comme titre du formulaire, puis cliquez sur Terminer.
  3. Utilisez l’Assistant Zone de liste déroulante pour ajouter une zone de liste déroulante indépendante. Pour cela, procédez comme suit :

    1. Ouvrez le formulaire frmComboTest en mode Création.
    2. 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 .

    1. 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.

    1. 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.
    2. Sélectionnez les champs ProductID et ProductName, puis cliquez sur Suivant.
    3. 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
    
  4. 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

  1. 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.

  2. 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].

  3. 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
    
  4. 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

  1. 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.

  2. 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.

  3. 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
    
  4. 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.
  5. 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

  1. 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.

  2. 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"
    
  3. 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.

  4. 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>
    
  5. Enregistrez et fermez la macro.

  6. 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é.