VBA: retour à la ligne, formater un MsgBox 6



La fenêtre de message (MsgBox) est le moyen le plus utilisé de "communication" entre une macro en VBA et l'utilisateur du fichier Excel.  Le problème est qu'il est parfois difficilement lisible – la plupart des gens utilisent les messages qui ne forment qu'une ligne continue. Pourtant, nous sommes tous habitués à des textes multiligne et aux paragraphes. Sachez qu'utiliser les retours à la ligne ou des paragraphes dans une fenêtre de message est tout à fait possible en VBA.

Le code magique: Chr(13) & Chr(10)

De manière générale, pour obtenir un retour à la ligne en VBA, vous pouvez utiliser la combinaison de deux caractères non imprimables de la table ASCII.  Il s'agit du 13ème et du 10ème caractère. Pour les "afficher", il faut passer par la fonction VBA Chr().

Le petit code VBA qui suit ajouté dans une chaîne de caractères (String) va séparer le texte en deux (ou plusieurs) lignes.

Chr(13) & Chr(10)

Pour obtenir un "effet de paragraphe" (deux parties de texte séparés par une ligne vide), il vous suffit de répéter ce code VBA deux fois:

Chr(13) & Chr(10) & Chr(13) & Chr(10)

Exemples pratiques de l'utilisation du retour à la ligne dans un MsgBox en VBA

Voici donc deux exemples basiques de l'utilisation pratique de cette astuce:

Exemple A: VBA – retour à la ligne

Ceci est ce que utilise la plupart de gens.

Sub ExempleRetourLigne1()
'par Excel-Malin.com ( https://excel-malin.com/ )

    MsgBox "Ceci est le premier texte" & " " & "Ceci est le second texte..."
End Sub

Le résultat est le suivant:

VBA MsgBox sans retour à la ligne

Et voici le code qui crée des lignes distinctes:

Sub ExempleRetourLigne2()
'par Excel-Malin.com ( https://excel-malin.com/ )

    MsgBox "Ceci est le premier texte" & Chr(13) & Chr(10) & "Ceci est le second texte..."
End Sub

Le résultat donne nettement mieux:

VBA MsgBox avec retour à la ligne

Notez que le code Chr(13) & Chr(10) ne peut pas être inséré à l'intérieur des guillemets. Vous devez séparer votre texte, délimiter les deux textes par les guillemets et insérer le séparateur de lignes entre ces deux textes. Il en va de même si vous séparez votre texte en 3, 4 ou plusieurs lignes.

Et voici le code complet pour que vous puissiez tester par vous-mêmes (avec ou sans utilisation des variables):

Sub ExempleRetourLigne()
'par Excel-Malin.com ( https://excel-malin.com/ )

'Exemple 1 - du texte directement dans la MsgBox
    
    'Exemple 1A - sans retour à la ligne
    MsgBox "Ceci est le premier texte" & " " & "Ceci est le second texte..."

    'Exemple 2B - avec retour à la ligne
    MsgBox "Ceci est le premier texte" & Chr(13) & Chr(10) & "Ceci est le second texte..."

'-----------------------------------------------------------------

'Exemple 2 - utilisation des variables
Texte1 = "Premier texte..."
Texte2 = "Second texte..."

    'Exemple 2A - sans retour à la ligne
    MsgBox Texte1 & " " & Texte2

    'Exemple 2B - avec retour à la ligne
    MsgBox Texte1 & Chr(13) & Chr(10) & Texte2
    
End Sub

 

Exemple B: VBA – nouveau "paragraphe"

Et voici le code VBA et le résultat pour créer un "nouveau paragraphe"…

Sub ExempleRetourLigne3()
'par Excel-Malin.com ( https://excel-malin.com/ )

    MsgBox "Ceci est le premier texte" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Ceci est le second texte..."
    
End Sub

Ce qui affiche la MsgBox de manière suivante:

VBA MsgBox avec plusieurs paragraphes

Conclusion

J'espère que cette petite astuce va bien vous servir. Il s'agit d'une astuce plutôt cosmétique mais les utilisateurs de vos macros apprécieront sans doute! Et encore une remarque, vous n'êtes pas obligés de se limiter à deux lignes ou deux paragraphes. J'ai utilisé deux lignes pour montrer le résultat de manière la plus simple. Vous pouvez, bien sûr, diviser votre texte en 3,4, 10,… parties selon vos besoins.

Pour aller plus loin en VBA

Et voici quelques articles supplémentaires qui pourraient vous être utiles…

46 0

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

6 commentaires sur “VBA: retour à la ligne, formater un MsgBox

  • geek

    Hello. pouvez vous me dire comment faire quand il s'agit d'une variable ?

    J'ai essayé :

    Body = "hello" & Chr(13) & Chr(10) & "godbye"

    Lorsque j'affiche ma variable tout le contenue est affiché sur une seule et même ligne.

    D'avance merci

    • excel-malin.com Auteur de l’article

      Bonjour geek,
      c'est bizarre. Pour moi, ce code fonctionne sans problème (voir la capture d'écran).
      Vous travaillez sur PC ou sur un MAC?
      Et quand vous dites que tout s'affiche sur une ligne, vous voyez "hellogodbye" ou "hello" & Chr(13) & Chr(10) & "godbye"?

      Cordialement, Martin

  • martin pilon

    Bonjour, j,aimerais utiliser cette fonction mais en comptant un nombre précis de caractère (éxécuter le saut de ligne après 72 caractères

    • excel-malin.com Auteur de l’article

      Bonjour Martin,
      vous pouvez utiliser par exemple ce code:

      Sub CouperMSGBOX()
          MonTexte = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
          CouperApres = 72
          
          MsgBox Replace(MonTexte, Left(MonTexte, CouperApres), Left(MonTexte, CouperApres) & Chr(13) & Chr(10))
      End Sub
      

      Cordialement, Martin (aussi 🙂 )