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:

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:

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
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
16
Affichages
626
Réponses
18
Affichages
1 K

Statistiques des forums

Discussions
314 628
Messages
2 111 333
Membres
111 103
dernier inscrit
Maxime@mar