TOP

VBA-Leçon 10. Boîtes de dialogue (Boîtes de dialogue)

YouLibreCalc for Excel logo

Les boîtes de dialogue (boîtes de dialogue) dans Excel VBA sont utilisées pour afficher des informations à l'utilisateur.

La fonction MsgBox affiche un message dans une boîte de dialogue et attend que l'utilisateur clique sur un bouton, puis renvoie un entier indiquant sur quel bouton l'utilisateur a cliqué.

La boîte de dialogue la plus courante est la boîte de message, mais nous pouvons également utiliser la zone de saisie.


MsgBox

Jusqu'à présent, nous utilisions la boîte de dialogue MsgBox pour afficher des informations à l'écran.

Sub delete_B2()
    Range("B2").ClearContents
    MsgBox "The contents of B2 have been deleted !"  '"Le contenu de la cellule B2 a été supprimé !"
End Sub

Dans ce cas, MsgBox est appelé avec un seul argument. Voir code ci-dessous :

Nous allons maintenant créer une boîte de dialogue qui demandera une confirmation de suppression avant l'exécution des deux instructions. Ensuite, nous utiliserons trois arguments :

MsgBox([TEXT], [BUTTONS], [TITLE])
  • TEXT : texte de la boîte de dialogue
  • BUTTONS : sélection de boutons (oui, non, annuler, etc.) + autres options
  • TITLE : titre de la boîte de dialogue
  • Sub delete_B2()
    
        If MsgBox("Are you sure that you wish to delete the contents of B2 ?", vbYesNo, "Confirm") = vbYes
        Then
          Range("B2").ClearContents
          MsgBox "The contents of B2 have been deleted !"
        End If
        
    End Sub
    

    Résultat:

    Private Sub warning(var_text As String)
        MsgBox "Caution : " & var_text & " !"
    End Sub
    
    Sub macro_test()
        If Range("A1") = "" Then
            warning "empty cell"           '"cellule vide"
        ElseIf Not IsNumeric(Range("A1")) Then
            warning "non-numerical value"  '"valeur non numérique"
        End If
    End Sub
    

    vbYesNo précise que les boutons de dialogue sont "Yes" et "No", et vbYes représente le bouton "Yes" :

    If MsgBox("Text", vbYesNo, "Title") = vbYes Then 'Si le bouton Yes est enfoncé...
    

    Options d'utilisation du deuxième argument dans MsgBox

    Constante Valeur numérique Description
    vbOKOnly0ok - dialog boxes
    vbOKCancel1ok - dialog boxescancel - dialog boxes
    vbAbortRetryIgnore2abort - dialog boxesretry - dialog boxesignore - dialog boxes
    vbYesNoCancel3yes - dialog boxesno - dialog boxescancel - dialog boxes
    vbYesNo4yes - dialog boxesno - dialog boxes
    vbRetryCancel5retry - dialog boxescancel - dialog boxes
    vbCritical16critical - dialog boxes
    vbQuestion32question - dialog boxes
    vbExclamation48exclamation - dialog boxes
    vbInformation64information - dialog boxes

    Exemple d'utilisation du deuxième argument dans MsgBox

    Voici un exemple MsgBox qui continuera à s'afficher à chaque fois dans la boucle jusqu'à ce que l'utilisateur appuie sur Yes :

    Sub humor()
        Do
            If MsgBox("Do you like the Moonexcel site ?", vbYesNo, "Survey") = vbYes Then
                Exit Do '=> Réponse Yes = Oui, on sort de la boucle
            End If
        Loop While 1 = 1 '=> Boucle sans fin
        MsgBox ";-)"
    End Sub
    

    Pour afficher un nouveau ruban, vous pouvez utiliser la fonction Chr avec l'argument 10, qui se charge du déplacement du ruban, par exemple :

    MsgBox "Example 1" & Chr(10) & "Example 2" & Chr(10) & Chr(10) & "Example 3"
    

    On obtient le résultat suivant :

    Zone de saisie

    Un InputBox invite l'utilisateur à saisir une valeur dans une boîte de dialogue, par exemple :

    Sub example()
        Dim result As String
       
        result = InputBox("Text ?", "Title") 'La variable reçoit la valeur saisie dans l'InputBox
       
        If result <> "" Then 'Si la valeur est autre que "", alors le résultat sera affiché
           MsgBox result
        End If
    End Sub
    

    On obtient le résultat suivant :

    Le troisième argument peut être utilisé pour définir la valeur par défaut :

    InputBox("Text ?", "Title", "Default value")
    

    Le résultat est le suivant :