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 :

récupérer les valeurs d'une liste à choix multiple dans une liste


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Mai 2012
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 219
    Points : 94
    Points
    94
    Par défaut récupérer les valeurs d'une liste à choix multiple dans une liste
    Bonjour à tous,

    Je travaille actuellement sur un module de liste à sélection multiple.
    J'ai une liste à choix multiple et je voudrais que après avoir sélectionné un élément de cette liste, un autre contrôle liste prenne comme Rowsource les éléments sélectionnés dans ma première liste.

    J'ai essayé comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim vSel As Variant, strSelection As String
     
    For Each vSel In Me.Liste1.ItemsSelected
        strSelection = strSelection & Me.Liste1.ItemData(vSel) & vbCrLf
    Next
    Me.Liste16.RowSource = strSelection
    Mais rien ne se passe (liste1 étant ma sélection multiple et liste16 mon contrôle liste ou devraient s'afficher les éléments sélectionnés.

    Merci d'avance pour toute aide apportée,

    Sardaucar

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour sardaucar,

    Le séparateur des valeurs d'une liste est le ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      For Each vSel In Me.Liste1.ItemsSelected
        strSelection = strSelection & Me.Liste1.ItemData(vSel) & ";"
     Next
     Me!Liste16.RowSource = Left$(strSelection, Len(strSelection) - 1)  'pour retirer le dernier ;

  3. #3
    Membre régulier
    Inscrit en
    Mai 2012
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 219
    Points : 94
    Points
    94
    Par défaut
    Bonjour et merci de ta réponse, malheureusement cela ne me sort toujours rien :/. Je me permet de te mettre mon code total sur l'évènement après maj du contrôle de liste déroulante qui me permet de sélectionner un élément de ma liste à choix multiple :

    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
    Private Sub Modifiable14_AfterUpdate()
    'Selection de la valeur via la liste déroulante
    Dim i As Long
    Dim i_save As Long
    Dim vSel As Variant
    Dim strSelection As String
    Dim strsql As String
     
    strsql = " Select T_personnes.ID_personnes, T_personnes.Nom_personnes, T_personnes.Prenom_personnes FROM T_personnes "
     
    For i = 1 To Me.Liste1.ListCount - 1  'parcours la liste multiple
        If (Me.Liste1.ItemData(i) = CStr(Nz(Me.Modifiable14, ""))) Then  's'il est identique à ce que je cherche
           i_save = i  'je repère la ligne
        End If
    Next
    Me.Liste1.Selected(i_save) = True  'en sortant je sélectionne la liste
     
    For Each vSel In Me.Liste1.ItemsSelected
     strSelection = strSelection & Me.Liste1.ItemData(vSel) & ";"
     Next
     Me.Liste16.RowSource = Left$(strSelection, Len(strSelection) - 1)" 'pour retirer le dernier ;
     
    End Sub
    Si tu savais ce qui pouvait clocher :/

  4. #4
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    La propriété Origine source de liste16 doit être Liste valeurs et non Table/Requête
    Sur la ligne Me.Liste16.RowSource = ... tu as un " en trop
    Helas

  5. #5
    Membre régulier
    Inscrit en
    Mai 2012
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 219
    Points : 94
    Points
    94
    Par défaut
    Avec ce changement rien ne se passe toujours :/ je me permets de joindre le formulaire concerné dans ce message, j'en perds la tête ^^'.TestImpraccdb.rar

    merci d'avance !

  6. #6
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Cette solution,
    Une table pour la sélection.
    TestImpraccdb.zip

  7. #7
    Membre régulier
    Inscrit en
    Mai 2012
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 219
    Points : 94
    Points
    94
    Par défaut
    Ta solution est élégante et marche à merveille ! Cependant je ne suis pas très à l'aise avec les syntaxes SQL en VBA, saurais-tu me dire comment je peux insérer, en plus de l'identifiant, le nom et prénom de la personne dans la table impr ?

    De même, ça aurai été super de pouvoir désélectionner (ce qui revient à supprimer donc) un enregistrement de cette table en double cliquant sur un élément de la liste qui affiche le resultat !

    Merci infiniment quoi qu'il en soit !

  8. #8
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Access est là pour t'aider, crée des requêtes et varie les modes d'affichage (mode Création - mode SQL 1ère icône )
    Je crée souvent mes requetes ainsi pour récupérer le code SQL sans erreurs.
    Dans l'exemple que je t'ai donné, si tu maintiens la touche CTRL enfoncé, tu peux désélectionner un élément en cliquant dessus.
    Helas

  9. #9
    Membre régulier
    Inscrit en
    Mai 2012
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 219
    Points : 94
    Points
    94
    Par défaut
    Décidément je ne suis pas doué pour le SQL

    Voici ce que j'ai mis pour insérer plusieurs champs dans la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     DoCmd.RunSQL "INSERT INTO T_selection (ID_personnes,Nom_Personnes,Prenom_personnes) _
    SELECT " & Me!Liste1.Column(0, vSel), Me!Liste1.Column(1, vSel), Me!Liste1.Column(2, vSel) & ";"
    Et voici le code pour la suppression d'un enregistrement sur double clic de la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Liste16_DblClick(Cancel As Integer)
    Dim itm As Variant
    Set itm = Me.Liste16.ItemSelected
     DoCmd.RunSQL "DELETE T_selection.* FROM T_selection WHERE ID_Personnes = Me.Liste16.itemData(itm)"
     Me.Recalc
    End Sub
    Bon autant dire qu'aucun des deux ne marche -_-

  10. #10
    Membre régulier
    Inscrit en
    Mai 2012
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 219
    Points : 94
    Points
    94
    Par défaut
    Re bonjour

    J'ai finalement réussi à faire marcher le code ! Je le mets ici pour les générations futures ! :

    Intégration dans une liste des valeurs sélectionnées dans une liste à sélection multiple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Liste1_Click()
     Dim vSel As Variant, strSelection As String
     
     DoCmd.RunSQL "DELETE T_selection.* FROM T_selection;"
     For Each vSel In Me.Liste1.ItemsSelected
     DoCmd.RunSQL "INSERT INTO T_selection (ID_personnes,Nom_personnes,Prenom_personnes) SELECT * FROM T_personnes WHERE ID_personnes = " & Me!Liste1.Column(0, vSel) & ";"
     Next
     Me.Liste16.Requery
     
    End Sub

    Dé sélection et suppression des valeurs à partir de la liste d'affichage :

    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
    Private Sub Liste16_DblClick(Cancel As Integer)
     
     Dim i As Long, i_save As Long
     For i = 1 To Me.Liste1.ListCount - 1
        If (Me.Liste1.ItemData(i) = CStr(Nz(Me.Liste16, ""))) Then
           i_save = i
        End If
     Next
     Me.Liste16.Requery
     Me.Liste1.Selected(i_save) = False
     
     DoCmd.RunSQL "DELETE T_selection.* FROM T_selection WHERE ID_Personnes=  " & CStr(Nz(Me.Liste16.Column(0), ""))
     
     Me.Recalc
     
    End Sub

    Merci à tous ceux qui m'ont mis sur la voie !

    Sardaucar

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/03/2014, 09h31
  2. [AC-2010] Récupérer valeurs liste choix multiple dans une requête
    Par kimai dans le forum VBA Access
    Réponses: 13
    Dernier message: 06/02/2013, 10h39
  3. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  4. Réponses: 2
    Dernier message: 03/03/2009, 17h10
  5. choix multiples dans une liste déroulante
    Par luffy2mars dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/01/2009, 16h34

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