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

patricktoulon

XLDnaute Barbatruc
chez moi
que ce soit en 64 ou vba7 ou vb6 les déclarations fonctionnent sur mon modèle
comme ca ceux qui sont en vba7.1 ca passe par win64
pour le coup comme je suis en vba7 j'ai modifié la condition en une double condition
comme ça je bénéficie du vba7


VB:
Option Explicit
#If Win64 Or VBA7 Then
    Declare PtrSafe Sub RtlMoveMemory Lib "kernel32" (ByVal Destination As LongPtr, ByVal Source As LongPtr, ByVal Length As LongPtr)
    Declare PtrSafe Function SetWindowsHookExA Lib "user32" (ByVal idHook As LongPtr, ByVal lpfn As LongPtr, ByVal hmod As LongPtr, ByVal dwThreadId As LongPtr) As LongPtr
    Declare PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As LongPtr, ByVal nCode As LongPtr, ByVal wParam As LongPtr, lParam As LongPtr) As LongPtr
    Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As LongPtr) As LongPtr
    Private Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hWnd As LongPtr, lpRect As RECT) As LongPtr
    Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPtr
    Private Declare PtrSafe Function WindowFromPoint Lib "user32" (ByVal xPoint As LongPtr, ByVal yPoint As LongPtr) As LongPtr
 #Else
    'Private Declare Sub RtlMoveMemory Lib "kernel32" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
    'Private Declare Function SetWindowsHookExA Lib "user32" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
    'Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
    'Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
    'Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
    'Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    'Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
#End If
teste avec cette nouvelle déclaration
 

Dudu2

XLDnaute Barbatruc
@Staple1600,

De retour après un bol d'air.

Ok, mais ce code ne plante pas chez toi, mais faut dire qu'il ne fait pas grand chose non plus.
Et le Hook code ne gère que le WM_MOUSEWHEEL et pas le WM_MOUSEMOVE donc ça limite les risques.
Faut cliquer dedans, ça scroll quand la souris sort de la zone. Bref, c'est pas vraiment top.

Je pense que si tu as du crash Excel direct, c'est qu'un truc détruit la mémoire et je ne vois encore que le Copymemory pour faire une inconvenance pareille.

A tout hasard, j'ai protégé un argument du Copymemory du code du Hook car VarPtr retourne un Long.
Avant:
VB:
CopyMemory VarPtr(udtlParamStuct), lParam, LenB(udtlParamStuct)
Après:
VB:
CopyMemory CLngPtr(VarPtr(udtlParamStuct)), lParam, LenB(udtlParamStuct)

J'ai un peu le sentiment que ça tourne autour de ça, mais...
 

Pièces jointes

  • VBA Scroll Souris en ListBox et ComboBox.xlsm
    80.2 KB · Affichages: 7

Usine à gaz

XLDnaute Barbatruc
Re-Dudu2 :
1667148988824.png

:)
 

Dudu2

XLDnaute Barbatruc
En 64bits, le Scroll est plus hésitant, je ne sais pas pourquoi.
D'ailleurs dans vos fichiers du #213, je vous recommande de modifier:
VB:
'Scroll step
Private Const ScrollStep = 3
J'avais mis à 1 pour Win64 mais c'est pas assez rapide.
 

Dudu2

XLDnaute Barbatruc
En fait je soupçonne qu'Office 2016 64 bits a des trucs pas clairs qui ont été corrigés en 365.
Raison pour la quelle je plante et pas vous.

Chez moi le Scroll devient hésitant puis se bloque puis ça crash. Saturation de Mouse Wheel ?
En tous cas, je vous le dis, c'est un problème Office 2016 (2010 ? 2013 ? 2019 ?) et il va falloir le trouver et le contourner pour tous ceux qui sont en 64 Bits et pas en 365.

Sur la ComboBox ActiveX c'est pareil chez moi et chez vous, donc là-dessus c'est cohérent 64 bits toutes versions (pas cohérent 32 bits évidemment) et je devrais pouvoir corriger.
 

Statistiques des forums

Discussions
315 098
Messages
2 116 191
Membres
112 679
dernier inscrit
Yupanki