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

Macros et VBA Excel Discussion :

Listbox et déplacement flèches


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut Listbox et déplacement flèches
    Bonjour à tous,

    Cela faisait un moment que je n'avais pas posté, mais là j'ai un problème qui m'a pourtant l'air idiot :

    J'ai une listbox et je souhaite me déplacer avec les flèches de direction (haut et bas uniquement).
    Aucun problème pour les déplacements simples, par contre, lorsque je suis en haut de la liste et que l'utilisateur utilise la flèche du haut, cela doit sélectionner le dernier élément de la liste (et inversement avec la flèche du bas pour le dernier élément).

    J'ai donc le code suivant (construction de la liste comprise, mon userform est très simple, il ne contient que la listbox. La listbox contient les 26 lettres de l'alphabet) :

    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
     
    Option Explicit
     
    Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        With Me.ListBox1
            If KeyCode = 40 Then ''''''Flèche bas
                If .ListIndex = .ListCount - 1 Then .ListIndex = 0 'Si élément sélectionné est le dernier alors sélectionner le premier
            ElseIf KeyCode = 38 Then ''''''Flèche haut
                If .ListIndex = 0 Then .ListIndex = .ListCount - 1 'Si élément sélectionné est le premier alors sélectionner le dernier
            End If
        End With
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim sh As Worksheet
        Dim i As Long
     
        Set sh = ThisWorkbook.Sheets(1)
     
        With Me.ListBox1
            .Clear
            For i = 1 To sh.Range("A" & Rows.Count).End(xlUp).Row
                .AddItem (sh.Cells(i, 1).Value)
            Next i
        End With
    End Sub
    Le soucis, c'est que lorsque j'appuie sur la flèche du haut par exemple, quand je suis au premier élément de la liste, c'est que cela sélectionnes l'avant-dernier élément (et quand j'utilise la flèche du bas depuis le dernier, j'arrive au deuxième élément).
    Je pense avoir saisi pourquoi : le déplacement par les flèches n'est effectué qu'une fois la sélection de l'élément faite, ce qui provoque un double déplacement.

    Ma question est donc : comment puis résoudre cela? Ou si vous avez une solution pour passer du premier au dernier et inversement, avec seulement la flèche du haut et celle du bas.

    J'espère avoir été clair, merci d'avance !

  2. #2
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    J'ai trouvé la solution. En fait, le plus efficace pour inhiber le double changement est de d'annuler keycode :

    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 ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        With Me.ListBox1
            If KeyCode = 40 Then ''''''Flèche bas
                If .ListIndex = .ListCount - 1 Then
                    .ListIndex = 0 'Si élément sélectionné est le dernier alors sélectionner le premier
                    KeyCode = 0
                End If
            ElseIf KeyCode = 38 Then ''''''Flèche haut
                If .ListIndex = 0 Then
                    .ListIndex = .ListCount - 1 'Si élément sélectionné est le premier alors sélectionner le dernier
                    KeyCode = 0
                End If
            End If
        End With
    End Sub

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    Il y a aussi la solution d'utiliser l'evenement Keyup au lieu de l'evenement KeyDown.

  4. #4
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Re,

    Testé également, mais sans utiliser keycode cela provoquait le même problème (double déplacement)

  5. #5
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Pas chez moi. As-tu supprime le code dans KeyDown ?

  6. #6
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    J'ai fait beaucoup plus simple, dans le code j'ai changé down en up (voilà le code complet mais le problème est strictement identique, seul moyen d'éviter ça est de mettre keycode=0 après déplacement) :

    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
     
    Option Explicit
     
    Private Sub ListBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        With Me.ListBox1
            If KeyCode = 40 Then ''''''Flèche bas
                If .ListIndex = .ListCount - 1 Then .ListIndex = 0 'Si élément sélectionné est le dernier alors sélectionner le premier
            ElseIf KeyCode = 38 Then ''''''Flèche haut
                If .ListIndex = 0 Then .ListIndex = .ListCount - 1 'Si élément sélectionné est le premier alors sélectionner le dernier
            End If
        End With
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim sh As Worksheet
        Dim i As Long
     
        Set sh = ThisWorkbook.Sheets(1)
     
        With Me.ListBox1
            .Clear
            For i = 1 To sh.Range("A" & Rows.Count).End(xlUp).Row
                .AddItem (sh.Cells(i, 1).Value)
            Next i
        End With
    End Sub
    De plus, l'utilisation de keyup à la place de keydown n'est pas souhaité, car si l'utilisateur reste appuyé sur une touche, le défilement doit se poursuivre.

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

Discussions similaires

  1. [AC-2003] Défilement vertical listBox par déplacement souris
    Par dev197 dans le forum IHM
    Réponses: 0
    Dernier message: 01/04/2010, 11h03
  2. Relier 2 listBox avec des flèches
    Par le_bono dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/10/2009, 16h04
  3. Réponses: 2
    Dernier message: 15/01/2008, 12h08
  4. Réponses: 11
    Dernier message: 07/01/2008, 17h20
  5. Déplacement de la fenetre avec des flèches
    Par MayOL69bg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 03/05/2007, 23h09

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