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é"…
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"
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
1 2 |
'appel de l'affichage du formulaire MonFormulaire1 MonFormulaire1.Show 0 |
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 situation: Modal
(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
- Page internet sur le site de Microsoft dédiée à la propriété
ShowModal
- Astuce VBA qui vous permettra d'adapter automatiquement la taille du formulaire à l'écran de l'utilisateur
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…
- Toutes les fonctions disponibles en VBA
- Protéger votre code VBA par un mot de passe
- "VBA: Droit au but" – cours VBA en ligne gratuit et efficient
- Liste de différents codes VBA prêts à l'emploi (en français)
- Comment utiliser RECHERCHEV directement en VBA
Commentaire sur “Comment éviter qu’un Formulaire VBA bloque Excel? [SOLUTION]”
Super! Merci pour l'info