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: 10

Dudu2

XLDnaute Barbatruc
Ok, ben je suis content que tu aies une idée du pourquoi
1667250154816.gif
. N'en parle surtout pas, y en a qui écoutent aux portes
1667250205009.gif
.
 

Dudu2

XLDnaute Barbatruc
Mais pour trouver pourquoi, après une modif de code et quelques Scrolls le compilateur génère une erreur de compilation (pas d'exécution), alors la !

Edit: Erreur qui ne survient pas si on ferme le classeur (en l'enregistrant pour garder la modif de code) et le ré-ouvre ensuite pour faire des Scrolls.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
je pense que dans ta méthode il y a une fonction(api) qui n'est pas arrêtée je ne sais la quelle
mais c'est comme toute les fonction api qui font appel a d'autres fonction EN ADRESSOF
et bien des que tu change de fenêtre donc de handle ben c'est le crash puisque ce n'est pas l'addresse de la fonction

c'est particulier l'addressof il faut bien le maîtriser
l'exemple le plus fréquent c'est settimer
c'est le seul cas ou j'accepte la gestion d'erreur car il n'y a pas d'autre moyen
on error resume next 'ET C'EST TOUT TERMINE)
est surtout ne pas traiter l'erreur du genre:
if errr.number =blablabla then
car là aussi tu fait appel au stack d'erreur (allez on change d'adresse encore)
ET EN PLUS COMME ELLE EST exécutée EN ADDRESSOF L'ERREUR N'EST PAS RELEVEE
en fait tu charge un max ton stack d'erreur au bout d'un moment sachant que ton looping tourne a quelque 1000 tours par secondes imagine combien tu le charge
bien bien évidement c'est soit le whitescreen qui de toute facon bloque tout (obligé de tuer la tache excel)
soit la fermeture brutale sans avertissement ou quoi que ce soit pour te prévenir
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Ce dont tu parles relève de l'exécution. Moi je chope une erreur de compilation qui est incompréhensible !

Scénario:
  1. Ouvir le classeur de Scroll
  2. Faire une modif quelconque quelque part dans le code
    Exemple: Module1 / Sub a() / MsgBox "xxx" -> MsgBox "yyy"
  3. Faire des Scrolls intensifs (ou pas selon) dans la ListBox1
  4. Erreur de compilation sur ListBox1 = <Variable objet ou variable de bloc With non définie>
    et le classeur se ferme.
1667253290947.png

Ça se crash alors qu'on n'est même pas, préalablement à la modif du code, allé dans le code du Scroll !
 

Dudu2

XLDnaute Barbatruc
Je suis assez désappointé que tous ces tests et essais pendant 4 jours se terminent sur un problème venu de l'espace. Je reprendrai peut-être plus tard mais j'ai de l'applicatif à développer pour quelqu'un.
Bonne soirée à tous
1667254131391.gif
 

patricktoulon

XLDnaute Barbatruc
re
a ben c'est ça le développement ; tres souvent on est désappointé car de toute les chose a prévoir c'est celle que l'on a pas prévu qui nous emboucane
et parfois ça fait des journées de casse tête en perspective jusque qu'au moment ou la lumière s'allume ;)
 

patricktoulon

XLDnaute Barbatruc
bon ben ce matin et frais dispos comme un gardon

coquin de sort !! j'ai tout repris à zéro et testé sur un userform

vous voulez de l'universel?!!

  1. sans setfocus et getfocus
  2. sans windowfrompoint
  3. sans getwindowrect
  4. sans getparent
  5. sans getactivewindow

les seules api utilisées sont celles du hooking et GetCursorPos
  1. RtlMoveMemory Lib
  2. SetWindowsHookExA
  3. CallNextHookEx
  4. UnhookWindowsHookEx
  5. getcursorpos

et pour faire plaisir a @Dudu2 j'ai utilisé l'event move des controls

ça vous intéresse ?

demo.gif
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
bon ben ce matin et frais dispos comme un gardon

coquin de sort !! j'ai tout repris à zéro et testé sur un userform

vous voulez de l'universel?!!

  1. sans setfocus et getfocus
  2. sans windowfrompoint
  3. sans getwindowrect
  4. sans getparent
  5. sans getactivewindow

les seules api utilisées sont celles du hooking et GetCursorPos
  1. RtlMoveMemory Lib
  2. SetWindowsHookExA
  3. CallNextHookEx
  4. UnhookWindowsHookEx
  5. getcursorpos

et pour faire plaisir a @Dudu2 j'ai utilisé l'event move des controls

ça vous intéresse ?
Chalut oui, oui et oui
:)
 

patricktoulon

XLDnaute Barbatruc
ce soir en rentrant je fait aussi pour les controls sur feuilles et je vous donne un exemplaire

la seule approximation qui peut être un peu juste(quelque pixels en trop ou en moins sur le Bottom )

c'est le listrows* x pour les comboboxs qui peut varier selon le font.name et font.size et font.bold

et encore là j'ai un moyen de le résoudre et sans api


et je rappelle que je travaille sur ComboBox , ListBox , Frame
 

Gégé-45550

XLDnaute Accro
ce soir en rentrant je fait aussi pour les controls sur feuilles et je vous donne un exemplaire

la seule approximation qui peut être un peu juste(quelque pixels en trop ou en moins sur le Bottom )

c'est le listrows* x pour les comboboxs qui peut varier selon le font.name et font.size et font.bold

et encore là j'ai un moyen de le résoudre et sans api


et je rappelle que je travaille sur ComboBox , ListBox , Frame
Bonjour,
je suis impatient de voir le résultat !
Bravo !
 

Dudu2

XLDnaute Barbatruc
Bonjour mes petits lapins Scrollers,
Des nouvelles du Scroll de l'espace, celui de @Dudu2 bien sûr !
1667297385753.gif
What else
?!

En fait je me suis mal orienté sur la cause du plantage. Ce n'est pas le fait de modifier le code VBA qui fait planter le Scroll
1667296983902.gif
. C'est le fait d'avoir la fenêtre VBE ouverte ! Tu le crois ça ?
1667297183345.gif


Fort de ce constat, tout MouveOver sur un Control qui est soumis au Scroll fermera la fenêtre VBE.
C'est la condition d'utilisation que ce bug Excel impose pour utiliser le Scroll de l'espace.
 

Pièces jointes

  • VBA Scroll Souris en ListBox et ComboBox.xlsm
    65.3 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
@Dudu2 ca déraille toujours chez moi
sur les feuilles quand une cellule est active
comme tu va le voir au début ça fonctionne et quand une cellule est sélectionnée c'est fini
autrement dit il faut que le controls soit la selection sinon chao berte
ça implique donc qu'un item doit être sélectionné dans le controls listbox
ben pour ce servir des event listbox après c'est balloh!!


demo.gif



par conte pour la combo ben là c'est fichu
car cliquer dessus reviendrait a la fermer si elle est dépliée
résultat on scroll la feuille et la combo en meme temps meme si elle est repliée et le value change entre 1 et 4 item (soit item 1 soit item 4 et quand je suis dans la child ca scroll les deux feuille et combo
c'est rigolo
demo.gif


j'ai pas testé sur userform mais ca fonctionnait me semble t il donc ......

bon allez a ce soir tchao les copains
 

Statistiques des forums

Discussions
314 663
Messages
2 111 670
Membres
111 255
dernier inscrit
pascal.gib