IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

VBA Access Discussion :

Enregistrements des valeurs d'une liste à selection multiple


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut Enregistrements des valeurs d'une liste à selection multiple
    Bonjour à tous
    Je tiens à remercier d'avance les personnes qui accorderont du temps et se pencheront sur mon problème.
    Et je tiens également à signaler que je ne suis pas une experte en VBA, et que j'utilise depuis seulement une semaine microsoft access (version 2003), mais je me débrouille comme je peux .

    J'ai créé une base de données comportant une table nommée "Guide Recueil", ainsi que son formulaire. A l'intérieur de celui-ci, j'ai créé une liste à sélection multiple (nommée Serv)
    Jusqu'ici je n'ai rencontré aucun soucis, en revanche, pour enregistrer les valeurs sélectionnées dans ma table, ca se complexifie...
    J'ai regardé divers tutoriels et fora, et tenté quelques codes VBA.
    Je suis parvenue à enregistrer les valeurs mais de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub btnListe_Click()
     
    Dim I As Variant
    For Each I In Me.Serv.ItemsSelected
    DoCmd.RunSQL "INSERT INTO [Guide Recueil] (trait1) SELECT '" & Me.Serv.Column(0, I) & "' AS Expr1;"
    Me!Serv.Selected(I) = False
    Next I
    End Sub
    Or ici, la requête entraine autant d'enregistrements que de valeurs sélectionnées et, dans un seul et même champ.
    Par ailleurs, ça n'enregistre que les données de la liste à sélection multiple, et pas le reste du formulaire complété.

    Ce que j'aurais aimé c'est que pour un même individu (un même enregistrement), j'ai par exemple choix1 enregistré dans le champ trait1, choix2 dans le champ trait2, si pas de choix3 alors le champ trait3 est vide etc. jusqu'à trait5 (car 5choix possibles)
    Et par ailleurs, que le reste des champs complétés (Nom, Lieu etc) s'enregistrent en même temps.

    J'espère que je me suis faite comprendre, excusez-moi si mes explications ne sont pas très claires.

  2. #2
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Je crois que si tu mettais ta base en pièce jointe, on pourrait mieux te comprendre et t'aider.

  3. #3
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Séphirée,
    mumen a raison, avec un exemple on verrait mieux. Mais de ce que je comprend ton formulaire n'est pas lié à ta table, cela se fait avec "Source" dans les propriétés du formulaire en mode création. Si c'est bien ce que tu veux, un formulaire non-lié il te faudra codé l'enregistrement de tous les champs. Pour ta liste multiple tu devras aussi changer le code, dans l'exemple suivant je suppose que choix1 est numérique si c'est du texte faudra ajouter "choix1".
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Private Sub btnListe_Click()
     
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim strSQL As String
        Dim I As Variant
     
        strSQL = "SELECT TaTable.* FROM TaTable;"
     
        Set db = CurrentDb
        Set rst = db.OpenRecordset(strSQL)
        rst.AddNew
            rst("Le nom du champ") = Me.[Le champ correspondant]
            For Each I In Me.Serv.ItemsSelected
            Select Case Me.Serv.Column(0, I)
                Case choix1
                    rst("trait1") = choix1
                Case choix2
                    rst("trait2") = choix2
            End Select
            Me!Serv.Selected(I) = False
            Next I
        rst.Update
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    End Sub

  4. #4
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Malheureusement, j'effectue un stage en centre hospitalier, je ne peux communiquer les informations.
    Merci beaucoup pour votre aide, je vous réponds dès demain, une fois que j'aurais accès à access à mon lieu de stage, mais oui en effet il semble que le formulaire ne soit pas lié à la table, pourtant je l'ai créé à l'aide de l'assistant en spécifiant la table correspondante, mais apparemment soit le formulaire enregistrait les informations sans les choix multiples, soit les choix s'enregistraient et non pas le reste des informations...
    Je vous tiens au courant dès demain de ce qu'il en est.
    Encore merci pour votre aide!

  5. #5
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Bonjour , j'ai tenté votre code, mais malheureusement on me renvoie l'erreur de compilation suivante : type défini par l'utilisateur non défini

  6. #6
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Séphirée,
    C'est parce que j'avais mis choix1 etc il faut que tu remplaces par ta liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For Each I In Me.Serv.ItemsSelected
            Select Case Me.Serv
                Case Me.Serv.Column(0,1)
                    rst("trait1") = Me.Serv.Column(0,1)
                Case Me.Serv.Column(0,2)
                    rst("trait2") = Me.Serv.Column(0,2)
                Case etc...
            End Select
            Me!Serv.Selected(I) = False
            Next I
    De plus mon code suppose que ton formulaire n'est pas lié à une table sinon tu vas créer des doublons.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    j'ai déjà auparavant mis les choix de ma liste, puis réécris comme dans votre second code, mais access me renvoie toujours à la même erreur de compilation

  8. #8
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    J'ai tenté le code sur une table (TableEtude) et un formulaire créés à la "va-vite" :

    avec pour liste à choix multiple : "multiple" du champ "multiple"
    avec pour choix : a b ou c
    avec les champs "listea" "listeb" "listec" qui enregistrent respectivement les réponses a b et c
    et le bouton "btnListe" pour activer la macro

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private Sub btnListe_Click()
     
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim strSQL As String
        Dim I As Variant
     
        strSQL = "SELECT [TableEtude].* FROM [TableEtude];"
     
        Set db = CurrentDb
        Set rst = db.OpenRecordset(strSQL)
        rst.AddNew
            rst("multiple") = Me.[multiple]
            For Each I In Me.Serv.ItemsSelected
            Select Case Me.Serv.Column(0, I)
                Case Me.Serv.Column(0, 1)
                    rst("listea") = Me.Serv.Column(0, 1)
                Case Me.Serv.Column(0, 2)
                    rst("listeb") = Me.Serv.Column(0, 2)
                Case Me.Serv.Column(0, 3)
                    rst("listec") = Me.Serv.Column(0, 3)
            End Select
            Me!Serv.Selected(I) = False
            Next I
        rst.Update
        rst.Close
        Set rst = Nothing
        Set db = Nothing
     
    End Sub

  9. #9
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Et est-ce que ça fonctionne?

  10. #10
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Malheureusement non :/, rien ne s'effectue.

    > "type défini par l'utilisateur non défini"

  11. #11
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    il me met en fond gris l'élément suivant après erreur d'exécution : "db As DAO.Database"

  12. #12
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Je viens de tester et je n'ai pas de problème. Petite correction dans le code:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub Commande4_Click()
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
    Dim I As Variant
     
    strSQL = "SELECT [TableEtude].* FROM [TableEtude];"
     
    Set db = CurrentDb
    Set rst = db.OpenRecordset(strSQL)
    rst.AddNew
    rst("multiple") = Me.[multiple]
    For Each I In Me.Serv.ItemsSelected
    Select Case Me.Serv.Column(0, I)
    Case Me.Serv.Column(0, 0)
    rst("listea") = Me.Serv.Column(0, 0)
    Case Me.Serv.Column(0, 1)
    rst("listeb") = Me.Serv.Column(0, 1)
    Case Me.Serv.Column(0, 2)
    rst("listec") = Me.Serv.Column(0, 2)
    End Select
    Me!Serv.Selected(I) = False
    Next I
    rst.Update
    rst.Close
    Set rst = Nothing
    Set db = Nothing
     
    End Sub
    Est-ce que tu as les bonnes références:
    Images attachées Images attachées  

  13. #13
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    j'ai modifié en mettant commande4, bien que j'ai renommé en btnListe et la macro semble ne pas "bloquer", en revanche, il en résulte rien.
    La table n'affiche pas les choix sélectionnés, les cases restent vides, alors je ne sais plus quoi faire, j'avoue être agacée de ne pas trouver où cela cloche

    EDIT :
    J'ai refait la table, recréé les variables, et refait le code et je retombe toujours sur le même problème : type défini par l'utilisateur non défini
    avec en jaune Private Sub Commande20_Click(), et grisé db As DAO.Database


    concernant la référence j'ai :

    Visual basic for applications
    Microsoft access 10.0 object library
    Microsoft activex data objects 2.1 library

    de sélectionnés

  14. #14
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    ALORS , donc effectivement le soucis venait des références, le code à présent s'exécute, mais n'enregistre que les choix multiples et pas le reste du formulaire, je vais donc regardé comme dit précédemment je crois dans les propriétés du formulaire et sa source, j'espère qu'après cela il n'y aura plus aucun soucis,
    en tout cas je vous remercie encore pour votre aide et votre patience (j'ai peur aussi de passer pour une gourde...)

    EDIT : mission réussie !!! merci beaucoup beaucoup monsieur, vous m'avez été d'une aide très très précieuse lol, en tout cas je suis désolée si j'ai mis du temps à saisir les problèmes ... en tout cas merci de votre patience, du soutien et de votre aide !!!

  15. #15
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Séphirée,
    concernant la référence j'ai :

    Visual basic for applications
    Microsoft access 10.0 object library
    Microsoft activex data objects 2.1 library

    de sélectionnés
    Je crois que la référence manquante est "Microsoft Office 14.0 Access database engine Object Library". Ta version peut-être différente 10.0 selon la version d'office.
    Bonne journée

  16. #16
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    j'ai peur aussi de passer pour une gourde
    Tout le monde est ignorant avant d'apprendre. Si tu aimes apprendre, sois à l'aise avec ça et n'oublies pas que si le ridicule ne tue pas, la peur du ridicule si.

  17. #17
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Séphirée,
    Tout le monde est ignorant avant d'apprendre. Si tu aimes apprendre, sois à l'aise avec ça et n'oublies pas que si le ridicule ne tue pas, la peur du ridicule si.
    de mumen, tout à fait vrai.
    Ça m'a fait plaisirs, bonne continuation

  18. #18
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    merci robert1957, j'ai effectivement fait les modifications
    mumen : merci pour ta réponse , maintenant je vais chercher à comprendre le code (assez complexe) et je reviendrai vers vous si je ne comprends pas certains termes ... j'aime comprendre ce que j'exécute

  19. #19
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    un problème demeure ... si jamais je souhaite dans le formulaire prendre un individu déjà complété et lui ajouter ses choix multiples, ceux-ci sont enregistrés sur une nouvelle ligne et uniquement eux
    en revanche si j'ouvre le formulaire d'une ligne vierge que j'entre toutes les informations, tout s'enregistre sans soucis ...
    exemple :
    je prends dans le formulaire l'individu 1

    ID______CODE____Listea____Listeb etc
    1________MR_____(vide)____(vide) etc

    si je selectionne plusieurs choix (1 et 2 par exemple), ma table donne alors :

    ID______CODE____Listea____Listeb etc
    (vide)___(vide)_____1________2___etc
    1________MR_____(vide)____(vide) etc

    alors que j'aimerais obtenir :
    ID______CODE____Listea____Listeb etc
    1________MR_______1________2__ etc

    en revanche si j'entre sur un formulaire vierge, aucun soucis, exemple individu 2 code PF choix 1 et 2 la table résultante est :
    ID______CODE____Listea____Listeb etc
    2________PF_______1________2__ etc

  20. #20
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    j'ai tenté de remplacer rst.addnew par rst.edit mais cette fois-ci ça n'enregistre que sur la première ligne de ma table

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/11/2009, 13h01
  2. Réponses: 2
    Dernier message: 23/10/2009, 10h16
  3. [SQL] Problème de récupération des valeurs d'une liste multiple en php
    Par BOLARD dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/05/2006, 00h29
  4. [ACCESS] - Requete issue d'une liste à selection multiple
    Par fredhali2000 dans le forum Access
    Réponses: 4
    Dernier message: 22/02/2006, 15h33
  5. [HTML] faire des tabulation dans une liste <select>
    Par renofx1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/01/2006, 23h36

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