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.
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.
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.
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.
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à.
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.
Cà fait bien ce que je disais quand on double clic au milieu de la feuille, là où s'affiche l'userForm: la ligne affichée à l'endroit du curseur se retrouve sélectionnée.
@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.
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.
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é.