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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite 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 : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    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 : 76
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    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
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  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 : 76
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    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
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  4. #4
    Membre émérite 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 : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    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 : 76
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

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

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

    Bon week end
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  6. #6
    Membre émérite 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 : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

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

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

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