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

  • Initiateur de la discussion Initiateur de la discussion Sgourd
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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?
 
Ç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

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:
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 😉
 
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:
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
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
831
Retour