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 :

Utilisation Evenement clic sur ListView [AC-2000]


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur Électromécanicien
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Points : 59
    Points
    59
    Par défaut Utilisation Evenement clic sur ListView
    bonjour,
    je travaille sur access 2000 sous XP SP3
    j'ai créé et peuplé la lisView.
    je veux utiliser l'événement clic sur colonne comme ci dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
     
     
    ' ListView1 == Nom de ma ListView
    ' ici se trouve mon code sans problème.
    End Sub

    mais access refuse et retourne le message suivant:

    Erreur de compilation:
    La déclaration de la procédure ne correspond pas à la description de l'événement ou de la procédure de même nom

    c'est quoi le prototype de cette sub de ColumnClick ?
    Faut il introduire une référence spéciale pour cela ?

    Je vous remercie de votre aide.

  2. #2
    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,

    Essaie de cette manière (ColumnHeader de type Object).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As Object)
    Dim lvColH As MSComctlLib.ColumnHeader 
     
    Set lvColH = ColumnHeader
     
    ' Utiliser lvColH en lieu et place de ColumnHeader
     
    ' ListView1 == Nom de ma ListView
    ' ici se trouve mon code sans problème.
    End Sub
    A+

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur Électromécanicien
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Points : 59
    Points
    59
    Par défaut
    Bonjour ,
    Je vous remercie de votre aide, c'est résolu pour ceci, mais un autre problème est apparu avec l'événement Click de la ListView.
    j'utilise : " Microsoft ListView Control, version 6.0 "
    je vous donne en premier le code de l'événement Click puis dans un second temps, le code que j'ai utilisé pour le peuplement de la Listview

    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 MaListView_Click()
    'MaListView == le nom de la Listview dans le formulaire   
    ' lblMsg == le nom d'un control label dans le formulaire  
     
    Me.lblMsg.Visible = True
    If MaListView.SelectedItems.Count <> 0 Then
        Me.lblMsg.Caption = Me.MaListView.SelectedItems(0).SubItems(1).Text
    End If
    '########################################################################################
    'je voudrais récupérer, par exemple, le texte de la deuxième colonne de la ligne sélectionnée
    'Quant il arrive à la condition du if, il retourne l'erreur : Erreur d'exécution N° 438
    ' Propriété ou méthode non gérée par cet objet.
    ' retourne la même erreur même quand j'enlève le if et le end if
    '############################################################################
    End Sub
    Pour le remplissage de la ListView, j'ai pris la table client de la BD Comptoir.
    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 Form_Load()
    Me.lblMsg.Visible = False ' un control label nomé lblMsg
     
    Dim strNomSrce As String 'Nom de la table ou de la requête qui remplira la ListView
    Dim strNomChamp As Variant 'Noms du tableau des champs de strNomSrce
    Dim LVperso As Control
     strNomSrce = "Clients" 'BD comptoir
     strNomChamp = VBA.Array("Nom", "Société", "Contact", _
                      "Fonction", "Adresse", "Ville", _
                      "Région")
    Set LVperso = Me.MaListView ' MaListView==nom de la Listview dans le formulaire
    Call RemplirListView(strNomChamp, strNomSrce, LVperso)
        Me.MaListView.FullRowSelect = True
     
    End Sub
    voici la sub RemplirListView, si elle peut servir à quelqu'un;

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    Public Sub RemplirListView(strTabloChamps, strNomSrce As Variant, LVperso As Control)
    Dim rstLV As Recordset  'Variable de Recordset
    Dim strSQL As String    'Variable tableau pour la source de données
    Dim lNbEnregistr As Long    'Variable compteur du nombre de lignes
    Dim iNbColonne As Integer   'Nombre colonne comptage dans la listView à partir de zéro
    Dim iNbLigne As Integer     'Nombre ligne comptage dans la listView à partir de un
    Dim vText As Variant  ' valeur des différents champs du rst
    Dim strSQLtmp As String
    Dim strElementTmp As String
    Dim i As Integer
     
    On Error GoTo Gestion_Erreur
    'Debug.Print "strTabloChamps(0) == " & strTabloChamps(0)
     'Construction de l'instruction SQL source de la ListView
     
    For i = LBound(strTabloChamps) To UBound(strTabloChamps)
        strSQLtmp = strSQLtmp & " " & IIf(i <> UBound(strTabloChamps), strTabloChamps(i) & "," & " ", strTabloChamps(i))
    Next i
    strSQL = "select " & strSQLtmp & " from " & strNomSrce
    'Debug.Print "strSQLtmp == " & strSQLtmp
    'Debug.Print "strSQL == " & strSQL
     
     
     Set rstLV = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
     ' Définition des En-Têtes de colonnes (Un par colonne)
     rstLV.MoveLast
     rstLV.MoveFirst
     
     'Vidange de la ListView
     LVperso.ListItems.Clear
     LVperso.ColumnHeaders.Clear
     
      For iNbColonne = 0 To rstLV.Fields.Count - 1
       LVperso.ColumnHeaders.Add , , rstLV.Fields(iNbColonne).Name, LVperso.Width / rstLV.Fields.Count '1000
       'Debug.Print rstLV.Fields(iNbColonne).Name
      Next iNbColonne
    '   Debug.Print "__________________________________________________________"
    '  ' Définition du nombre d'enregistrements
      lNbEnregistr = rstLV.RecordCount
     
      ' Apparement, on doit remplir d'abord la première colonne.
      For iNbLigne = 1 To lNbEnregistr
        vText = Nz(rstLV.Fields(0).Value, "")
        LVperso.ListItems.Add iNbLigne, , vText
        rstLV.MoveNext
     Next iNbLigne
     rstLV.MoveFirst
     
      For iNbColonne = 1 To rstLV.Fields.Count - 1
       'Debug.Print lNbEnregistr
        For iNbLigne = 1 To lNbEnregistr
            vText = Nz(rstLV.Fields(iNbColonne).Value, "")
            LVperso.ListItems(iNbLigne).ListSubItems.Add iNbColonne, , vText
            rstLV.MoveNext
        Next iNbLigne
        rstLV.MoveFirst
     Next iNbColonne
     
    LVperso.View = lvwReport 'Spécifie l'affichage en mode Détails
    LVperso.GridLines = True
     
     
    Sortir:
        Exit Sub
     
    Gestion_Erreur:
        MsgBox "l'erreur numéro " & Err.Number & " ie : " & Err.Description & " s'est produite !!!"
        Resume Sortir
     
    End Sub
    je vous remercie.

  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,
    la proriété SelectedItems n'existe pas dans le contrôle ListView. Le SelectedItem ne représente qu'un seul ListItem. Il faut parcourir la liste pour récupérer les items sélectionnés, ceux dont la propriété Selected est à True.

  5. #5
    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,

    voici un exemple de 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
    Private Sub MaListView_Click()
    'MaListView == le nom de la Listview dans le formulaire
    ' lblMsg == le nom d'un control label dans le formulaire
    Dim oListView As MSComctlLib.ListView
    Dim oListItem As MSComctlLib.ListItem
     
    Set oListView = Me.MaListView.Object
    Set oListItem = oListView.SelectedItem
     
    Me.lblMsg.Visible = True
     
    ' Texte 2e colonne - en passant par SubItems
    Me.lblMsg.Caption = oListItem.SubItems(1)
     
    ' Texte 2e colonne - en passant par ListSubItems
    Me.lblMsg.Caption = oListItem.ListSubItems(1).Text
     
    End Sub
    A+

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur Électromécanicien
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Points : 59
    Points
    59
    Par défaut
    bonjour,
    ça marche, je vous remercie de votre aide.
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub MaListView_Click()
         Me.lblMsg.Visible = True
         Dim k As Integer
         k = 1
         Dim i As Integer
         For i = 1 To MaListView.ListItems.Count
            If MaListView.ListItems(i).Selected = True Then _
            MsgBox MaListView.ListItems(i).ListSubItems(k).Text
        Next
    End Sub

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur Électromécanicien
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Points : 59
    Points
    59
    Par défaut
    re bonjour,
    merci LedZeppII.
    je viens de tester le code que vous m'avez remis.Il marche et je vous suis reconnaissant.
    j'ai cherché dans MSDN (visual studio 6) mais je crois que c'est une ancienne version.
    et il n'y a pas moyen de trouver des déclaration de type "MSComctlLib.ListView"

  8. #8
    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
    MSComctlLib est le nom de la bibliothèque tel qu'il est vu dans le projet VBA.
    Dans l'éditeur visual basic, si tu appuie sur F2 (explorateur d'objets), tu dois trouver MSComctlLib dans la liste des bibliothèques.

    On peut déclarer un objet en mentionnant le nom de la bibliotèque, mais ça n'est pas obligatoire.

    A+

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur Électromécanicien
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Points : 59
    Points
    59
    Par défaut
    Re bonjour,
    je m'excuse d'insister. j'ai fait comme vous m'avez expliquer mais le système me renvoie "Éléments introuvables", pourtant votre code compile et marche.

  10. #10
    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
    Et si tu fais une recherche sur ListView dans <Toutes Bibliothèques> ?
    L'éditeur Visual Basic devrait trouver la classe ListView dans la bibliothèque MSComctlLib.

    Quand je parlais de liste des bibliothèques, je pensais à la liste déroulante qui commence avec <Toutes Bibliothèques>.

    A+

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur Électromécanicien
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Points : 59
    Points
    59
    Par défaut
    Ouis, elle y est bien la "ListView" et avec tous ses membres.
    merci de votre patience.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/08/2009, 14h41
  2. Réponses: 13
    Dernier message: 10/09/2007, 09h56
  3. Evenement MouseMove sur Listview
    Par anikeh dans le forum Access
    Réponses: 10
    Dernier message: 19/12/2005, 10h09
  4. [c#] Evenements clavier sur listview
    Par mikyfpc dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/11/2005, 12h35
  5. capter l'evenement clic sur une cellule d'un string grid
    Par lasconic dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2003, 10h51

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