XL 2019 Molette Scroll sur ListBox

  • Initiateur de la discussion Initiateur de la discussion gg13
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gg13

XLDnaute Occasionnel
Bonjour,

Je commence un nouveau projet pour lequel je devrai utiliser des ListBox et ComboBox.
Ces listes seront longues et je voudrais utiliser le scroll de la molette plutôt que les ascenseurs.

Après renseignement sur le site j’ai voulu utiliser ce post :
Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulette)

Je galère depuis 2 jours et malgré plusieurs essais je n’arrive pas à intégrer ces différentes macros, plusieurs messages d’erreurs ….
Je ne comprends pas tout.
Si vous pouvez m’aider un peu je vous remercie d’avance.

Je joins le fichier exemple avec les listBox .

GG13
 

Pièces jointes

au final celle qui fonctionne le mieux sur ton fichier 11 c'est celle là
VB:
Public Sub releasePanes()
    Dim X&, Y, FrZ
    ' Application.ScreenUpdating = False
    LockWindowUpdate ActiveWindow.hwnd             'methode 2
    'If TypeName(ControlHooked) = "ComboBox" Then Exit Sub
    With ActiveWindow
        X = .SplitRow
        Y = .SplitColumn
        FrZ = .FreezePanes
        .FreezePanes = False
        If X > 0 Or Y > 0 Then
            .SplitRow = X
            .SplitColumn = Y
            .FreezePanes = FrZ
        End If
    End With
    LockWindowUpdate 0
    'Application.ScreenUpdating = True
End Sub
 
Pour info mon dernier fichier est dans la ressource, j'ai procédé à quelques simplifications mineures qui ne sont pas dans le code de ce fichier, mais ça ne change pas grand chose.

voila nos deux fichier fonctionnent avec les figés
Désolé mais ton fichier ne fonctionne pas avec les figés.

Le problème est qu'il faut faire quelque chose pour débloquer.
Dans le Post #398, sur activation des feuilles je fais une modif de Zoom et tout de suite, TOUTES les ListBoxes sont débloquées.

Dans ton fichier tu fais un releasePanes() lors du UnHook qui ne s'applique que si il y a eu un Control Hooké.
Donc quand j'ouvre le fichier et que je vais directement sur une ListBox Panes #2 à #4, ben rien ne se passe parce que rien n'a été débloqué.
Trace.gif


Ce problème n'a pas de solution en partant des évènements MouseMouve() puisqu'ils ne sont pas déclenchés. Il faut donc faire un déblocage à l'activation des feuilles qui n'est pas dans la "philosophie" du truc qui s'applique à ne gérer que les évènements MouseMouve().

De plus cette histoire d'erreur de l'espace montre qu'il y a quelque chose de plus profond dans le dysfonctionnement des ces ListBoxes. Mais si tu as une idée, essaie et vois si ça évite l'erreur.
 
re
Pour info mon dernier fichier est dans la ressource, j'ai procédé à quelques simplifications mineures qui ne sont pas dans le code de ce fichier, mais ça ne change pas grand chose.

Le problème est qu'il faut faire quelque chose pour débloquer.
Dans le Post #398, sur activation des feuilles je fais une modif de Zoom et tout de suite, TOUTES les ListBoxes sont débloquées.

Dans ton fichier tu fais un releasePanes() lors du UnHook qui ne s'applique que si il y a eu un Control Hooké.
Donc quand j'ouvre le fichier et que je vais directement sur une ListBox Panes #2 à #4, ben rien ne se passe parce que rien n'a été débloqué.Regarde la pièce jointe 1154623

Ce problème n'a pas de solution en partant des évènements MouseMouve() puisqu'ils ne sont pas déclenchés. Il faut donc faire un déblocage à l'activation des feuilles qui n'est pas dans la "philosophie" du truc qui s'applique à ne gérer que les évènements MouseMouve().

De plus cette histoire d'erreur de l'espace montre qu'il y a quelque chose de plus profond dans le dysfonctionnement des ces ListBoxes. Mais si tu as une idée, essaie et vois si ça évite l'erreur.
je te l'ai dis le faire a l'activate de la feuille la première fois
j'ai essayé sur le tien(rien que dans le activate de la feuille)
mais non il y a des ratés il le faut donc quand même au unhookmouse c'est dommage
ça aurait été parfait


démo du mien rien que dans le activate
demo.gif
 
et pour info chez moi c'est le tiens qui a des y a des ratés, y a des pâtés, y a des soufflés et des croutés.

et apres control 1 erreur gérée par le callnexthook sur plus de 10000coups de roulette
autant dire rien du tout
et encore j'ai arrêté a 10000 1 coup sur 100000 sur 1000tour seconde c'est du pipi de chat
EDIT/
Tu n'as tellement pas lu mes messages que tu ne sais pas que depuis le Post #390, où j'ai cerné le problème, un Scroll dans le Pane ou une modif de Zoom (plus simple) permet de "débloquer" ces ListBoxes.
je te jure devant dieux que je veux pas t'ennuyer mais ton #398 bloque chez moi après la premier liste scrollée je voudrais que tu sois là pour le voir
j'ai meme essayé d'aller sur la feuille 2 et revenir pour voir
donc ton fichier modèle 12 alias post 398
demo.gif
 
re
si ça peut aider
il s’avère que quand on ouvre le classeur("398")
si on touche rien que l'on va direct a une liste sans click(sans activation) et que l'on scroll
et qu'ensuite on a le malheur a la sortie de toucher une cellule(sectionner) ben c'est fini c'est bloqué et toute pas que l'une d'entre elle

pour ton erreur un simple on error résume next puisque ça se produit uniquement à la fermeture

il est fort possible que cette erreur est due au fait que ta fonction rectangle est appelée par la lowlevelmouseproc qui tourne extérieurement a vba (en mémoire)
du fait que ce soit pas les même address
et donc les donnée dans le tampon de l'adressof ne sont pas detruites
comme je disais quelques pages precedente les erreurs que tu a sont difficilement identifiable et je mettrais ma main (à tords ou à raison)au feu que c'est ça
 
Dernière édition:
pour ton erreur un simple on error résume next puisque ça se produit uniquement à la fermeture
Oui ça je l'ai fait mais ça n'est valable que pour un code donné et figé.

Si on modifie le code en ajoutant des traces par exemple ou un code qu'un utilisateur ajoutera sur le traitement de la ListBox ça va se planter ailleurs ! Donc c'est irrécupérable.
De plus même avec un On Error Resume Next, on sent bien qu'il y a un truc qui va pas car ça n'a AUCUNE RAISON de se planter en 50290 dans une fonction qui n'est pas en cours d"exécution. C'est un truc qui vient de profond et c'est très malsain.
 
et pour info chez moi c'est le tiens qui a des y a des ratés, y a des pâtés, y a des soufflés et des croutés.
Je te crois, évidemment si tu le dis. Donc encore une différence à gérer.
Perso, je laisse tomber ce truc. Pas de Scroll en ListBoxes sur Panes #2 à #4 .
Dommage mais on peut pas toujours récupérer les Bugs Excel.
 
donc fichier 13 ok je teste
et bien non ça ne fonctionne pas

maintenant ton fichier 11 c'est le tien je n'ai rien toucher aprt lancer dans le unhookmouse la releasepane et a l'activate de la feuille
j'ai ajouté cela dans le module de la feuille
1667828161226.png


maintenant dans le unhookmouse
1667828219682.png


et enfin ma fonction
1667828289944.png

j'ai bien sur ajouter la déclaration de l'api
VB:
Private Declare PtrSafe Function LockWindowUpdate Lib "user32" (ByVal hWndLock As LongPtr) As LongPtr

et bien résultat
demo.gif


et c'est ton fichier avec ta méthode
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour