Et une de plus !
Parmi les grands classiques de la famille des fonctions personnalisées on retrouve inévitablement les boîtes de message (et les calendriers).
Voici donc une boîte de message de plus, qui vient s’ajouter à toutes celles que vous trouverez sur Internet : aucune ne couvrant l’ensemble des besoins, à vous d’utiliser celles qui répondent au mieux à vos attentes.
Certains programmeurs utilisent les API, d’autres les formulaires. La boîte de message que je vous présente ici est basée sur un formulaire. Car l’avantage est de pouvoir afficher une image personnelle à la place des classiques icônes d’Excel, voire de faire un semblant d’animation comme nous allons le découvrir.
Présentation des caractéristiques de la boîte de message « MsgBox_Perso » :
- La police du message ainsi que sa taille, sa couleur et son alignement sont configurables ;
- Le titre est libre (le nom du classeur est repris par défaut) ;
- La boîte peut avoir de 1 à 4 boutons ;
- La croix pour fermer la boîte (le formulaire) peut être affichée ou masquée (mais Alt+F4 reste disponible) ;
- La boîte peut contenir une image personnalisée et une animation d'images est réalisable très simplement (voir plus bas) ;
- La boîte peut être affichée en mode modale ou non modale ;
- Un minuteur peut fermer automatiquement la boîte après le délai demandé (exprimé en secondes) ;
- Une macro peut être liée à chaque bouton, ce qui est pratique sur une boîte non modale où le bouton validé ne peut pas être récupéré.
- Faire précéder le libellé d'un bouton par le signe « & » génère un accès rapide au bouton (raccourci clavier) ;
- Encadrer le libellé du bouton par un crochet ouvert « [ » et fermé « ] » désactive le bouton qui reste visible (il est grisé) mais non utilisable ;
- La dernière position du formulaire est mémorisée pour afficher la prochaine boîte au même endroit (sauf s’il est fermé par la croix) ;
- Un tableau structuré peut être utilisé pour alimenter les arguments de la fonction (c’est bien pratique car il y en a pas mal à renseigner et ça fait un appel parfois laborieux ou dur à relire quand on passe les arguments en dur).
Plutôt que de longs discours, le plus simple est de consulter le fichier « MsgBox_Perso.xlsm » (ci-dessous) où vous trouverez sur la feuille « Feuil1 » une rapide présentation et des démonstrations. Les messages sont générés depuis le tableau de la feuille « MsgBox_Perso ».
Le module « Module1 » contient les codes pour ces exemples. Ils sont simples à comprendre et vous apprendront mieux que moi comment utiliser cette fonction.
Ça se passe ici : MsgBox_Perso.xlsm
Exemple d’appel avec les arguments passés en dur :
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part Réponse = MsgBox_Perso("Avez-vous bien tout compris ?", 13, "&Oui", "&Non", "", "", "J'ai un doute...", , , , , True)
Pour récupérer cette fonction dans vos applications :
- Importez la feuille « Feuil_MsgBox_Perso » ;
- Importer le formulaire « UserForm_MsgBox_Persov » ;
- Importez le module « Module_MsgBox_Perso ».
Pour les curieux voici un extrait de la fonction « MsgBox_Perso » que vous trouverez dans le module « Module_MsgBox_Perso » :
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 '------------------------------------------------------------------------------------------------------ Public Function MsgBox_Perso(Message As String, _ Optional NumImage As Integer = 1, _ Optional Bouton1 As String = "", _ Optional Bouton2 As String = "", _ Optional Bouton3 As String = "", _ Optional Bouton4 As String = "", _ Optional Titre As String = "", _ Optional Hauteur As Integer = 0, _ Optional Largeur As Integer = 0, _ Optional BoutonDéfaut As Integer = 1, _ Optional Minuteur As Long = 0, _ Optional MasquerCroix As Boolean = False, _ Optional MessageFontSize As Integer = 10, _ Optional MessageForeColor As Long = 0, _ Optional MessageTextAlign As Integer = 1, _ Optional MessageFont As String = "Tahoma", _ Optional FenetreModale As Boolean = True) As Integer '------------------------------------------------------------------------------------------------------ ' Message : le message à afficher ou vide pour faire autre chose (voir la remarque). ' NumImage : numéro de l'image à afficher (si non existant dans le formulaire "UserForm_MsgBox_Perso" prend ' l'image "I1". Si non renseigné l'image 1 est reprise. ' Bouton1 à Bouton4 : le libellé des boutons. Si vide alors le bouton est ignoré. ' Si le libellé est entre crochets "[" et "]" alors il est affiché mais le bouton n'est ' pas activé (le texte est grisé). ' Si le libellé contient "&" devant une lettre alors la lettre est surlignée et devient ' une touche d'accès rapide (la première lettre du libellé : Page &Précédente = &Page Précédente). ' Vous pouvez assigner une macro à un bouton : ajouter a son libellé le signe # (dièse) suivi ' du nom de la macro (pratique pour une fenêtre non modale). ' Titre : le titre du formulaire, si vide alors reprend le nom du classeur. ' Hauteur : nombre entre 0 et 100 qui représente le pourcentage d'affichage de la hauteur maximale du formulaire. ' Largeur : nombre entre 0 et 100 qui représente le pourcentage d'affichage de la largeur maximale du formulaire. ' BoutonDéfaut : le bouton à sélectionner par défaut. ' Minuteur : si différent de 0 alors indique le nombre de secondes avant la fermeture automatique du formulaire. ' MasquerCroix : si True alors masque la crois en haut à droite du formulaire. Attention [Alt][F4] reste valide. ' MessageFontSize : la taille de la police du message (et pas des boutons). ' MessageForeColor : la couleur du message (et pas des boutons). ' MessageTextAlign : l'alignement du message : 1 = à gauche, 2 = centré, 3 = à droite. ' MessageFont : le nom de la police du message (et pas des boutons), vérifiez qu'elle existe. ' Modale : indique s'il faut afficher la fenêtre en mode modale ou non (à utiliser avec modération). '------------------------------------------------------------------------------------------------------ ' Renvoie : le bouton validé 1 à 4 ou 0 si fermeture de formulaire par la croix, ou par [Alt][F4] (même ' si la croix est masquée), ou -1 si fermeture suite à la fin du minuteur. '------------------------------------------------------------------------------------------------------ ' Remarque si "Message" est vide : "" ' Dans ce cas la fonction va utiliser le tableau structuré arbitrairement nommé "MsgBox_Perso" et qui reprend en colonnes ' le nom des arguments de la fonction avec en plus en première colonne un champ nommé "Id" pour alimenter la ' fonction. Et "NumImage" indique la ligne où "Id" = NumImage (pour reprend ses données). ' Voir l'exemple de la feuille "MsgBox_Perso" où un bouton permet de tester la ligne active. '------------------------------------------------------------------------------------------------------
La feuille « MsgBox_Perso » contient le tableau utilisé pour les démonstrations. C’est bien pratique pour la maintenance et l’évolution du programme si vous avez plusieurs messages dans une grosse application.
Le formulaire « UserForm_MsgBox_Perso » contient déjà quelques images, que vous compléterez à votre guise. Il se présente ainsi :
Regardons les images numéro 23 à 26 :
Elles ont en propriété Tag (commentaire) l’image suivante à afficher une seconde après leur affichage : c’est ainsi que sera réalisée une animation dans la boîte de message :
N'hésitez pas à apporter vos commentaires, vos questions, dans cette discussion.
Bonne programmation.
Laurent Ott.










Répondre avec citation





Partager