XL 2019 Molette Scroll sur ListBox

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

  • NBA1.3.xlsm
    37.6 KB · Affichages: 11

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour gg13

Je t'ai mis en application le scroll mis en ligne par notre BrunoM45 (que je salue ... J'espère que la température de son cerveau a baissé depuis hier soir... 🤣 ) pour la ListBox (Base_List), charge pour toi de reproduire pour le reste.
Bonne après-midi
@+ Eric c
 

Pièces jointes

  • NBA1.3.xlsm
    41.7 KB · Affichages: 21
Dernière édition:

gg13

XLDnaute Occasionnel
Bonsoir,
Merci pour cette réponse.
Désolé je n'ai pas pu répondre plus tôt.

A cette ligne de la macro erreur sur le mot Function.
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long


Erreur de compilation avec comme message :
Le code contenu dans ce projet doit être mis à jour pour pouvoir être utilisé sur les systèmes 64 bits. Vérifiez et mettez à jour les instructions Declare puis marquez-les avec l’attribut PtrSafe.

Mon PC est un 64 bits, je ne sais pas comment rendre cette macro compatible.
Je pense que si c’est possible ce doit être assez compliqué.

Peut-être un XLdnaute connait la méthode ?????
Eric.C merci pour cette aide

Gg13
 

gg13

XLDnaute Occasionnel
Bonjour,
Toutes les déclarations passent avec cette modif, mais autre blocage sur la ligne ci-dessous
après clic sur la zone de liste

erreur de compilation incompatibilité de type

Sub Hook_Mouse()
If hhkLowLevelMouse < 1 Then hhkLowLevelMouse = SetWindowsHookEx(WH_MOUSE_LL, AddressOf LowLevelMouseProc, _
GetWindowLong(FindWindow("ThunderDFrame", ObjUSF.Caption), GWL_HINSTANCE), 0)

EricC , encore un grand merci si tu sais la solution, je ne connais pas du tout cette fonction.

GG13
 

Eric C

XLDnaute Barbatruc
Re le fil

@gg13 - Désolé mais trop pointu pour le petit joueur que je suis. Il va falloir attendre les grosses pointures.
Tout au long du post de référence, il y a des indications sur les utilisateurs de XL 64bits. A voir et surtout à lire.

Eric
 
Dernière édition:

gg13

XLDnaute Occasionnel
Encore GG13
Ce que je ne comprends pas c'est que ce programme du site (joint) fonctionne en 64 bits .Je ne sais pas trouver la difference.
J'ai essayé sans succés de l'adapter.
Merci encore
GG13
 

Pièces jointes

  • MouseWheelHook_v2_64bit.xlsm
    38.7 KB · Affichages: 5

gg13

XLDnaute Occasionnel
Bonjour,
Problème résolu et fonctionne sans bug.
Je joins la structure du fichier pour ceux qui sont intéressés par cette routine très utile.
Merci à ceux qui ont créé le fichier de base très complexe.
GG13
 

Pièces jointes

  • XLD - Scroll Mouse 64bit.xlsm
    45.4 KB · Affichages: 29

Dudu2

XLDnaute Barbatruc
Bonjour la liste,

Cette histoire de Scroll en ListBox est complexe, bien plus que le Scroll en ComboBox.
Je vais donc faire ma proposition originale et j'aimerais que tu fasses le test si tu veux bien avec le fichier joint, juste pour voir comment ça se passe chez toi.
Merci !

Edit: A noter qu'avec ce fichier, pour démarrer le Scroll, il n'est pas nécessaire de cliquer dans la ListBox. Mais il y a un peu plus de code (un module dédié) pour détecter si le curseur est sur la ListBox.

Edit: Fichier supprimé, voir plus bas.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Fichier simplifié pour la détection Curseur sur ListBox uniquement et pas un code généraliste sur des Objects quelconques.

@Usine à gaz, merci de ton retour. Prends plutôt ce fichier simplifié (un peu plus court) sur la partie indiquée. Je supprime le fichier précédent.

Edit: Fichier supprimé, voir plus bas.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Bonjour la liste,

Le code que je propose ici est basé sur le fait que le Hooking, une fois lancé sur la ListBox, sait déterminer (avec la fonction MouseIsOverListBox) si le curseur est toujours sur l'objet Hooké ou pas pour continuer ou arrêter le Hooking.

Ça implique de comparer la position du curseur par rapport à la position et la surface de la ListBox.
C'est cette partie qui est un peu délicate et je l'ai mise à jour avec mes connaissances les plus récentes concernant les Marges des UserForms sur différentes configurations Windows & Office.
La fonction MouseIsOverListBox a un peu grossi.

Je suis donc passé à la vitesse supérieure pour:
- Faire fonctionner le Scroll dans une ListBox Control ActiveX (voir fichier),
- Gérer les positions / surfaces des ListBoxes Control de UserForm placées dans des Frames ou des MultiPages,
- Gérer positions / surfaces des ListBoxes Control de UserForm en prenant en compte les bordures des UserForms de différentes configurations Windows & Office.
 

Pièces jointes

  • VBA Scroll Souris en ListBox.xlsm
    69 KB · Affichages: 23
Dernière édition:

gg13

XLDnaute Occasionnel
Bonjour ,
Dudu2, merci pour ces modifications qui fonctionnent très bien pour moi.
Utiliser le scroll sans clic sur la listBox est pratique.
Pas assez de connaissances VBA pour moi pour comprendre le tout.
Je laisse les "doués" du forum t'aider à améliorer le code.
Merci à tous et bonne semaine.
GG13
 

Statistiques des forums

Discussions
315 085
Messages
2 116 074
Membres
112 650
dernier inscrit
badi44