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

IHM Discussion :

zone de liste, ligne cliquée ou non


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut zone de liste, ligne cliquée ou non
    Bonjour,

    J'ai une curiosité dont je n'arrive pas à trouver l'origine sous Access 2007. Vous trouverez ci-dessous la totalité du code sur la copie du formulaire que j'ai réduit au minimum dans la crainte que d'autres lignes interfèrent.
    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
     
    Option Compare Database
     
    Private Sub Form_Load()
     
    Liste25.Visible = True ' salariés
     
    End Sub
     
     
     
    Private Sub Liste25_Click()
     
    Dim intI As Long
    intI = Liste25.ListIndex
    Rem MsgBox (intI)
     
    If Liste25.Selected(intI) Then
        MsgBox ("gagné")
    Else
        MsgBox ("perdu")
    End If
     
    End Sub
    Systématiquement, lorsque je clique sur une ligne, j'ai le message "perdu".

    Dans la base "DemoListBoxA2000", ouverte avec Access 2007, le code est identique, mais j'ai bien "gagné" ou "perdu" selon que la ligne est ou non en inverse video.

    Dans les deux cas, la propriété "liste multiple" est à "simple" et les propriétés sont identiques.

    Si quelqu'un pouvait m'aider...

    Merci d'avance,

    JYV

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    je pense que la réponse "perdu" est normal. Tu captes l'événement Click, qui a lieu dès que tu as appuyé puis relâché un bouton de la souris à l'intérieur du contrôle, indépendamment du fait que le click corresponde à une sélection. Deuxième chose, l'événement est normalement levé avant la mise à jour de l'état selected de l'item, en clair, dans l'événement Click tu vas récupérer l'état Selected de la ligne avant le click et non suite au click.
    Essaie en plaçant le même code sur l'événement Apres MAJ(AfterUpdate)

  3. #3
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    j'ai testé l'ordre des événements dans une zone de liste :
    BeforeUpdate > AfterUpdate > Click

    Le code fonctionne si on le met dans l'événement "Sur Clic" d'un bouton.
    Je pense qu'il faut se résoudre au fait que Selected(lRow) n'est pas exploitable dans les procédures événementielles "Après MAJ" et "Sur clic" de la zone de liste, quand Sélection Multiple = Aucune.

    D'un autre côté, ça n'a aucune importance.
    En mode Sélection Multiple = Aucune, l'élément sélectionné est forcément ListIndex, lorsque ListIndex est différent de -1.

    A+

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour, ledzepII
    Citation Envoyé par jyvaut75
    Dans les deux cas, la propriété "liste multiple" est à "simple" et les propriétés sont identiques
    Pour les événements tu as raison, je me suis basé sur le contrôle listview qui lève l'événement Click indépendamment d'un item sélectionné, mais même dans ce cas la séquence des événements est comme tu l'indiques.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Merci pour les réponses, mais cela reste incompréhensible
    Dans la base Access "DemolistboxA2000" ouverte avec Access2007, j'ai un formulaire, le code complet est celui-ci
    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
    Option Compare Database
    Option Explicit
    Dim varItm As Variant
     
    Private Sub Command7_Click()
      For Each varItm In Me!List0.ItemsSelected
        Me.List0.Selected(varItm) = False
      Next varItm
     
    End Sub
     
     
     
    Private Sub List0_BeforeUpdate(Cancel As Integer)
     
    End Sub
     
    Private Sub List0_Click()
     
    Dim inti As Long
    inti = List0.ListIndex
    MsgBox (inti)
     
    If List0.Selected(inti) Then
        MsgBox ("gagné")
    Else
        MsgBox ("perdu")
    End If
     
    End Sub
    Par rapport à l'original, j'ai ajouté les MsgBox, et là, "ça marche". Lorsque je clique et que je viens de sélecter, j'ai bien "gagné" et inversement.

    La seule différence que je vois est que dans la base démo, la source est une requête directe (Select etc...), alors que dans ma liste elle fait appel à une requête stockée en tant que telle dans la base dont le code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT Qry_SalariesNomCroissantDfin3122999.[Tbl_salarié.N°] AS Expr1, Qry_SalariesNomCroissantDfin3122999.Nom, Qry_SalariesNomCroissantDfin3122999.Prenom
    FROM Qry_SalariesNomCroissantDfin3122999;
    J'avoue que je ne vois plus d'autre solution. En effet, en important copiant/collant de la base démo la liste et sa table source dans mon formulaire contenant ma liste "litigieuse", la liste en provenance de la base démo donne bien "gagné" ou "perdu".

    Cordialement,

    JYV

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Citation Envoyé par ilank Voir le message
    Bonjour, ledzepII
    Citation Envoyé par jyvaut75 Voir le message
    Dans les deux cas, la propriété "liste multiple" est à "simple" et les propriétés sont identiques.
    Bonjour Ilank

    Oui Je suis passé au travers.

    jyvaut75,
    Est-ce que la liste à des en-têtes de colonnes ?
    Dans ce cas Selected(lRow) et ListIndex sont décalés d'une unité.
    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
    Private Sub Liste25_Click()
     
    Dim lIdx As Long, lSelIdx As Long
     
    lIdx = Liste25.ListIndex
    lSelIdx = lIdx
    If Me.Liste25.ColumnHeads Then lSelIdx = lSelIdx + 1
     
    If Liste25.Selected(lSelIdx) Then
        MsgBox ("gagné")
    Else
        MsgBox ("perdu")
    End If
     
    End Sub
    A+

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Bravo
    Merci, ce que c'est que d'être programmeur amateur...

    Je ne savais pas qu'avec des en-têtes de colonne dans ma liste, Selected(lRow) et ListIndex avaient des valeurs différentes. C'était bien la solution.

    Encore merci.

    Cordialement,

    JYV

Discussions similaires

  1. [XL-MAC 2011] Remplissage Zone de liste déroulante sans doublons & non vides via VBA
    Par SuperKiwi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/03/2014, 20h29
  2. Réponses: 2
    Dernier message: 17/04/2007, 23h35
  3. Réponses: 5
    Dernier message: 19/05/2006, 16h11
  4. Ligne vide dans control zone de liste
    Par sunvialley dans le forum Access
    Réponses: 13
    Dernier message: 10/05/2006, 17h26
  5. Réponses: 6
    Dernier message: 24/01/2005, 11h06

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