Le fichier à télécharger contient:
- Le Module_ReactivateUserForm à importer dans le projet VBA.
- Le Module_Test et le UserForm1 comme exemple de mise en œuvre.
- 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.
- Tout ça pour éviter un clic souris ?! Franchement...
- 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
- 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().