Comment éviter qu’un Formulaire VBA bloque Excel? [SOLUTION]

Un Formulaire VBA (VBA Form) peut avoir deux modes d'affichage. Dont l'un, qui est d'ailleurs actif par défaut, peut induire l'utilisateur en erreur car tant que le formulaire en question est affiché, aucune autre interaction avec Excel n'est possible. Ce qui peut faire croire à l'utilisateur que "son Excel est bloqué". Voici donc comment prévenir cette situation…

Formulaire VBA: Modal vs. Modeless (quelques explications pour commencer)

Comme mentionné plus haut, un Formulaire VBA (UserForm) peut être affiché en deux modes ce qui modifie substantiellement son comportement et également la manière d'utiliser les Formulaires dans une application basée sur Excel/VBA. Voici les explications

Un formulaire VBA MODAL

Par défaut, les Formulaires VBA vont s'afficher dans ce mode. Cela signifie que le Formulaire affiché va prendre le "focus" de l'Application Excel et va le garder jusqu'à ce qu'il soit fermé par l'utilisateur ou par le code VBA qu'il contient. Cela signifie donc que l'utilisateur ne peut rien faire d'autre dans Excel que de remplir le formulaire ou de entreprendre tout autre action requise par le formulaire (cliquer sur un bouton, choisir dans un menu déroulant,…). Il ne peut donc pas aller dans la Feuille Excel et y faire quoi que ce soit. Et c'est le cas non seulement pour le Classeur actif mais pour tous les Classeurs ouverts dans cette instance d'Excel.

C'est cette fonctionnalité qui perturbe l'utilisateur qui pense que son Excel est "bloqué". Surtout s'ils essaient travailler avec un autre Classeur ou même s'ils essaient d'ouvrir un autre fichier Excel. Cela peut créer de la confusion…

Astuce d'utilisation:

  • Ce mode d'affichage est idéal dans le cas où vous voulez "forcer" l'utilisateur à entreprendre une action. Tant qu'il ne le fait pas, il ne peut pas continuer son utilisation.
  • C'est aussi le mode le plus pratique si vous voulez ouvrir un "sous-formulaire" à partir d'un formulaire principal (par exemple pour afficher un avertissement lié au choix fait par l'utilisateur dans le formulaire principal. Ainsi, l'utilisateur doit "confirmer" son choix avant de pouvoir continuer…

Un formulaire VBA MODELESS

Le mode Modeless a le comportement à l'opposé du Modal. Si un Formulaire est ouvert dans ce mode, il ne bloque rien. L'utilisateur peut continuer à travailler avec son (ses) Classeur(s) comme si rien n'était. C'est donc ce mode qu'il faut choisir si vous ne voulez pas forcer l'utilisateur à une action ou à un choix spécifique. Et aussi si vous voulez éviter qu'il pense que son Excel est "bloqué"…

Exemple d'un formulaire VBA modeless

Astuce d'utilisation: 

  • Ce mode est à utiliser principalement dans le cas où votre application affiche deux (ou plusieurs) formulaires simultanément et indépendamment. L'utilisateur peut librement travailler avec les différents formulaires en même temps. Il peut "sauter" d'un à l'autre.
  • À utiliser également si vous voulez que, dans le cadre de remplissage du Formulaire, l'utilisateur ait la possibilité de sélectionner une valeur / plage particulière dans une Feuille du Classeur. Vous pouvez ainsi récupérer la valeur ou les coordonnées qu'il a choisi pour un traitement ultérieur.

Afficher le formulaire en Modeless pour garder Excel accessible

Maintenant vous savez que pour pouvoir garder l'interaction avec un Classeur Excel pendant qu'un Formulaire est affiché, vous devez afficher ce formulaire en mode Modeless. Voici deux manières le plus facile de le faire.

Modification des paramètres du Formulaire dans l'Éditeur VBA (VBE)

Une des possibilités est de rendre votre Formulaire Modeless directement lors de sa création. Pour cela, il vous suffit de changer la propriété ShowModal du Formulaire en False (elle est en True par défaut).

VBA Formulaire: modal et modeless
VBA Formulaire: "Modal" et "Modeless"

 

Assurez-vous que vous modifiez les propriétés du formulaire même et pas d'une de ses composantes.

Si vous ne voyez pas de fenêtre "Propriétés" dans votre éditeur VBE, il suffit de l'ouvrir avec la touche F4 de votre clavier.

Cette modification aura pour l'effet que par défaut, votre formulaire s'ouvrira en mode Modeless, c'est à dire en laissant à l'utilisateur la possibilité d'interagir avec sa fenêtre Excel. Vous ne devez donc pas modifier le code VBA de votre Projet.

Code VBA à utiliser lors du lancement de l'affichage de formulaire

Cette deuxième possibilité consiste à ajouter l'information sur le mode dans lequel le Formulaire doit être ouvert à la commande Show utilisée dans votre Projet pour afficher ce formulaire.

Pour cela, il vous suffit d'ajouter un 0 (zéro) après la commande Show

C'est donc très simple. Pour votre information, vous pouvez ajouter après le .Show soit le 0 qui correspond à VBA.FormShowConstants.vbModeless ou bien le 1 qui correspond à VBA.FormShowConstants.vbModal

Vous pouvez donc, pour plus de lisibilité écrire votre code VBA comme:

  • MonFormulaire1.Show vbModeless ce qui correspond à MonFormulaire1.Show 0
  • MonFormulaire1.Show vbModal ce qui correspond à MonFormulaire1.Show 1

L'avantage de cette solution est que vous pouvez afficher le même Formulaire en mode différent selon la situationModal (garde le "focus" sur lui-même) OU en mode Modeless (ne bloque pas le focus). Peu importe donc la propriété attribué au Formulaire à la base, vous pouvez le modifier lors de l'initialisation de l'affichage.

Pour en savoir plus sur les Formulaires VBA

Pour aller plus loin en VBA

Et pour terminer, voici quelques articles qui pourraient vous servir lors de la création de vos projets en VBA…

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Commentaire sur “Comment éviter qu’un Formulaire VBA bloque Excel? [SOLUTION]”