XL 2016 Utilisation du code en VBA pour Scroll dans un combobox

Sgourd

XLDnaute Nouveau
Bonjour, Je suis peu… ou disons non expérimenté en VBA et j'ai utilisé du code publié ici pour rendre fonctionnel le scroll de la souris dans des combobox. Ça fonctionne relativement bien, par contre, le scroll reste parfois bloquer aux combobox et bloque le scroll de la souris dans toutes les applications tant qu'on ne ferme pas le fichier Excel qui contient le code. Qu'ai-je donc fais de mal? Est-ce que quelqu'un peu m'aider à ce sujet?
 

Pièces jointes

  • Collecte d'information Microbiologie Procédures LIVE.xlsm
    137.2 KB · Affichages: 4
Solution
Ça ne fait pas de différence, je suppose que tu as utilisé un Contrôle Active X. Le Parent est la feuille et pas le UserForm. La gestion des évènements est donc dans la feuille. Et comme dans cette option seul l'évènement DropButtonClick() est utilisé ça donne ça:

2020-06-26_234210.jpg

Dudu2

XLDnaute Barbatruc
Bonjour,
Pour les ComboBoxes c'est assez simple, contrairement aux ListBoxes. Pas mal de gens ont ici leur solution plus ou moins basée sur la même chose mais avec l'interception d'évènements divers.
Celle que j'utilise n'intercepte qu'un seul évènement qui suffit à l'entrée / sortie du mode Scroll.

Voir le code dans le UserFormModèle dans ce fichier.
 

Pièces jointes

  • VBA Scroll Souris en ComboBox V0.xlsm
    43.8 KB · Affichages: 8

patricktoulon

XLDnaute Barbatruc
re
bonsoir dudu2
j'ai des artefacts graphiques avec ta version c'est bizarre
ma version n'en a pas et gère 36 contols identiques ou différents sur 36 userforms en même temps
demo4.gif
 

Pièces jointes

  • molette souris pour listebox2 et frame combobox .xlsm
    53.1 KB · Affichages: 11

Sgourd

XLDnaute Nouveau
Bonjour,
Pour les ComboBoxes c'est assez simple, contrairement aux ListBoxes. Pas mal de gens ont ici leur solution plus ou moins basée sur la même chose mais avec l'interception d'évènements divers.
Celle que j'utilise n'intercepte qu'un seul évènement qui suffit à l'entrée / sortie du mode Scroll.

Voir le code dans le UserFormModèle dans ce fichier.
Mon Combobox n'est pas dans un userform… est-ce ce qui peut causer problème?
 

Dudu2

XLDnaute Barbatruc
Ça ne fait pas de différence, je suppose que tu as utilisé un Contrôle Active X. Le Parent est la feuille et pas le UserForm. La gestion des évènements est donc dans la feuille. Et comme dans cette option seul l'évènement DropButtonClick() est utilisé ça donne ça:

2020-06-26_234210.jpg
 

Pièces jointes

  • VBA Scroll Souris en ComboBox sans UserForm V0 .xlsm
    41.6 KB · Affichages: 5

Dudu2

XLDnaute Barbatruc
Et j'ajoute que ça marche aussi très bien avec plusieurs ComboBoxes, toujours avec la gestion du seul évènement DropButtonClick().

2020-06-26_235428.jpg
 

Pièces jointes

  • VBA Scroll Souris en 3 ComboBoxes sans UserForm V0 .xlsm
    47.1 KB · Affichages: 5

Dudu2

XLDnaute Barbatruc
Salut PatrickToulon,
Pourquoi tu dis ça ? Bien sûr que ça passe toujours dans le Unhook !
Car l'évènement DropButtonClick() est déclenché pour afficher la liste mais aussi dans TOUTES les autres circonstances(***): choix d'un item, fermeture de la droplist, click hors de la ComboBox, click sur une autre ComboBox et même click sur une autre application de la Barre des tâches et j'en oublie sûrement.
Edit: (***) à partir du moment où la droplist est affichée évidemment.

Tu peux le constater en faisant scroller la feuille, qui, si elle scroll, montre bien que le Hook est défait.
Aucun risque de planter le Scroll ni d'Excel ni d'une autre application.

Et comment j'ai vu ça ? Grâce aux "artefacts graphiques" que tu as aperçus dans la version UserForm qui sont en fait des traces (sur le bouton UserForm Trace, pas sur l'autre) que j'avais mises sur divers évènements pour en voir la portée exacte.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
non tu n’arrête pas le hook
fait le test
drop la combox , ne clique pas dessus un item , sort de la combo et fait tourner ta mollette
walouh!!!! ta combo scroll !!!!!!
ensuite clique sur une cellule (n'importe la quelle) et ta combo va se refermer mais quand tu te ballade avec la souris sur le sheets on vois bien que le déplacement du cursor est saccadé
et il y a bien d'autre chose encore ;)
 

Dudu2

XLDnaute Barbatruc
Oui, je sais bien, mais ça n'a aucune importance car au premier clic qui suit, où qu'il soit, le Unhook se fait. Et puis c'est très bien que la Combo scroll dans cette situation.

D'ailleurs, j'aurais très bien pu contrôler cette situation (que personne d'autre d'ailleurs ne contrôle
1593211792127.gif
) en utilisant ce que j'ai fait pour les ListBoxes, à savoir détecter que le curseur de la souris est hors de la zone écran du Control (ListBox) et lancer un Unhook. Mais comme ça complique et que c'est inutile...
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
allez viens un peu du coté obscure de la force ;)

j'attire ton attention sur le code de hooking ;):p

sur feuille
les listbox sont prises en charge directement et simplement en se baladant dessus
la combo box est prise en charge par le dropbutton_click
le hook est arrêté au select change (target)

dans les userform
les listbox sont prises en charge directement et simplement en se baladant dessus
les Frames sont prises en charge directement et simplement en se baladant dessus
les combo box sont prises en charge par leur dropbutton_click
le hook est arrêté au move dans userform et a sa fermeture et entre deux changement de control

tu a la totale sur feuille et userform
 

Dudu2

XLDnaute Barbatruc
1593213252417.gif
, dans ta solution (que je n'arrive pas à faire marcher d'ailleurs, t'es sûr de ton fichier ?) , comme dans toutes les autres, si tu quittes la zone avec la souris sans passer sur un autre control pour bénéficier de ses évènements, le hook va persister.

C'est pour ça que j'ai adapté le module de Hook pour y inclure du code permettant de détecter les mouvements de souris et aller chercher sa position pour savoir si la souris est sur ou en dehors du control et Unhooker si en dehors. Sans la moindre gestion d'évènement.
Mais ça je ne l'ai fait QUE sur la ListBox, sur la Combo, c'est inutile.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
et bien sur
il faut une selection d'autre chose un autre control ou une cellule
les activX prennent la priorité quand il ont le focus
mais a mon avis tu répond un peu vite
je pense que tu n'a pas bien regarder le code

tu va constater un élagage important
LOL
 

Discussions similaires

Statistiques des forums

Discussions
311 730
Messages
2 081 978
Membres
101 854
dernier inscrit
micmag26