Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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:

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
 

Pièces jointes

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

Sgourd

XLDnaute Nouveau
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:

 

Pièces jointes

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

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().

 

Pièces jointes

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

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 ) 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

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
, 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…