Afficher temporairement un message en VBA

Modèles prêt à l'emploi, Projets Excel-VBA complets

Informer les utilisateurs qu’un code s’exécute ou qu’une action lourde est train de se dérouler, et ce sans mettre en pause vos automatisations, relève parfois du casse-tête. Afficher temporairement un message en VBA, peut à la fois rassurer vos utilisateurs sur le fait qu’un code s’est bien lancé mais permet également à ce dernier de patienter le temps de son exécution (au moins le temps de lire votre message…).

Vous trouverez ici deux méthodes pour afficher temporairement un message en VBA. Ces méthodes fonctionnent sans mettre en pause votre exécution. Nous utiliserons MS Excel pour cet exemple mais qui ces méthodes sont également valables pour l’ensemble de la suite MS Office .

  • Méthode 1 : Par l’affichage d’un MsgBox temporisée
  • Méthode 2 : Par l’utilisation d’un Userform qui ne s’affichera qu’un certain temps

 

Pour illustrer ces deux méthodes, prenons le cas simple suivant : vous avez besoin d’avertir l’utilisateur que le classeur Excel sur lequel il travaille va se s’enregistrer dans un emplacement externe (disons un serveur). Il est important de prévenir cet utilisateur par un message afin qu’il ne s’inquiète pas de voir venir un chargement non demandé (et prévenir toute fermeture brutale du programme). De plus, il est important que l’affichage temporaire du message en pause l’exécution du code, ici une sauvegarde.
Afficher Temporairement Un Message En VBA

Méthode 1 : Par l'affichage d'un Msgbox temporisé

Pour afficher temporairement un message, nous utilisons ici un Msgbox particulier dans son appel nous permettant  de ne pas mettre en pause l’exécution d’un code qui suivrait plus bas ici. Outre le titre et le message, le nombre de secondes d’attentes est bien évidemment personnalisable : il est ici paramétré sur une seconde d’attente.


Sub SolutionParMsgbox()
 
CreateObject("WScript.Shell").Run "mshta.exe vbscript:close(CreateObject" _
& "(""WScript.Shell"").Popup(""Sauvegarde sur le serveur en cours"",1,""Merci de patienter ""))"
'                     .Popup(""abc...xyz"",X,""abc...xyz"") X représente le nombre de secondes d'attente

End Sub


Méthode 2 : Par l'utilisation d'un Userform temporaire

Une autre manière de procéder pour afficher temporairement un message en VBA est de passer par l’affichage d’un petit Userform qui se rendra visible quelques secondes puis se déchargera. Ainsi on obtient l’avertissement souhaité sans mettre en pause l’exécution d’un code qui suivrait plus bas. Dans un module quelconque on retrouva l’appel de l’userform suivant pour rendre ce dernier visible. 


Sub SolutionParUserForm()

USFpatienter.Show
'Voir le code dans UserForm_Activate qui permet la fermeture de l'Userform au bout de 2 secondes

End Sub

Dont on va paramétrer l’apparition afin qu’elle ne dure que quelques secondes, en allant chercher notre userform puis en accédant au code qui lié associé (cliquez “voir le code” ou double cliquez)

Sub UserForm_Activate()

Application.Wait Now + TimeValue("0:00:02")
Unload USFpatienter

End Sub

Pour conclure, on lance un userform qui commence par s’afficher normalement. Cependant dès l’affichage, un compteur va s’enclencher puis décharger l’userform c’est à dire le retirer de l’affichage. On obtient ainsi l’effet escompté : afficher temporairement un message en VBA, toujours sans mettre en pause le code.  Cette méthode différente offre différemment en bonus un degré de personnalisation du message bien supérieur.

Bonus : Le fichier d'exemple en téléchargement, incluant les deux méthodes

Acheter

Prenez quelques secondes pour

nous évaluer !, nous encourager avec un don !, partager ce contenu !
[kkratings]