Icône de la ressource

VBA - Vertical Scroll en ComboBox, ListBox et TextBox (ActiveX en Feuille et en UserForm) V4

Le fichier à télécharger contient:
  1. Le Module_ScrollListComboTextBoxes à importer dans le projet VBA.
  2. Un UserForms de test contenant des ComboBoxes, des ListBoxes et des TextBoxes.
  3. Une feuille de test contenant une ComboBox, une ListBox et une TextBox ActiveX.
Les principales caractéristiques:
  • Permet le Scroll vertical avec la molette de la souris dans les Controls ComboBox, ListBox et TextBox ActiveX et UserForm
Mise en œuvre très simple:
  • Placer le Module_ScrollListComboTextBoxes dans la projet VBA.

  • Dans le code de la feuille ou du UserForm, sur l'évènement ComboBox_MouseMove() ou ListBox_MouseMove() ou TextBox_MouseMove(), appeler la fonction ControlScroll() avec le nom du Control.

  • Restriction: le Scroll vertical dans une ListBox ActiveX d'un volet non #1 (volets #2 à #4 d'une fenêtre fractionnée) n'est pas géré.
VB:
'-------------------------------------
'The Scroll is managed through:
'- 1 single event ComboBox_MouseMove()
'              or ListBox_MouseMove()
'              or TextBox_MouseMove()
'- 1 single function ControlScroll()
'-------------------------------------
'
'Example:
'-------
'Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'    Call ControlScroll(Me.ComboBox1)
'End Sub
'
'Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'    Call ControlScroll(Me.ListBox1)
'End Sub
'
'Private Sub TextBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'    Call ControlScroll(Me.TextBox1)
'End Sub

Remarques:
  • Avec Office 64Bits, le compilateur VBA génère une improbable erreur (Variable objet ou variable de bloc With non définie) lorsqu'un Control est scrollé et que la fenêtre VBE (l'éditeur VBA) est ouverte !
    C'est pourquoi, dans ce cas, si la souris "survole" un Control sous Scroll, la fenêtre VBE sera fermée automatiquement par le code VBA.

  • En raison d'un autre Bug Excel, le mécanisme de Scroll n'est pas activable sur les ListBoxes ActiveX sur les volets #2 à #4 d'une fenêtre fractionnée. Nativement (sans Scroll), les ascenseurs ne sont pas opérationnels sur ces volets sauf à modifier le Zoom ou Scroller manuellement les volets pour "réveiller" Excel. Le mécanisme de Scroll est victime des mêmes symptômes et subit en plus de graves conséquences (erreur #50290) en cas de Scroll dans ces ListBoxes.

  • Attention ! Ce mécanisme de Scroll vient avec un petit inconvénient.
    Lorsqu'une erreur Excel se produit alors que le Scroll est actif, c'est à dire que la souris "survole" un Control sous Scroll, il arrive souvent que Excel se ferme brutalement sans autre formalité !
    Il est donc recommandé de sauvegarder régulièrement ses fichiers avant les tests ou de désactiver le mécanisme de Scroll le temps de la mise au point du code.
Versions:
  • V1 - Initiale
  • V2 - Tiens compte du Bug Excel sur ListBoxes ActiveX sur les volets #2 à #4 (voir commentaire dans le code).
  • V3 - Détermination très précise des fenêtres des Controls avec l'API WindowFromPoint grâce à une trouvaille de @patricktoulon concernant l'identification des fenêtres DropDown des ComboBoxes.
  • V4 - Ajout du Scroll en TextBox

Scroll1.gif


Scroll2.gif
  • J'adore
Réactions: TooFatBoy