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 réactiver le Control actif (ou le Control passé en argument optionnel) au moment où le UserForm a perdu le focus au profit de la (d'une) feuille.
- Tout ça pour éviter un clic souris ?! Franchement...
- Attention:
La méthode de réactivation du Control utilise la propriété Control.Visible mise à False puis à True pour "réveiller" le Control.
Cette méthode présente l'inconvénient de déclencher les évènements:
- Control_Exit() sur le Control.Visible = False
- Control_Enter() sur le Control.Visible = True
Les commentaires indiquent un moyen de se protéger de cet effet secondaire si ces évènements sont gérés par le code du UserForm.
Cependant, une autre méthode sans effet secondaire est possible en utilisant un clic souris simulé dans le Control pour le "réveiller".
Le fichier correspondant est ici -> https://cjoint.com/c/MEuigNNQlpJ
- 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) 'If not the Foreground Window, the Modeless UserForm will be re-activated and the Focus set on TextBox1 'Call ReactivateModelessUserForm(Me, Me.TextBox1) 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.