Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : avril 2009
    Messages : 36
    Points : 44
    Points
    44

    Par défaut [VBA] - Lire un champs multivalué dans un formulaire

    Bonjour à tous,

    Depuis Access 2007, il est possible de créer, dans une table, un champs avec une liste déroulante à sélection multiple. Le cas d'utilisation décrit ici part du principe qu'un tel champs a été mis en oeuvre puis inclus dans un formulaire et que nous devons récupérer sa valeur pour un traitement en VBA.

    Dans le cas d'un ComboBox classique sa valeur sera récupérée avec la code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test()
        'Affiche le contenu du champs
        Debug.Print Me.MonComboBox.Value
    End Sub
    Avec un ComboBox multivalué, la valeur est stockée dans une table et affichée sous la forme d'un tableau. Elle ne pourra donc pas être lue avec la méthode indiquée ci dessus.
    Pour y parvenir nous devons interpréter le contenu du champs comme un "Array()" tel que ci-deesous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub Test()
        'Déclaration des valiables utilisées
        Dim MonTableau, i, MaValeur
     
        'Affectation du contenu de mon ComboBox à la variable 'MonTableau'
        MonTableau = Me.MonComboBox.Value
     
        'Lecture du contenu du tableau et concaténation des valeurs dans la variable 'MaValeur'
        For i = 0 To UBound(MonTableau)
            MaValeur = MaValeur & MonTableau(i) & ";"
        Next
     
        'On retire le ';' qui restera à la fin de la chaine
        MaValeur = Left(MaValeur, Len(MaValeur) - 1)
     
        'Affichage du résultat
        Debug.Print MaValeur
    End Sub
    Voilà, j'espère que ce bout de code aidera quelqu'un ...

    Bonne journée à tous !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : avril 2009
    Messages : 36
    Points : 44
    Points
    44

    Par défaut

    En complément, une autre solution peut éventuellement être utilisée si le cas le permet.

    Nous partirons du principe que le formulaire dans lequel se trouve la champs multivalué dont nous devons récupérer la valeur contient également l'ID de l'enregistrement dans la table ou se trouve le champs en question.
    Dans ce cas, la fonction DLookup nous aidera de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Test()
        'Déclaration de la variable utilisé
        Dim MaValeur
        'Selon l’événement utilisé pour lire cette valeur, il peut être utile d'actualiser les données
        Me.Refresh
        'On récupère enfin notre valeur directement dans la table
        MaValeur = DLookup("NomDuChampsMultivalué", "NomDeLaTable", "NomDuChampsID = " & Me.EnrID)
        'Et on l'affiche
        Debug.Print MaValeur
    End Sub

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Developpeur VBA, C# et VB.Net =]
    Inscrit en
    juillet 2007
    Messages
    13 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Developpeur VBA, C# et VB.Net =]
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 13 490
    Points : 30 636
    Points
    30 636

    Par défaut

    Salut,

    un tutoriel est également disponible ici :
    https://warin.developpez.com/access/multivalue/
    Cycle de vie d'un bon programme :
    1/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016 et Access 2019

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

Discussions similaires

  1. [AC-2013] Lire un champ Multivalué dans un controle
    Par daerlnaxe dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/12/2014, 09h42
  2. [AC-2013] Lire un champ d'un sous formulaire en VBA
    Par Ludwik dans le forum VBA Access
    Réponses: 6
    Dernier message: 11/10/2014, 18h06
  3. Réponses: 1
    Dernier message: 25/01/2012, 12h11
  4. Réponses: 6
    Dernier message: 19/11/2010, 18h27
  5. Réponses: 5
    Dernier message: 31/03/2007, 22h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo