Icône de la ressource

VBA - Scroll en Controls ActiveX & UserForm (ListBox, ComboBox, TextBox, UserForm, Frame, MultiPage) V17

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • 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 !

je repete
Arx contient le left top right bottom
le moindre coup de roulette en dehors du rectangle tue le ink
il sera éventuellement réamorcé si je reviens dessus ou si je ne suis pas sur un autre control monitoré.
et comme le test arx se fait au début il n'y a pas de scroll intempestif.

VB:
Private Sub IC_MouseWheel(ByVal Button As MSINKAUTLib.InkMouseButton, ByVal Shift As MSINKAUTLib.InkShiftKeyModifierFlags, ByVal Delta As Long, ByVal x As Long, ByVal y As Long, Cancel As Boolean)
    Dim ctrl As Control, avail
    Set ctrl = ActualControl
    avail = x > ArX(1) And x < ArX(3) And y > ArX(2) And y < ArX(4)
    On Error Resume Next
    If Not avail Then
        Set IC = Nothing: Set ActualControl = Nothing: HandleCible = 0
    End If
pour info ton fichier #97 ne fonctionne pas chez moi pour la combobox ça scroll la feuille
 
Et moi, je répète.
IC_MouseWheel() ne se déclenchera pas si le curseur est hors zone du Control monitoré, c.a.d. hors de son RECT. Vérifié.
Donc par définition x et y ne peuvent jamais être hors du RECT du Control monitoré lors d'un IC_MouseWheel() à moins que ton RECT soit faux.
Quant à l'évènement ICEI_CursorOutOfRange, c'est la daube en barre. Marche pas.
pour info ton fichier #97 ne fonctionne pas chez moi pour la combobox ça scroll la feuille
Le Scroll sur les ComboBox et le MultiPage ne fonctionne pas en Excel 2007 ou Windows 7, @jurassic pork l'avait déjà diagnostiqué.
Sinon, comme ça n'a pas de sens de scroller une ComboBox non développée, il faut la développer avant !
Pour info ton fichier ne fonctionne pas chez moi, vu que tu n'as pas fourni de fichier.
Envoie-le et je te donne la preuve que j'ai déjà acquise avec mes tests. Ou mets une trace dans ton test If Not avail Then.
Au passage j'ai amélioré le fichier du Post #97 notamment pour les TextBox ActiveX.
Mais bon, ma méthode préférée reste le TrackMouseEvent du Post #141 même s'il y a un hook (limité).
 
Dernière édition:
Non moi je suis sur 2013 w 10 et le combo ne marche pas
Après ou est l'utilité de tourner pour s'avoir si la souris et dedans puisque tu peux l'arrêter au moindre coup de roulette en dehors du champ ou passage sur un autre contrôle monitoré
À quoi ça sert de faire souffrir le procc même si ce n’est pas beaucoup quoi que 22% quand même.
Mais je le redis tu fais comme tu veux
Personnellement je privilégie les events implémentés on fera jamais mieux qu'eux
 
Pourquoi j'ai des doutes sur tes retours...
1 - Après ou est l'utilité de tourner pour s'avoir si la souris et dedans
Il n'y a aucune boucle dans mon code. Tu dois utiliser un fichier antédiluvien ou le présupposer.
2 - quoi que 22% quand même.
Chez moi c'est 2% maximum avec les plus longs paliers à 1% et j'ai juste un core i5 à 2.60 GHz
3 - le combo ne marche pas
Je n'ai rien changé au traitement des ComboBoxes depuis le début, ça fonctionne en W10 Office 2021/64bits et Office 2016/32bits, je ne vois aucune raison pour laquelle ça ne marcherait pas en Office 2013. Mais bon je ne l'ai pas vérifié et le ferai s'il le faut.
4 - Personnellement je privilégie les events implémentés on fera jamais mieux qu'eux
De même, je n'utilise que les évènements standards pour les Controls de UserForm et ActiveX qui présentent des difficultés particulières et que tu ne traites pas. Et je le répète... pas de boucle.
5 - tu peux l'arrêter au moindre coup de roulette en dehors du champ
J'ai déjà répondu à ça, il n'y a pas de roulette en dehors du champ avec l'InkCollector qui ne déclenche le MouseWheel qu'à l'intérieur du champ.
6 - ou passage sur un autre contrôle monitoré
Il faudrait ajouter... "quand cet autre Control existe" ! Passer d'une ListBox ActiveX à la feuille qu'on fait scroller pour revenir à la ListBox est une expérience à essayer. Mais c'est vrai tu ne gères pas les ActiveX.

Tout ça n'est pas majeur, chacun faisant comme il le sent. D'autant que, comme je l'ai dit avant, ma méthode préférée reste le TrackMouseEvent du Post #141 même s'il y a un hook (limité). Et je n'implémenterai pas le InkCollector dans mes applications même si je le crois parfaitement opérationnel tel qu'en Post #97.
 
- 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
Retour