Un "Custom MsgBox": -> qui s'appelle exactement comme un MsgBox (mêmes arguments), -> qui s'affiche exactement comme un MsgBox (même look, par défaut peu plus grand pour une meilleure lisibilité), -> qui se comporte exactement comme un MsgBox (même ergonomie, mêmes valeurs de retour), Et... -> dont on peut facilement personnaliser le texte, les boutons et la position. Remplacer partout Msgbox par Msg.Box et le tour est joué ! |
Le fichier à télécharger Custom MsgBox.xlsm contient:
- Le UserForm Msg à importer dans le projet VBA.
- Le Module_Test comme exemple de mise en œuvre.
Les principales caractéristiques:
- Permet d'afficher l'équivalent d'un MsgBox() avec les mêmes paramètres d'appel et valeurs de retour que le MsgBox() standard.
Cela permet donc de remplacer purement et simplement le MsgBox() standard dans le code sans autre modification (voir les restrictions) !
Avec un avantage immédiat: la taille par défaut du texte est plus grande pour une meilleure lisibilité.
Voir https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/msgbox-function
Restrictions:- Toutes les valeurs de boutons de 0 à 768 du MsgBox() sont traitées, pas les valeurs au-delà.
- Les paramètres helpfile & context du MsgBox() ne sont pas traités.
- Les touches <Control + Pause> arrêtent le code juste après un MsgBox() ce qui n'est possible avec le Custom MsgBox qu'en utilisant un paramètre spécial ajouté en V3.
…
- De plus des fonctions indépendantes permettent, préalablement à l'appel de la fonction d'affichage, de personnaliser les valeurs par défaut définies en constantes dans le code relatives au nom, à la taille et la couleur de la police, la couleur de fond et les tailles minimales et maximales de la fenêtre de texte.
- 2 fonctions sont aussi disponibles pour positionner le UserForm Msg
- soit en coordonnées absolues X et Y en points,
- soit par rapport à un objet de la feuille (cellule, forme, ...).
- V1 - Initiale.
- V2 - Correction pour configuration multi-moniteurs.
- V3 - Ajout du paramètre optionnel ReturnBreak pour retourner la valeur -1 si Control + Pause a été entré sur le UserForm dans un but de debug.
- V4 - Correction du Handle permettant de calculer les coordonnées du moniteur.
- V5 - Correction d'un bug en récupération du Handle d'un Workbook multi-fenêtré.
- V6 - Ajout des déclarations API pour 32 bits.
- V7 - Supprime le fonction .SetPromptMaxWidth() et ajoute le fonction .SetFitIntoTheScreen() qui garantit la visibilité complète du message
- Placer le UserForm Msg dans la projet VBA.
- Dans le code VBA, utiliser la fonction Msg.Box() avec les paramètres habituels d'un MsgBox() standard et ses valeurs de retour (sauf valeurs de boutons au-delà de 768 et paramètres helpfile & context).
- Pour personnaliser certaines valeurs (taille, couleur, position), utiliser préalablement à l'appel de la fonction d'affichage Msg.Box() concernée, les fonctions définies à cet effet. Ces personnalisations sont volatiles et ne s'appliquent qu'à l'appel de la fonction Msg.Box() qui les suit.
- With Msg
- .SetPromptMinWidth()
- .SetPromptFontName()
- .SetPromptFontSize()
- .SetPromptFontStyle()
- .SetPromptFontColor()
- .SetPromptBackColor()
- .SetPromptTextAlign()
- .SetButtonMinWidth()
- .SetButtonMinHeight()
- .SetButtonFontName()
- .SetButtonFontSize
- .SetButtonFontStyle()
- .SetButtonFontColor()
- .SetButtontBackColor()
- .SetPositionXY()
- .SetOnWorksheetObject()
- SetFitIntoTheScreen()
- End With
- L'animation ci-dessous est obtenue avec le code suivant (voir le Module_Test)
VB:'------------------------------------------------------------------- ReturnValue = Msg.Box(Message & " standard", Buttons, Title) '------------------------------------------------------------------- With Msg .SetPromptFontForeColor vbRed .SetPromptBackColor vbYellow .SetPromptFontStyle "Italic" .SetPromptFontSize 20 .SetButtonBackColor vbGreen, vbYes .SetOnWorksheetObject [G2] ReturnValue = .Box(Message & " customized", Buttons, Title) End With '------------------------------------------------------------------- .../... Msg.Box "ReturnValue = " & S
- Version
- V1