Excel · VBA · A3iformations

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 « … »Informer
vbYesNo, vbQuestionConfigurer
If r = vbYesDécider
InputBox, Type:=8Demander
1

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.

Simulateur : exécutez une instruction MsgBox, ou tapez la vôtre
& et non +"Total : " + 7700 tente une addition et provoque l’erreur 13. & convertit tout en texte : "Total : " & 7700 affiche « Total : 7700 ».
Un message lisibleMettez les nombres en forme avec Format(x, "#,##0.00 €") et aérez avec vbCrLf. Un titre explicite (3e argument) remplace « Microsoft Excel ».
2

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.

Simulateur : composez la boîte, puis cliquez sur ses boutons
Protéger les actions risquéesPour une suppression, mettez vbDefaultButton2 : le bouton Non est actif par défaut, une pression machinale sur Entrée n’efface rien.
La croix de fermetureElle n’est active que si la boîte a un bouton Annuler (elle renvoie alors vbCancel) ou seulement OK. Avec vbYesNo, l’utilisateur doit choisir.
3

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.

Simulateur : trois macros, trois façons de traiter la réponse

        

    Sans variableIf MsgBox("Continuer ?", vbYesNo) = vbNo Then Exit Sub : on teste directement le résultat, en une ligne.
    Comparer aux constantesÉcrivez If r = vbYes et non If r = 6 : même résultat, mais un relecteur comprend immédiatement la condition.
    4

    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.

    Simulateur : saisissez un montant HT, validez ou annulez
    
          

    Toujours validerSans 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).
    Proposer une valeurLe 3e argument pré-remplit la zone : l’utilisateur n’a plus qu’à valider. Pratique pour une date (Format(Date, "dd/mm/yyyy")) ou la dernière valeur saisie.
    5

    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.

    Simulateur : choisissez le type, puis répondez à la boîte
    
          

    Le piège du zéroIf 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 ou Application.InputBox ?La fonction VBA 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é)

    1. Enregistrez le classeur en .xlsm et collez le code de la feuille « Code VBA » dans un module standard.
    2. Exécutez Bienvenue : un message sur deux lignes affiche votre nom et la date du jour.
    3. Exécutez AjouterFormation : saisissez « Word avancé », 4 stagiaires, 2 jours, puis confirmez par Oui. Essayez aussi Annuler et une saisie non numérique.
    4. Exécutez SommePlage et sélectionnez la colonne des montants à la souris.
    5. Exécutez SupprimerDerniere : observez le bouton Non actif par défaut, puis répondez Non.
    6. Répondez aux questions de la feuille Contrôle.
    A3iformations · Organisme certifié Qualiopi · Centre de passage TOSA Interface Excel Microsoft 365 en français