Icône de la ressource

VBA - UserForm vbModeless - Réactiver le UserForm sans clic souris, sur un simple Mouse Over V3

Le fichier à télécharger contient:
  1. Le Module_ReactivateUserForm à importer dans le projet VBA.
  2. Le Module_Test et le UserForm1 comme exemple de mise en œuvre.
Les principales caractéristiques:
  • Permet, sur simple "MouseOver" (évènement UserForm_MouseMove), de réactiver un UserForm affiché en vbModeless et accessoirement de repositionner le curseur dans la TextBox ou ComboBox active au moment où le UserForm a perdu le focus au profit de la feuille.
Remarque:
  • Tout ça pour éviter un clic souris ?! Franchement...
Mise en œuvre très simple:
  • Placer le Module_ReactivateUserForm dans la projet VBA.

  • Dans le code de la feuille ou du UserForm, sur l'évènement UserForm_MouseMove appeler la fonction ReactivateModelessUserForm() avec les paramètres ad hoc.
    VB:
    '------------------
    'UserForm MouseMove
    '------------------
    Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        'If not the Foreground Window, the Modeless UserForm will be re-activated and the Focus set on its Active Control
        Call ReactivateModelessUserForm(Me)
    End Sub
Versions:
  • V1 - Initiale
  • V2 - Simplification drastique et ajout du choix optionel du Control sur lequel faire Focus après ré-activation du UserForm.
    V2b - Micro-modification pour supprimer un TextBox.SelStart inutile.
    V2c - Ajout de commentaires sur le fait que les évènements Control_Exit() et Control_Enter() de l'ActiveControl vont être déclenchés et que s'ils sont codés, il faut gérer un Flag dans le UserForm pour les ignorer en cas de réactivation.
  • V3 - Changement de méthode pour replacer le curseur dans la zone de la TextBox ou ComboBox pour éviter les évènements Control_Exit() et Control_Enter().
MouseOver.gif