Événement ComboBox.NotInList (Access)

L’événement NotInList se produit lorsque l’utilisateur entre une valeur dans la zone de texte d’une zone de liste modifiable et que cette valeur ne figure pas dans la liste correspondante.

Syntaxe

expression. NotInList (NewData, Response)

Expression Variable qui représente un objet ComboBox .

Parameters

Nom Requis/Facultatif Type de données Description
NewData Obligatoire String Chaîne que Microsoft Access utilise pour transmettre le texte que l’utilisateur a entré dans la partie zone de texte de la zone de liste déroulante à la procédure événementielle.
Réponse Obligatoire Integer La valeur indique comment l’événement NotInList a été géré. L’argument Response peut être l’une des constantes intrinsèques suivantes :
  • acDataErrDisplay (par défaut) Affiche le message par défaut à l’utilisateur. Utilisez cette option lorsque vous ne souhaitez pas autoriser l’utilisateur à ajouter une nouvelle valeur à la liste de zone de liste déroulante.
  • acDataErrContinue N’affiche pas le message par défaut à l’utilisateur. Utilisez cette option lorsque vous souhaitez afficher un message personnalisé à l’utilisateur. Par exemple, la procédure événementielle peut afficher une boîte de dialogue personnalisée demandant à l’utilisateur s’il souhaite enregistrer la nouvelle entrée. Si la réponse est Oui, la procédure événementielle ajoute la nouvelle entrée à la liste et définit l’argument Response sur acDataErrAdded. Si la réponse est Non, la procédure événementielle définit l’argument Response sur acDataErrContinue.
  • acDataErrAdded N’affiche pas de message à l’utilisateur, mais vous permet d’ajouter l’entrée à la liste de zone de liste déroulante dans la procédure événementielle NotInList . Une fois l’entrée ajoutée, Access met à jour la liste en interrogeant à nouveau la zone de liste déroulante. Access revérifie ensuite la chaîne par rapport à la liste des zones de liste déroulante et enregistre la valeur dans l’argument NewData dans le champ auquel la zone de liste déroulante est liée. Si la chaîne ne figure pas dans la liste, Access affiche un message d’erreur.

Remarques

Pour exécuter une macro ou une procédure événementielle lorsque cet événement se produit, définissez la propriété OnNotInList sur le nom de la macro ou sur [Procédure événementielle].

Cet événement permet à l’utilisateur d’ajouter une nouvelle valeur à la liste de la zone de liste modifiable.

La propriété LimitToList doit être définie sur Oui pour que l’événement NotInList se produise.

L’événement NotInList ne déclenche pas l’événement Error .

L’événement NotInList a lieu pour les zones de liste modifiable dont la propriété LimitToList a pour valeur Oui, lorsque vous tapez une valeur qui ne figure pas dans la liste et que vous essayez de vous placer sur un autre contrôle ou de sauvegarder l’enregistrement. Il intervient après tous les événements Change pour la zone de liste modifiable.

Lorsque la propriété AutoExpand est définie sur Oui, Access sélectionne les valeurs correspondantes dans la liste lorsque l’utilisateur entre des caractères dans la partie zone de texte de la zone de liste déroulante. Si les caractères que l’utilisateur tape correspondent aux premiers caractères d’une valeur de la liste (par exemple, l’utilisateur tape « Smith » et « Smithson » est une valeur dans la liste), l’événement NotInList ne se produit pas lorsque l’utilisateur passe à un autre contrôle ou enregistre l’enregistrement. Toutefois, les caractères qu’Access ajoute aux caractères que l’utilisateur tape (dans l’exemple, « son ») sont sélectionnés dans la partie zone de texte de la zone de liste déroulante. Si l’utilisateur souhaite que l’événement NotInList se déclenche dans de tels cas (par exemple, l’utilisateur souhaite ajouter le nouveau nom « Smith » à la liste de zone de liste déroulante), il peut entrer un caractère Espace, Retour arrière ou Supprimer après le dernier caractère de la nouvelle valeur.

Lorsque la propriété LimitToList est définie sur Oui et que la liste de la zone de liste déroulante est supprimée, Access sélectionne les valeurs correspondantes dans la liste lorsque l’utilisateur entre des caractères dans la partie zone de texte de la zone de liste modifiable, même si la propriété AutoExpand est définie sur Non. Si l’utilisateur appuie sur Entrée ou passe à un autre contrôle ou enregistrement, la valeur sélectionnée apparaît dans la zone de liste déroulante. Dans ce cas, l’événement NotInList ne se déclenche pas. Pour autoriser l’événement NotInList à se déclencher, l’utilisateur ne doit pas dérouler la zone de liste modifiable.

Exemple

L'exemple suivant utilise l'événement NotInList pour ajouter un élément à une zone de liste déroulante.

Pour essayer cet exemple, créez une zone de liste déroulante appelée Colors (Couleurs) dans un formulaire. Affectez la valeur Oui à la propriété LimitToList de cette zone de liste déroulante. Pour remplir la zone de liste déroulante, définissez sa propriété RowSourceType en tant que liste de valeurs et fournissez une liste de valeurs séparées par des points-virgules comme paramètre de la propriété RowSource. Par exemple, vous pouvez fournir les valeurs suivantes comme paramètre pour cette propriété : Rouge ; Vert; Bleu.

Ensuite, ajoutez la procédure événementielle suivante au formulaire. Passez en mode Formulaire et entrez une nouvelle valeur dans l'espace réservé au texte de la zone de liste déroulante.

Remarque

L'exemple précédent ajoute un élément à une zone de liste modifiable indépendante. Dans ce cas, vous ajoutez une valeur à un champ de la source de données sous-jacente. Dans la plupart des cas, vous ne pouvez pas simplement ajouter un champ dans un nouvel enregistrement ; Selon la structure des données de la table, vous devrez probablement ajouter un ou plusieurs champs pour répondre aux exigences en matière de données. Par exemple, un nouvel enregistrement doit inclure des valeurs pour tous les champs comprenant la clé primaire. Si vous devez ajouter dynamiquement des éléments à une zone de liste déroulante liée, vous devez inviter l’utilisateur à entrer des données pour tous les champs requis, enregistrer le nouvel enregistrement, puis interroger à nouveau la zone de liste déroulante pour afficher la nouvelle valeur.

Private Sub Colors_NotInList(NewData As String, _ 
        Response As Integer) 
    Dim ctl As Control 
     
    ' Return Control object that points to combo box. 
    Set ctl = Me!Colors 
    ' Prompt user to verify they wish to add new value. 
    If MsgBox("Value is not in list. Add it?", _ 
         vbOKCancel) = vbOK Then 
        ' Set Response argument to indicate that data 
        ' is being added. 
        Response = acDataErrAdded 
        ' Add string in NewData argument to row source. 
        ctl.RowSource = ctl.RowSource & ";" & NewData 
    Else 
    ' If user chooses Cancel, suppress error message 
    ' and undo changes. 
        Response = acDataErrContinue 
        ctl.Undo 
    End If 
End Sub

L’exemple suivant montre comment utiliser l’événement NotInList pour ajouter un élément à une zone de liste modifiable liée.

Private Sub cboDept_NotInList(NewData As String, Response As Integer)
    Dim oRS As DAO.Recordset, i As Integer, sMsg As String
    Dim oRSClone As DAO.Recordset

    Response = acDataErrContinue

    If MsgBox("Add dept?", vbYesNo) = vbYes Then
        Set oRS = CurrentDb.OpenRecordset("tblDepartments", dbOpenDynaset)
        oRS.AddNew
        oRS.Fields(1) = NewData
        For i = 2 To oRS.Fields.Count - 1
            sMsg = "What do you want for " & oRS(i).Name
            oRS(i).Value = InputBox(sMsg, , oRS(i).DefaultValue)
        Next i
        oRS.Update
        cboDept = Null
        cboDept.Requery
        DoCmd.OpenTable "tblDepartments", acViewNormal, acReadOnly
        DoCmd.GoToRecord acDataTable, "tblDepartments", acLast
    End If
End Sub

L'exemple suivant montre comment ajouter un élément à une zone de liste modifiable liée.

Private Sub cboMainCategory_NotInList(NewData As String, Response As Integer)

    On Error GoTo Error_Handler
    Dim intAnswer As Integer
    intAnswer = MsgBox("""" & NewData & """ is not an approved category. " & vbcrlf _
        & "Do you want to add it now?" _ vbYesNo + vbQuestion, "Invalid Category")

    Select Case intAnswer
        Case vbYes
            DoCmd.SetWarnings False
            DoCmd.RunSQL "INSERT INTO tlkpCategoryNotInList (Category) "
                & _ "Select """ & NewData & """;"
            DoCmd.SetWarnings True
            Response = acDataErrAdded
        Case vbNo
            MsgBox "Please select an item from the list.", _
                vbExclamation + vbOKOnly, "Invalid Entry"
            Response = acDataErrContinue

    End Select

    Exit_Procedure:
        DoCmd.SetWarnings True
        Exit Sub

    Error_Handler:
        MsgBox Err.Number & ", " & Error Description
        Resume Exit_Procedure
        Resume

End Sub

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.