Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - ListBox item sélectionné au hasard

Dudu2

XLDnaute Barbatruc
Bonjour,

J'ai un ListBox dans un UserForm que je charge par Me.ListBox.List = Table.

A chaque fois j'ai un item quelque part au hasard dans la ListBox qui est sélectionné et je n'arrive pas à m'en défaire. C'est très énervant !
Me.ListBox.ListIndex = -1 n'y fait rien.
Me.ListBox.Selected(0) = True n'y fait rien non plus.

Je ne peux pas mettre de fichier car le petit fichier de test que j'ai préparé n'a pas ce problème.

Si je place un MsgBox Me.ListBox.ListIndex (qui affiche -1) juste après le chargement de la ListBox, ce problème disparait !!! Encore un bug à la noix.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne connais pas ListItem. ListIndex, oui, si elle est à sélection simple.
À selections multiples votre seconde instruction sélectionnerait précisément la 1ère ligne au lieu de les déselectionner toutes.
 

Dudu2

XLDnaute Barbatruc
C'est dû au fait que l'affichage du UserForm et de la ListBox sont déclenchés par un évènement double-clic sur la feuille par Sub Worksheet_BeforeDoubleClick().
Si ce même affichage est fait par un bouton, tout va bien.

Mais d'une part je n'arrive à reproduire avec un petit fichier de test et d'autre part je ne trouve pas de moyen de contourner le problème à part un Me.ListBox.ListIndex = -1 asynchrone déclenché par Application.OnTime Now qui efface cette sélection et donc provoque un effet visuel rapide parasite.
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour Dudu2,Bernard
ListItem(s) me fait penser a Une ListView !
ou alors une Boucle sur les Lignes de la ListBox
soit un truc du genre (non testé)
VB:
With ListBox1
For i = 0 To .ListCount - 1
     If   .Selected(i) = True Then  .Selected(i) = False
Next
End With
ou donner le Focus a un autre control !
jean marie
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
J'avais déjà vu il me semble un problème avec une ListtBox qui prenait à son compte le second relâchement du double clic ayant déclenché l'affichage de l'UserForm si le curseur était dessus à ce moment là.
 

Dudu2

XLDnaute Barbatruc
Voici un fichier de test.
Il faut double-cliquer dans la feuille pour faire apparaître la ListBox.
Parfois le problème se pose, parfois non. Il faut faire de multiples essais.

La remise à False des Selected ne fonctionne pas car je pense que c'est un problème du double-clic dont le dernier clic vient sélectionner apostériori dans la ListBox.
 

Pièces jointes

  • Classeur2.xlsm
    51.7 KB · Affichages: 5

Dudu2

XLDnaute Barbatruc
@Dranreb, correct !
Une solution consiste à laisser passer l'orage en déclenchant le UserForm1.Show avec un petit délai.
Mais je ne sais pas faire un Application.Ontime Now + x où x est < 1 seconde.
Car 1 seconde de délai ça fait mou comme temps de réponse.
 

Dranreb

XLDnaute Barbatruc
Notez que si la sélection d'un ligne par la suite n'est pas à prévoir, la solution est simple: il suffit de mettre à False la propriété Enabled de la ListBox
Si, Application.Ontime Now tout simplement.
 

Dudu2

XLDnaute Barbatruc
Ou encore une solution plus simple avec un Application.OnTime Now + TimeValue("00:00:01") non pas sur le UserForm.Show mais sur le ListBox.Enabled = True (sur l'idée de @Dranreb).

De cette manière il n'y a pas de latence sur l'affichage du UserForm. Seulement sur la possibilité de faire une sélection dans la ListBox (ou d'intercepter les touches), mais ça se ressent peu.

Je pense que je vais adopter cette méthode pour sa simplicité.
 

Pièces jointes

  • Classeur2b.xlsm
    55.1 KB · Affichages: 4

Discussions similaires

Réponses
18
Affichages
642
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…