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 :

Problème Listview Access [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Par défaut Problème Listview Access
    Bonjour au forum,
    J’ai un problème avec le composant listview sur une appli Acces avec VBA.
    - Ma listview est dans un l’onglet1 d’un formulaire
    - l’onglet2 du formulaire me donne le détail d’un listitems sélectionné

    A l’ouverture du formulaire la listview apparaît avec un positionnement de ligne sélectionnée sur la 1ère ligne de la listview
    Un double-clic (code1 ci-dessous) me fait apparaître la vue correspondante sur l’onglet2
    Un bouton sur mon détail vue (code2) produit un retour sur la listview.
    Problème :
    Lorsqu’il y a beaucoup de ligne sur la listview et que j’utilise l’ascenseur vertical pour sélectionner ma ligne lors du retour à la listview la ligne est bien sélectionnée mais pas dans la partie visible de la listview.
    Problème connexe :
    J’utilise des combox pour effectuer des tris afin d’alimenter ma listview ; lorque je visualise un enregistrement via le double-clic je souhaite à partir de 2 boutons sur le formulaire de détail accéder à la fiche suivante ou à la fiche précédente. Comment faire pour que l’action du bouton prenne en compte les fiches qui figurent dans la listview et non celle de la table d’origine ?

    Merci pour votre aide.
    RH49

  2. #2
    Membre Expert
    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
    Par défaut
    Bonjour,

    pour le premier problème, regarde du côté de la propriété EnsureVisible pour le listitem sélectionné. Cette méthode doit permettre de placer l'item sélectionné dans la partie visible de la listview.
    Pour le second, tous les listitems ont un index; aller au précédent correspond à diminuer l'index du listitem courant et pour aller au suivant en l'augmentant.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Par défaut listview proprièté ensurevisible
    Bonjour,
    Grace à Ilank j'ai pu résoudre la 1ère partie de mon problème en intégrant le code suivant sur le bouton retour à la listview :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim i As Integer                
    For i = 1 To ListView3.ListItems.Count
    ListView3.ListItems(i).EnsureVisible
    'affiche l'item sélectionné dans la 1ère ligne de la partie visible de la listview
    If ListView3.SelectedItem.index = ListView3.GetFirstVisible.index Then Exit For
    Next i
    Je cherche toujours pour la 2ème partie fiche précédente ou suivante d'une listview avec critère de sélection.

    A+
    usac49

  4. #4
    Membre Expert
    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
    Par défaut
    Bonjour,

    L'élément courant de la listView est le SelectedItem. Puisque chaque listItem dispose d'un index (le premier index =1), pour récupérer les éléments précédents et suivants il suffit de diminuer et d'augmenter l'index quand c'est possible.

    Exemple : J'appelle la listView ListView et les deux boutons permettant de se déplacer dans la listView cmdMovePrevious (Aller au précédent) et cmdMoveNext (aller au suivant).
    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
     
     
    Private Sub Form_Load()
    'Rend disponible le bouton précédent si l'item courant n'est pas le premier
     cmdMovePrevious.Enabled = (ListView.SelectedItem.Index > 1)
    'Rend disonible le bouton suivant si l'item courant n'est pas le dernier
     cmdMoveNext.Enabled=(ListView.SelectedItem.Index < ListView.ListItems.Count)
     
    Private Sub cmdMovePrevious()
    'Sélectionne l'item précédent
       ListView.ListItems(ListView.SelectedItem.Index-1).Selected=True
    'Assure sa visibilité
       ListView.SelectedItem.EnsureVisible
    'Rend le bouton suivant disponible
       If Not cmdMoveNext.Enabled Then cmdMoveNext.Enabled=True
    'Donne le focus au bouton suivant si l'item est le premier
       If ListView.SelectedItem.Index = 1 Then cmdMoveNext.SetFocus
    'Rend disponible le bouton précédent si l'item n'est pas le premier
       cmdMovePrevious.Enabled=(ListView.SelectedItem.Index > 1)   
    End sub
     
    Private Sub cmdMoveNext()
    'Sélectionne l'item suivant dans la listview
     ListView.ListItems(ListView.SelectedItem.Index + 1).Selected = True
    'Assure sa visibilité
     ListView.SelectedItem.EnsureVisible
    'Rend disponible le bouton cmdMovePrevious
     If Not cmdMovePrevious.Enabled Then cmdMovePrevious.Enabled = True
    'Donne le focus au bouton cmdMovePrevious sur le nouvel item est le dernier
     If ListView.SelectedItem.Index = ListView.ListItems.Count Then cmdMovePrevious.SetFocus
    'Rend disponible le bouton suivant si l'item n'est pas le dernier
     cmdMoveNext.Enabled = (ListView.SelectedItem.Index < ListView.ListItems.Count)
    End sub

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Par défaut
    Merci à ilank.
    Compte du code fourni par Ilank je devrais pouvoir l'adapter à mon cas.
    Merci à tous.

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

Discussions similaires

  1. Problème base ACCESS sous DELPHI
    Par colorid dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/02/2006, 15h24
  2. Problème Automation Access --> Excel
    Par boubouh dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/01/2006, 09h34
  3. Problème sur Access 2
    Par gouyou31 dans le forum Access
    Réponses: 3
    Dernier message: 13/12/2005, 17h14
  4. [Visual C++] Problème ADO Access violation
    Par irnbru dans le forum MFC
    Réponses: 2
    Dernier message: 24/10/2005, 11h46
  5. [ODBC] Problème entre access et ODBC
    Par StephCal dans le forum Access
    Réponses: 4
    Dernier message: 09/07/2003, 16h47

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