Les boites de dialogues usuelles (MsgBox et InputBox) dans Excel VBA

Dans cette article, nous apprendrons comment vous pouvez utiliser les boîtes de dialogue pour créer des applications conviviales. Vous avez la possibilité d’utiliser les boîtes de dialogue existantes (MsgBox et InputBox) dans Excel, encore appelé boîtes de dialogues usuelles ou de créer vos propres boîtes de dialogue personnalisé, appelé UserForms. Dans les deux derniers chapitres précédents, nous avons plusieurs fois affiché un message au moyen de la fonction MsgBox. Mais l’usage de cette fonction est resté simple. Savez-vous qu’il est possible de modifier le titre, le style, les boutons dans la fonction MsgBox?  Nous allons aussi nous intéresser à la fonction qui permet de récupérer des informations saisies par l’utilisateur.

1 Boîte de dialogue Msgbox

La fonction MsgBox est l’une des fonctions VBA les plus utiles. De nombreux exemples de ce chapitre utilisent cette fonction pour afficher la valeur d’une variable. Cette fonction est souvent un bon substitut à une simple boîte de dialogue personnalisée. C’est également un excellent outil de débogage, car vous pouvez insérer des fonctions MsgBox à tout moment pour suspendre votre code et afficher le résultat d’un calcul ou d’une affectation.
La plupart des fonctions renvoient une valeur unique, que vous affectez à une variable. La fonction MsgBox renvoie non seulement une valeur, mais affiche également une boîte de dialogue à laquelle l’utilisateur peut répondre. La valeur renvoyée par la fonction MsgBox représente la réponse de l’utilisateur à la boîte de dialogue. Vous pouvez utiliser la fonction MsgBox même si vous ne vous intéressez pas à la réponse de l’utilisateur mais que vous souhaitez profiter de l’affichage du message.
La syntaxe officielle de la fonction MsgBox a cinq arguments (ceux entre crochets sont optionnel):

= MsgBox(prompt[, buttons][, title][, helpfile, context])

■ prompt: C’est un argument obligatoire pour la fonction MsgBox qui spécifie le texte affiché dans la boîte de message. prompt est un argument String, ce qui signifie que vous devez taper le texte de votre choix; il peut contenir jusqu’à 1023 caractères, bien que ce soit généralement une bonne idée d’être plus concis que cela. (Toute prompt de plus de 1023 caractères est tronquée à 1023 caractères sans avertissement.) Le passage à la ligne s’opère en insérant un retour chariot vbCr ou un saut de ligne vbLf ou bien une combinaison des deux vbCrLf.
Pour rappel, les constantes vbCr, vbLf et vbCrLf représentent respectivement les valeurs suivantes : Chr(13), Chr(10) et Chr(13) + Chr(10).

Constante Équivalent Description
VbCrLf Chr(13) + Chr(10) Combinaison des caractères de retour

chariot et de saut de ligne

VbCr Chr(13) Caractère de saut de paragraphe
VbLf Chr(10) Caractère de saut de ligne

■ butons: C’est un argument facultatif qui contrôle le type de boîte de message que VBA affiche en spécifiant les boutons qu’il contient. Par exemple, comme vous le verrez dans quelques pages, vous pouvez afficher une boîte de message avec juste un bouton OK; avec les boutons OK et Annuler; avec les boutons Abandonner, Réessayer et Ignorer; etc. Vous pouvez également ajouter des arguments à l’argument des boutons qui contrôlent l’icône dans la boîte de message et la modalité de la boîte de message.

■ title: C’est un argument facultatif qui contrôle la barre de titre de la boîte de message. Si vous ne spécifiez pas de titre, VBA utilise le titre de l’application : Microsoft Excel. En général, il est préférable de spécifier le titre car le nom de l’application en lui-même n’est pas utile.
■ helpfile: C’est un argument facultatif qui contrôle le fichier d’aide que VBA affiche lorsque l’utilisateur appuie sur F1 dans la boîte de message pour obtenir de l’aide (ou clique sur le bouton Aide dans une boîte de message contenant un bouton Aide).
■ context: C’est un argument facultatif qui contrôle la rubrique du fichier d’aide vers laquelle VBA accède. Si vous spécifiez l’argument du fichier d’aide, vous devez également spécifier l’argument de contexte.

L’argument buttons (deuxième argument de la fonction MsgBox) peut recevoir les valeurs suivantes :

Constante Valeur Description
VbOKOnly 0
VbOKCancel 1
VbAbortRetryIgnore 2
VbYesNoCancel 3  
VbYesNo 4  
VbRetryCancel 5
VbCritical 16  
VbQuestion 32
VbExclamation 48
VbInformation 64
vbDefaultButton1 0 Bouton par défaut : Bouton 1
vbDefaultButton2 256 Bouton par défaut : Bouton 2
vbDefaultButton3 512 Bouton par défaut : Bouton 3
VbApplicationModal 0 Force l’utilisateur à répondre avant de poursuivre avec

Excel

VbSystemModal 4096 Force l’utilisateur à répondre avant de poursuivre avec

d’autres applications (boîte de dialogue au premier plan)

REMARQUE

  1. Le premier groupe de valeurs (0 à 5) : décrit le nombre et le type de boutons de la boîte de dialogue.
  2. Le deuxième groupe (16, 32, 48 et 64) : décrit le style d’icône.
  3. Le troisième groupe (0, 256 et 512) : définit le bouton par défaut.
  4. Enfin, le quatrième groupe (0 et 4096) : détermine la modalité de la zone de message. Sauf erreur de ma part, non utilisable en VBA.

Pour chaque groupe, il est possible de choisir une unique valeur. Le nombre correspondant au cumul des valeurs sélectionnées (une par groupe) sera la valeur de l’argument buttons à prendre en compte.
Par exemple, si vous voulez obtenir une MsgBox avec les boutons Oui/Non (valeur 4), une icône Question (valeur 32) et le deuxième bouton par défaut (valeur 256), il conviendra de saisir 292 comme argument buttons (soit 4 + 32 + 256).
Mais au lieu de saisir la valeur 292, on peut aussi saisir simplement l’expression vbYesNo + vbQuestion + vbDefaultButton2. Cela revient au même, reste plus pratique et rend surtout votre code plus lisible!

Tableau des valeurs de retour des boutons utilisés dans la fonction MsgBox

Selon le bouton sur lequel l’utilisateur clique dans la fenêtre de message, différentes actions doivent suivre. Si vous avez cliqué sur ANNULER, la macro doit être arrêtée immédiatement. Voici les valeurs de retour possibles de la figure suivant.

Constante Valeur Bouton correspondant à la valeur
VbOK 1  
VbCancel 2
VbAbort 3
VbRetry 4
VbIgnore 5
VbYes 6
VbNo 7

L’utilisation des constantes ou des nombres est expliquée dans les exemples suivants.

Supprimer une plage sélectionnée en utilisant la fonction MsgBox

Imaginez que vous avez sélectionné une cellule ou une plage de cellules à supprimer à l’aide d’une macro. Avant de faire cela, cependant vous aimeriez qu’un message s’affiche à l’écran vous demandant à nouveau si la plage sélectionnée peut vraiment être supprimée.

Sub SupprimerPlageSelectionner ()
    Dim i As Integer
    i = MsgBox ("Voulez-vous supprimer la plage sélectionnée?", _
   1 + vbQuestion, "supprimer la requête")
   If i = 2 Then Exit Sub
        Selection.Clear
End Sub

Figure: Supprimer une plage sélectionnée

Commentaires

■ La variable i est déclaré comme Integer et est affectée à la boite de dialogue MsgBox.

■ Ainsi, interroger la variable i pour déterminer sur quel bouton l’utilisateur clique.

■ Si l’utilisateur clique sur le bouton Annuler, la variable signale la valeur 2, ce qui entraîne l’arrêt immédiat de la macro. Sinon, les données contenues dans la plage sélectionnées sont supprimées à l’aide de la méthode Clear.

Macro pour afficher plusieurs informations à l’écran

Dans l’exemple suivant, plusieurs informations doivent être affichées dans une fenêtre de message à l’écran sur plusieurs lignes.

Sub PlusieursInformations ()
MsgBox _
" Bonjour utilisateur " & Application.UserName & Chr (13) & _
  " Aujourd'hui est le " & Date & Chr (13) & " Exactement " & _
    Time & " horloge!", VbInformation, "Informations"
End Sub

Commentaires

■ Si vous souhaitez afficher des informations sur plusieurs lignes dans une fenêtre de message, connectez les pièces individuelles avec un début & et une fin &.

■ À la fin de chaque ligne, entrez un espace suivi d’un trait de soulignement pour informer Excel que la commande n’est pas encore terminée et doit être poursuivie sur la ligne suivante.

■ La fonction Chr (13) est utiliser pour créer un saut de ligne dans le message.

Macro pour savoir si un classeur spécifique existe

Dans l’exemple suivant, il convient de vérifier si un certain classeur se trouve sur le disque dur local dans le répertoire C: \ mes fichiers. Voici la macro permettant de réaliser cette tâche :

Sub FichierDisponible()
    Dim s As String
    Const Fichier = "C:\mes fichiers\monclasseur.xls"
    s = Dir(Fichier)
    If s <> "" Then MsgBox "le fichier existe!", _
        vbExclamation _
    Else MsgBox "Fichier " & Fichier & " n'est pas disponible ici!", vbCritical
End Sub

Figure: Vérifier l’existence d’un classeur

Commentaires

■ Vous pouvez utiliser la fonction Dir pour déterminer si un fichier spécifique existe.

■ Si le nom du fichier recherché est renvoyé dans la variable, la recherche a réussi.

■ Cependant, si la fonction ne renvoie pas de valeur dans la variable, le fichier est introuvable.

2 Utiliser des champs de texte pour les messages
Si vous démarrez une macro plus longue, vous devez vous assurer que l’utilisateur sait qu’une macro est toujours en cours d’exécution et lui en informer via un message d’écran. Cette mesure empêche l’utilisateur de devenir nerveux et peut-être de croire qu’une macro qui fonctionnait depuis longtemps s’est écrasée. Cette impression peut facilement survenir si vous avez ensuite désactivé la mise à jour de l’écran.
Pour cette raison, vous pouvez afficher un champ de texte temporaire sur l’écran juste au début de la macro, écrire un message dans le champ de texte et supprimer à nouveau le champ de texte à la fin de la macro.
La macro suivante permet de réaliser cette tâche :

Private Sub Workbook_Open()
    ActiveSheet.OLEObjects.Add _
    (ClassType:="Forms.TextBox.1", _
    Left:=70, Top:=60, Width:=150, Height:=25).Activate
    ActiveSheet.OLEObjects _
    (ActiveSheet.OLEObjects.Count).Name = "Message"
    ActiveSheet.OLEObjects("Message").Object.Text = _
    " Patientez s'il-vous-plait..."
    Application.Wait (Now + TimeValue("0:00:05"))
    ActiveSheet.OLEObjects("Message").Delete
End Sub

Figure: Utiliser des champs de texte pour les messages

Commentaires

■ La collection OLEObjects est une collection de tous les contrôles ActiveX ou objets OLE liés ou incorporés.

■ Add est une méthode de l’objet OLEObhects utilisé pour ajouter une zone de texte à l’objet de collection. Sa syntaxe est :

Add (ClassType, FileName, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)

Dans l’argument ClassType, vous devez spécifier de quel type il doit s’agir. Voir les options qui s’offrent à vous dans le tableau suivant.

Tableau : Les options de l’argument ClassType

Contrôle à insérer Description
CheckBox Forms.CheckBox.1
ComboBox Forms.ComboBox.1
CommandButton Forms.CommandButton.1
Frame Forms.Frame.1
Image Forms.Image.1
Label Forms.Label.1
ListBox Forms.ListBox.
MultiPage Forms.MultiPage.1
OptionButton Forms.OptionButton.1
ScrollBar Forms.ScrollBar.1
SpinButton Forms.SpinButton.1
TabStrip Forms.TabStrip.1
TextBox Forms.TextBox.1
ToggleButton Forms.ToggleButton.1

■ Dans les arguments suivants, vous définissez la position et la taille exactes du champ de texte que vous souhaitez insérer.

■ Immédiatement après avoir inséré le champ de texte, activez-le avec la méthode Activate.

■ À l’étape suivante, vous attribuez un nom au champ de texte inséré afin qu’il soit accessible plus facilement. Pour ce faire, utilisez la propriété Name.

■ Pour pouvoir attribuer un texte au champ de texte, vous devez adresser le champ de texte correctement.

Vous pouvez le faire en utilisant le nom du champ de texte et les propriétés Objet et Texte.

■ Vous pouvez ensuite traiter vos autres commandes de macro et supprimer le champ de texte à l’aide de la méthode Delete une fois la macro complète terminée.

■ La méthode Wait a été utilisée pour supprimer la zone de texte insérée après exactement cinq secondes.

3 Boîte de dialogue InputBox

La fonction InputBox est une boîte de dialogue simple qui permet à l’utilisateur d’entrer les informations. Par exemple, vous pouvez l’utiliser pour permettre à l’utilisateur de saisir du texte ou un nombre ou même de sélectionner une plage.

La syntaxe de cette fonction est la suivante:

= InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile, context])

■ prompt : C’est un argument obligatoire qui spécifie l’information qui apparaît dans la zone de saisie. Comme avec MsgBox, prompt peut comporter jusqu’à environ 1024 caractères et vous pouvez utiliser la constante de retour chariot (vbCr) pour forcer des lignes séparées.

■ title : C’est un argument facultatif qui spécifie le texte dans la barre de titre de la zone de saisie. Si vous ne spécifiez pas d’argument de titre, VBA fournit le nom de l’application (Excel).
■ default : C’est un argument facultatif qui spécifie le texte qui apparaîtra dans la zone de texte. La saisie d’un argument par défaut peut être une bonne idée à la fois pour les cas où le texte par défaut est susceptible de convenir (afin que l’utilisateur puisse simplement appuyer sur Entrée pour accepter cette valeur par défaut) ou lorsque vous devez afficher un exemple de texte afin que l’utilisateur puisse comprendre quel type de réponse que vous recherchez.
■ xpos, ypos: Ce sont des valeurs numériques facultatives pour spécifier la position à l’écran de la zone de saisie. La valeur xpos régit la position horizontale du bord gauche de la zone de saisie à partir du bord gauche de l’écran (pas de la fenêtre Word), tandis que ypos régit la position verticale du bord supérieur de la zone de saisie à partir du haut de l’écran. Si vous omettez ces deux arguments, VBA affiche la zone de saisie à la position par défaut à mi-chemin de l’écran.
■ helpfile, context : Ce sont les arguments facultatifs permettant de spécifier le fichier d’aide et le contexte dans le fichier d’aide vers lesquels accéder si l’utilisateur appelle l’aide de la zone de saisie. Si vous utilisez helpfile, vous devez également utiliser context.

Vous avez déjà appris à interroger les boutons avec la fonction Msgbox.

Vous allez maintenant connaître quelques exemples d’application pratiques pour la méthode Inputbox.

Macro pour calculer la TVA

Après avoir entré un montant net, l’utilisateur devrait automatiquement voir la TVA. 

Sub calculTVA()
    Dim Montant As Double
    Dim Total As Double
    Const TVA = "1,1925"
    Montant = Application.InputBox("Calcul TVA", "Veuillez saisir le Montant")
      If Montant = 0 Then Exit Sub
         Total = Montant * TVA
         MsgBox "La taxe de vente est: " & Total - Montant & " Euros"
End Sub

Figure:  Entrez le montant via la boîte de dialogue et faites calculer la TVA

Commentaires

■ Définissez d’abord le taux de TVA actuel dans une constante.

■ Appelez ensuite la méthode Inputbox et demandez à l’utilisateur de saisir un montant.

■ Si l’utilisateur clique sur le bouton ANNULER, le programme se retrouve immédiatement avec l’instruction Exit Sub. Sinon, le montant total est d’abord calculé à partir du montant net et du pourcentage de TVA.

■ Le montant de la TVA est ensuite déterminé et affiché dans une fenêtre de message.

Macro pour saisir plusieurs entrées

Normalement, vous ne pouvez saisir des données que dans un champ de texte dans une zone de saisie. Cependant, si vous devez effectuer plusieurs entrées, vous pouvez appeler cette fonction plusieurs fois de suite et écrire les valeurs enregistrées dans un tableau les unes après les autres.

Sub CaptureEntreeMultiple()
    Dim i As Long
    Dim i2 As Long
    For i2 = 1 To 5
    i = Application.InputBox(prompt:="Entrer le nombre:", _
   Type:=1)
       If i <> False Then
           Sheets("Feuil1").Cells(1, i2).Value = i
       Else: Exit Sub
       End If
    Next
End Sub

Figure: Saisir plusieurs entrées

Commentaires

■ La méthode Inputbox est appelée cinq fois de suite à partie de la boucle For Next.

■ Si vous cliquez sur le bouton Annuler, la macro se termine immédiatement. Sinon, les données saisies sont écrites dans la feuille de calcul Feuil1.

Macro pour sélectionner une plage de cellules dans une feuille

Vous pouvez utiliser la fonction InputBox pour sélectionner une plage de cellules. Jetez un œil à la macro suivante.

Sub SelectionPlageCellules()
    Dim plageCellule As Range
    On Error Resume Next
    Set plageCellule = _
    Application.InputBox(prompt:="Plage de cellules", _
    Type:=8)
    If plageCellule Is Nothing Then
        MsgBox "Vous n'avez pas sélectionné la plage de cellules", _
        vbExclamation
    Else
        plageCellule.Select
    End If
End Sub

Figure: Sélectionner une plage de cellules dans une feuille

Commentaires

■ Vous devez d’abord déclarer une variable de plage qui doit contenir la plage sélectionnée.

■ Pour marquer une zone avec la zone de saisie, elle doit être de type 8. Si aucune zone n’est sélectionnée, un message apparaît à l’écran, sinon la zone est marquée sur la feuille de calcul.

■ Si vous le souhaitez, vous pouvez également marquer plusieurs zones à l’aide de la zone de saisie. Pour ce faire, marquez la première zone de la feuille de calcul lorsque la zone de saisie est appelée, maintenez la touche I Ctrl \ enfoncée et marquez la zone suivante. Enfin, cliquez sur le bouton OK.

Saisie des fonctions via la boîte de saisie InputBox
Si vous le souhaitez, vous pouvez également saisir des fonctions via une zone de saisie, à condition de ne pas utiliser l’assistant de fonction ou d’autoriser la saisie directe de cellules. En entrant une fonction via un champ de texte, par exemple, vous pouvez vérifier à nouveau la fonction saisie avant de l’écrire dans une cellule.

Sub EntrerFonction()
    Dim s As String
    s = Inputbox("Entrez la fonction", "Fonction", "=")
    If s = "" Then Exit Sub
    ActiveCell.FormulaLocal = s
End Sub

Commentaires

■ Dans cette macro, le signe égal (=) a été spécifié comme entrée standard dans le champ de texte de la zone de saisie, puisque chaque fonction dans Excel commence par ce caractère.

■ Pour saisir des fonctions dans le champ de texte de la zone de saisie, vous devez spécifier la propriété FormulaLocal. Sans spécifier cette propriété, Excel ne reconnaîtrait pas la fonction saisie.

S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x