Icône de la ressource

VBA - SetFocus dans une fonction d'évènement Control_Exit() V2

Le fichier à télécharger contient:
  1. Le Module_AsyncSetFocus à importer dans le projet VBA.
  2. Le UserForm1 comme exemple de mise en œuvre.
Note: Voir toutes mes ressources -> https://excel-downloads.com/resources/?creator_id=268468

Les principales caractéristiques:
  • Permet de faire un SetFocus efficient dans la fonction d'évènement Exit() d'un Control de UserForm.

  • Lorsque, dans un Control_Exit(), on doit définir le Focus sur un autre Control qui dépend de la valeur saisie (par exemple), l'utilisation directe (synchrone) d'un Control.SetFocus donne des résultats aberrants:
    -> 2nd appel récursif de la fonction Control_Exit() sur le SetFocus d'un Control au-delà du Control en TabIndex + 1.
    -> Impossibilité de faire un SetFocus sur un Control au-delà du Control en TabIndex + 2.


  • La fonction AsyncSetFocus remédie à ce problème en générant un SetFocus asynchrone.

  • Cette fonction est aussi utilisable d'une manière générale sans qu'il soit besoin d'être dans un Control_Exit().
Remarque:
  • Le fichier joint permet de tester ces différents cas de SetFocus synchrones et asynchrones.
Mise en œuvre très simple:
  • Placer le Module_AsyncSetFocus dans la projet VBA.

  • Dans le code VBA, utiliser la fonction AsyncSetFocus() avec le paramètre ad hoc
    VB:
    .../...
    Call AsyncSetFocus(Me.TextBox4)
    .../...
Versions:
  • V1 - Initiale
  • V2 - Raccourci le nom de la fonction de AsyncSetFocusOnUserFormControl() à AsyncSetFocus().

SetFocus.gif
  • J'aime
Réactions: Compte Supprimé 979