Comment récupérer les éléments sélectionnés dans une zone de liste à sélection multiple sous forme de chaîne délimitée par des virgules dans Microsoft Access

Cet article s’applique à un fichier de base de données Microsoft Access (.mdb ou .accdb) et à un fichier de projet Microsoft Access (.adp).

Modéré : nécessite des compétences de base en macro, en codage et en interopérabilité.

Résumé

Cet article explique comment récupérer des éléments sélectionnés à partir d’une zone de liste à sélection multiple, puis stocker les éléments sélectionnés sous la forme d’une chaîne délimitée par des virgules dans Microsoft Access.

Informations supplémentaires

Dans Microsoft Access, la valeur de la propriété MultiSelect de la zone de liste dans un formulaire ou dans un état détermine si la zone de liste est une zone de liste à sélection unique ou une zone de liste à sélection multiple. Dans une zone de liste à sélection multiple, vous pouvez sélectionner plusieurs éléments de liste à la fois.

Vous pouvez utiliser la propriété Value de la zone de liste pour récupérer l’élément sélectionné dans la zone de liste. Toutefois, lorsque vous utilisez une zone de liste à sélection multiple et que vous essayez de récupérer les éléments sélectionnés à l’aide de la propriété Value, la propriété Value renvoie null.

Vous pouvez récupérer les éléments sélectionnés dans une zone de liste à sélection multiple, puis stocker les éléments sélectionnés sous forme de chaîne délimitée par des virgules par programme. Pour cela, procédez comme suit :

  1. Démarrez Microsoft Access.

  2. Ouvrez l’exemple de base de données Northwind.

  3. Dans la section Objets de la fenêtre Base de données, cliquez sur Formulaires.

    Note Dans Access 2007, cliquez sur Création de formulaire dans le groupe Formulaires sous l’onglet Créer .

  4. Dans le volet droit, double-cliquez sur Créer un formulaire en mode Création.

    Note Dans Access 2007, ignorez cette étape.

  5. Ajoutez les contrôles suivants au formulaire, puis définissez les propriétés des contrôles comme spécifié :

    List Box
    ----------------------------------------------------
    Name : NamesList
    Row Source Type : Table/Query
    Row Source : SELECT First Name FROM Employees
    Multi Select : Extended
    Width : 3.5"
    Height : 0.75"
    
    Text Box
    -----------------------
    Name : mySelections
    Width : 3.5"
    Height : 0.25"
    
    Command Button
    ----------------------------------
    Name : testmultiselect
    Caption : Display Selected Items
    Width : 1.375"
    Height : 0.3"
    
    Command Button
    ----------------------
    Name : ClrList
    Caption : Clear List
    Width : 1.375"
    Height : 0.3"
    
  6. Dans le menu Affichage, cliquez sur Code.

    Note Dans Access 2007, cliquez sur Afficher le code dans le groupe Outils de l’onglet Création .

  7. Collez le code suivant dans le Rédacteur Visual Basic :

Option Compare Database
Option Explicit

Private Sub Form_Current()
    Dim oItem As Variant
    Dim bFound As Boolean
    Dim sTemp As String
    Dim sValue As String
    Dim sChar As String
    Dim iCount As Integer
    Dim iListItemsCount As Integer

sTemp = Nz(Me!mySelections.Value, " ")
    iListItemsCount = 0
    bFound = False
    iCount = 0

Call clearListBox

For iCount = 1 To Len(sTemp) + 1
    sChar = Mid(sTemp, iCount, 1)
        If StrComp(sChar, ",") = 0 Or iCount = Len(sTemp) + 1 Then
            bFound = False
            Do
                If StrComp(Trim(Me!NamesList.ItemData(iListItemsCount)), Trim(sValue)) = 0 Then
                    Me!NamesList.Selected(iListItemsCount) = True
                    bFound = True
                End If
                iListItemsCount = iListItemsCount + 1
            Loop Until bFound = True Or iListItemsCount = Me!NamesList.ListCount
            sValue = ""
        Else
            sValue = sValue & sChar
        End If
    Next iCount
End Sub

Private Sub clearListBox()
    Dim iCount As Integer

For iCount = 0 To Me!NamesList.ListCount
        Me!NamesList.Selected(iCount) = False
    Next iCount
End Sub

Private Sub testmultiselect_Click()
    Dim oItem As Variant
    Dim sTemp As String
    Dim iCount As Integer

iCount = 0

If Me!NamesList.ItemsSelected.Count <> 0 Then
        For Each oItem In Me!NamesList.ItemsSelected
            If iCount = 0 Then
                sTemp = sTemp & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            Else
                sTemp = sTemp & "," & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            End If
        Next oItem
    Else
        MsgBox "Nothing was selected from the list", vbInformation
        Exit Sub  'Nothing was selected
    End If

Me!mySelections.Value = sTemp
End Sub

Private Sub clrList_Click()
    Call clearListBox
    Me!mySelections.Value = Null
End Sub

  1. Fermez Visual Basic Editor.

  2. Enregistrez le formulaire au format Form1.

  3. Fermez le formulaire.

  4. Ouvrez le formulaire Form1 en mode Formulaire :

    1. Dans la section Objets de la fenêtre Base de données , cliquez sur Formulaires.

      Note Dans Access 2007, dans le volet de navigation, cliquez sur le groupe Formulaires .

    2. Dans le volet droit, cliquez avec le bouton droit sur Form1, puis cliquez sur Ouvrir.

      Note Dans Access 2007, cliquez avec le bouton droit sur Form1, puis cliquez sur Ouvrir.

  5. Sélectionnez plusieurs éléments dans la zone de liste. Pour ce faire, cliquez sur un élément dans la zone de liste, maintenez la touche Ctrl enfoncée, puis cliquez sur d’autres éléments dans la zone de liste.

  6. Cliquez sur Afficher les éléments sélectionnés.

Les éléments sélectionnés dans la zone de liste à sélection multiple sont affichés sous la forme d’une chaîne délimitée par des virgules dans la zone de texte.

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.