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 :

Parcours d'une de liste à sélection multiple


Sujet :

VBA Access

  1. #1
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut Parcours d'une de liste à sélection multiple
    Bonjour à tous.
    Alors, je bloque depuis quelques jours sur le parcours d'une zone de liste à sélection multiple.
    J'explique : je veux que quand je sélectionne une ligne d'une zone de liste, les lignes correspondantes à l'enregistrement sélectionné soient sélectionnéées dans une autre zone de liste.
    Dans ma première zone de liste (à sélection unique), ma clé primaire est dans la colonne 0 et dans ma deuxième zone de liste (à sé lection multiple), ma clé primaire est en colonne 1. En fait, à un enregistrement de ma première zone de liste, correspondent un ou plusieurs enregistrements de ma deuxième zone de liste. Ce sont ces derniers qui doivent être sélectionnés sur click de ma première zone de liste.

    J'espère avoir été clair

    Donc mon raisonnement a été de parcourir la première zone de liste, pour savoir l'identifiant de quelle ligne était sélectionnée, puis de parcourir la seconde zone de liste et de sélectionner la ou les lignes correspondantes à l'identifant récupéré lors du premier parcours.
    Raisonnement peut-être compliqué, mais c'est tout ce à quoi je suis abouti après beaucoup beaucoup de tests avec différentes méthodes :
    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
    'on parcourt la première zone de liste
    Dim strChamps As String
    Dim entCurrLigne As Variant
    Dim numNote As Integer
     
    For Each entCurrLigne In Me.lstNotes.ItemsSelected
        If Me.lstNotes.Selected(entCurrLigne) Then
            numNote = Me.lstNotes.ItemData(Me.lstNotes.ListIndex)
        End If
    Next entCurrLigne
    'fin du test
     
    'on parcourt la deuxième zone de liste
    Dim strChamps2 As String
    Dim entCurrLigne2 As Variant
     
    For Each entCurrLigne2 In Me.lstMotif.ItemsSelected
        If Me.lstMotif.ItemData(Me.lstNotes.ListIndex) = numNote Then
            Me.lstMotif.Selected(entCurrLigne2) = True
        End If
    Next entCurrLigne2
    'fin du test
    Alors j'ai testé avec ListIndex, mais aussi avec Column(0,ligneEnCours), mais rien n'y fait.

    Je pense d'ailleurs qu'il y a des méthodes plus simple que parcourir les deux zones de liste.
    Enfin, j'espère que qu'un pourra me dépanner

  2. #2
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Bonjour,

    Le parcours de la première liste est inutile parce que l'objet reprend la valeur de la colonne liée correspondant à l'item cliqué.

    Pour la seconde liste, celle-ci pourrait être liée à la première (faire deux listes dépendantes). Lire ici

  3. #3
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Re,

    Pour selectionner des items d'une liste en fonction d'un choix dans une autre liste, tu peux assi utiliser ce code sur après MAJ de la liste 1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       Dim intcompteur As Integer, Item
            ' Boucle sur le nombre d'item de la liste 2
            For intcompteur = 0 To MaListe2.ListCount - 1
                ' annule la sélection si elle existe
                Me.MaListe2.Selected(intcompteur) = False
            If CInt(Me.MaListe2.ItemData(intcompteur)) = CInt(MaListe1) Then
                ' Sélectionne la ligne
                Me.MaListe2.Selected(intcompteur) = True
            End If
        Next

  4. #4
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Ok, je ne pensais pas qu'Access savait tout seul quelle ligne de la liste1 était déjà sélectionnée. Ca va mieux, tout de suite
    Pour ceux que ça intéresse, ma deuxième erreur a été de comparer deux chaines de caractères alors que c'étaient des nombres (souci résolu par la fonction CInt).
    Finalement, je n'ai pas eu besoin d'utiliser l'ItemData et j'ai donc supprimé sa déclaration au début. D'autre part, j'ai précisé à chaque fois la colonne et parfois la ligne à récupérer sinon, ben Access récupérait la première par défaut, or dans ma colonne 0, se trouvait un libellé, et le numéro (identifiant) se trouvait dans la colonne 1.

    Donc au final, mon code (que j'ai généralisé) donne ça :
    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
    Dim intcompteur As Integer
    Dim idColonne1 As Integer
    Dim idColonne2 As Integer
    ' colonne de la liste 1 où est positionné l'identifiant de la liste 2
    idColonne1 = 1
    ' colonne de la liste 2 où est positionné l'identifiant de la liste 2
    idColonne2 = 14
        ' Boucle sur le nombre d'item de la liste 2
        For intcompteur = 0 To maListe2.ListCount - 1
            ' annule la sélection si elle existe
            Me.maListe2.Selected(intcompteur) = False
        If CInt(Me.maListe2.Column(idColonne1, intcompteur)) = CInt(maListe1.Column(idColonne2)) Then
            ' Sélectionne la ligne
            Me.maListe2.Selected(intcompteur) = True
        End If
    Next
    Merci à toi Jeannot45
    Puisque j'ai un modo sous la main, on ne pourrait pas mettre ce code dans la FAQ, étant donné qu'il y a actuellement 4 ou 5 topics qui parlent de ce sujet dans la rubrique VBA Access mais aussi dans la rubrique IHM.
    Je pense que ça aiderait du monde ...

  5. #5
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Bravo,

    Idée judicieuse, j'en parle à qui de droit.

    Bon week end

  6. #6
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Merci, à toi aussi.
    Grâce à toi, c'est déjà une bonne chose de faite

  7. #7
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Salut, j'aimerais ajouter une petite fonctionnalité : le sélection correspondante est bien sélectionnée, mais si elle est en bas de la liste, on ne voit pas qu'elle l'est. Donc, j'aimerais que le focus soit donné à l'élément sélectionné de la zone de liste (par exemple, s'il est tout en bas, on se retrouve tout en bas de la zone de liste).
    Voilà, je ne sais pas si c'est faisable

  8. #8
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    D'autre part, autre souci, à un élément de ma liste 1 peuvent correspondre plusieurs éléments de la liste 2. Ils doivent donc être tous sélectionnés.
    Donc là aussi, dur dur ...

  9. #9
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Bonjour,

    Alors là, je ne comprends plus. Le code que je t'ai donné te permet de sélectionner plusieurs items dans une meme liste. Pour les voir, il ne faut pas oublier d'activer la propriété : "Multiple" de ta liste.

    Je te joins une base exemple (lance le formulaire3 et choisit KING dans la liste de gauche)

    Bonne journée

  10. #10
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Effectivement, ça marche sur ta base °_°
    Alors, je ne peux pas voir tes relations, mais moi, c'est un peu spécial : ma liste 1 représente une liste de notes et ma liste 2 est ma liste de motifs, or dans mes relations, j'ai fait en sorte qu'une note puisse avoir plusieurs motifs.
    Je te joins un screenshot, tu comprendras mieux

    Edit : je pense que ça vient de la requète de la propriété Contenu de ma liste 1, car quand j'exécute la requète, seule une note est affichée. Donc il es logique qu'Access ne puisse sélectionner les lignes correspondantes dans la liste 2.

  11. #11
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Regarde la source de la seconde liste et tu verras qu'un auteur peut écrire sous plusieurs "genre".
    C'est d'ailleurs pour cela que l'on a des doublons dans la liste

  12. #12
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Ouais, donc ça viendrait de ma requète :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [LibMotif], [NumMotif] FROM MOTIF;
    J'ai vu que tu avais utilisé des distinct et des inner join dans ta requète. Ca viendrait de là ?

  13. #13
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Non, je ne pense pas, d'autant plus que le Distinct n'a ps lieu d'être puisque nous avons dans l'exemple que je t'ai envoyé des doublons sur le genre du livre.

    Cependant, j'ai INNER JOIN dans la requete parce qu'il faut bien que je relie la table des Genres à la tables des Auteurs par la table des livres.

    Je ne sais pas comment sont reliées tes tables.

  14. #14
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Je t'ai fait un screen de mes relations (c'est vrai que c'est pas facile d'aider quelqu'un sans connaitre les tables sur lesquelles il travaille et leurs relations ).

  15. #15
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Je suppose que la liste1 affiche les notes et la liste2 affiche les motifs.
    Il est donc nécessaire de faire le lien entre les deux par la table Avoir

  16. #16
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Et bien, ce n'est pas ce que j'ai fait ?

  17. #17
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Sur ton modèle relationnel "Oui" Mais dans la source de ta seconde liste ?
    Regarde dans la base comment j'ai bâti la seconde liste

  18. #18
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Tu n'as pas de clé étrangère ?
    Et je ne vois pas les relations de tes tables

  19. #19
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Re

    Excuse moi, j'étais très occupé hier !

    La relation apparait dans la source de la requete (inner Join)
    De ton coté, il semblerait que ta liste2 n'ai pas de champ commun avec la liste1

    Si tu regardes ma liste Auteur, on y trouve le CodeAuteur. C'est sur ce CodeAuteur présent dans la seconde liste que je fais la sélection des élements concernés.

    Bonne journée.

  20. #20
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    Pas besoin de t'excuser pour ça, tout le monde a ses obligations
    Alors en bidouillant la requète de ma zone de liste 1, j'en arrive à afficher mes éléments, mais au lieu de m'afficher les différents éléments correspondants dans la liste 2, il me met dans la liste 1 une ligne pour chaque élément correspondant dans la liste 2. Du coup, je me retrouve avec des doublons (même si j'ai inclus un distinct dans ma requète).
    Alors du coup le problème est contourné. Les éléments correspondent bien, mais ce n'est pas ça que je voulais faire. Je voudrais qu'il n'y ait qu'un seul élément de chaque dans la liste 1. Pas un élément en fonction du nombre d'enregistrements correspondant dans la liste 2

    Une idée ?
    Si t'as pas compris (ce que je comprends vu que je m'embrouille moi-mêm en expliquant), je te mettrai ma base en PJ

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Focus sur une ligne d'une liste à sélection multiple
    Par sardaucar dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/05/2014, 10h55
  2. Réponses: 7
    Dernier message: 15/08/2012, 16h16
  3. récupérer les valeurs d'une zone de liste à sélection multiple
    Par garsflo dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 09/07/2009, 21h19
  4. Récupérer le texte d'une liste à sélection multiple
    Par alexandrebergercyr dans le forum IHM
    Réponses: 4
    Dernier message: 21/06/2007, 15h30

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