Les boîtes de dialogue en VBA : MsgBox et InputBox
Une macro dialogue avec l’utilisateur par deux boîtes toutes prêtes. MsgBox affiche un message, avec des boutons (OK, Oui, Non, Annuler…) et une icône, et renvoie le bouton cliqué. InputBox pose une question et renvoie la saisie. Excel ajoute Application.InputBox, qui contrôle le type de la réponse et permet de sélectionner une plage à la souris. Tous les simulateurs affichent de vraies boîtes : cliquez, saisissez, et observez ce que reçoit la macro. Voir aussi les sélections de cellules et les variables et conversions.
MsgBox : afficher un message
La syntaxe complète est MsgBox Prompt, Buttons, Title. Seul le message (Prompt) est obligatoire. On le construit en assemblant texte et valeurs avec l’opérateur &, et on passe à la ligne avec vbCrLf ou vbNewLine. Tant que la boîte est ouverte, la macro est en pause. Écrite seule sur une ligne, MsgBox est une instruction : pas de parenthèses. Pour récupérer le bouton cliqué, on l’utilise comme une fonction : r = MsgBox(…), parenthèses obligatoires.
"Total : " + 7700 tente une addition et provoque l’erreur 13. & convertit tout en texte : "Total : " & 7700 affiche « Total : 7700 ».Format(x, "#,##0.00 €") et aérez avec vbCrLf. Un titre explicite (3e argument) remplace « Microsoft Excel ».Boutons, icônes et bouton par défaut
Le 2e argument, Buttons, est un nombre obtenu en additionnant trois constantes : le jeu de boutons (vbOKOnly 0, vbOKCancel 1, vbAbortRetryIgnore 2, vbYesNoCancel 3, vbYesNo 4, vbRetryCancel 5), l’icône (vbCritical 16, vbQuestion 32, vbExclamation 48, vbInformation 64) et le bouton par défaut (vbDefaultButton2 256, vbDefaultButton3 512). vbYesNo + vbQuestion vaut donc 36. Préférez les constantes aux nombres : le code se lit tout seul.
vbDefaultButton2 : le bouton Non est actif par défaut, une pression machinale sur Entrée n’efface rien.vbCancel) ou seulement OK. Avec vbYesNo, l’utilisateur doit choisir.Exploiter la réponse de l’utilisateur
Utilisée comme fonction, MsgBox renvoie le bouton cliqué : vbOK 1, vbCancel 2, vbAbort 3, vbRetry 4, vbIgnore 5, vbYes 6, vbNo 7. On la teste avec If … Then quand il y a deux boutons, avec Select Case quand il y en a trois, et dans une boucle Do … Loop pour proposer de réessayer. Les lignes exécutées s’affichent en surbrillance.
If MsgBox("Continuer ?", vbYesNo) = vbNo Then Exit Sub : on teste directement le résultat, en une ligne.If r = vbYes et non If r = 6 : même résultat, mais un relecteur comprend immédiatement la condition.La fonction InputBox
InputBox(Prompt, Title, Default) affiche une zone de saisie et renvoie toujours du texte (String), même quand l’utilisateur tape un nombre. Pour calculer, on vérifie avec IsNumeric puis on convertit avec CDbl ou CLng. Si l’utilisateur clique sur Annuler, InputBox renvoie une chaîne vide, exactement comme un OK sur une zone vide. StrPtr(s) = 0 permet de distinguer les deux cas : il ne vaut Vrai qu’après Annuler.
IsNumeric, une saisie comme « mille » fait planter CDbl (erreur 13). Pour redemander jusqu’à obtenir un nombre, placez InputBox dans une boucle Do … Loop Until IsNumeric(s).Format(Date, "dd/mm/yyyy")) ou la dernière valeur saisie.Application.InputBox : contrôler le type de saisie
La méthode Application.InputBox d’Excel ajoute l’argument Type : 0 formule, 1 nombre, 2 texte, 4 valeur logique, 8 plage de cellules, 16 valeur d’erreur, 64 tableau (on peut additionner : Type:=1 + 2). Excel refuse lui-même une saisie du mauvais type et laisse la boîte ouverte. Avec Type:=8, l’utilisateur sélectionne les cellules à la souris et la méthode renvoie un objet Range : il faut donc Set. Annuler renvoie False, pas une chaîne vide.
If v = False Then Exit Sub arrête aussi la macro quand l’utilisateur saisit 0, car 0 = False. Testez le type : If TypeName(v) = "Boolean" Then Exit Sub.InputBox renvoie du texte, sans contrôle. Application.InputBox contrôle le type et permet de pointer une plage, mais n’existe que dans Excel.Exercice : dialoguer avec l’utilisateur pour compléter un tableau
Classeur d’exercice (Énoncé et Corrigé)
- Enregistrez le classeur en .xlsm et collez le code de la feuille « Code VBA » dans un module standard.
- Exécutez
Bienvenue: un message sur deux lignes affiche votre nom et la date du jour. - Exécutez
AjouterFormation: saisissez « Word avancé », 4 stagiaires, 2 jours, puis confirmez par Oui. Essayez aussi Annuler et une saisie non numérique. - Exécutez
SommePlageet sélectionnez la colonne des montants à la souris. - Exécutez
SupprimerDerniere: observez le bouton Non actif par défaut, puis répondez Non. - Répondez aux questions de la feuille Contrôle.