Dans ce tutoriel VBA, nous allons explorer comment optimiser l'interaction entre une macro VBA et les utilisateurs d'un fichier Excel en améliorant la lisibilité des messages affichés dans les boîtes de dialogue MessageBox (MsgBox
). Les MessageBox sont des outils couramment employés pour faciliter la communication entre le code VBA et les utilisateurs. Cependant, il est fréquent que les messages soient présentés sous la forme d'une seule ligne continue, ce qui peut nuire à leur lisibilité.
Nous sommes tous habitués aux textes structurés en plusieurs lignes et paragraphes. Il est donc essentiel d'adopter une approche similaire pour les messages affichés dans les boîtes de dialogue MessageBox en VBA. Ce tutoriel vous guidera à travers les étapes pour intégrer des retours à la ligne et des paragraphes distincts dans les messages de vos MessageBox. Vous améliorerez ainsi considérablement l'expérience utilisateur et la compréhension des informations transmises.
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.
1 2 3 4 5 |
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:
Et voici le code qui crée des lignes distinctes:
1 2 3 4 5 |
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:
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):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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"…
1 2 3 4 5 6 |
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:
Conclusion
J'espère sincèrement que cette technique, présentée dans ce tutoriel, améliorera l'expérience de vos utilisateurs lorsqu'ils interagiront avec vos macros. Bien que cette méthode puisse sembler principalement esthétique, il est important de ne pas sous-estimer l'impact d'une présentation claire et organisée sur la satisfaction et l'efficacité des utilisateurs.
Il convient également de souligner que la flexibilité offerte par cette technique ne se limite pas à l'exemple présenté ici, qui mettait en avant l'utilisation de deux lignes ou deux paragraphes. Cette approche a été choisie pour démontrer le concept de manière simple et épurée. Cependant, il est tout à fait possible d'étendre cette méthode pour diviser votre texte en plusieurs sections, que ce soit 3, 4, 10 ou même davantage, en fonction de vos besoins spécifiques et de la complexité du contenu que vous souhaitez présenter.
En fin de compte, l'objectif de ce tutoriel est d'encourager une meilleure compréhension et une utilisation efficace de cette technique pour améliorer la qualité globale de vos projets VBA et favoriser une expérience utilisateur plus agréable et productive.
Pour aller plus loin en VBA
Et voici quelques articles supplémentaires qui pourraient vous être utiles…
- VBA: MsgBox qui se ferme automatiquement après un délai (sans devoir cliquer dessus)
- Séparer une ligne de code VBA (une instruction) en plusieurs lignes pour une meilleure lisibilité
- Importer et exporter le code VBA
- RECHERCHEV en VBA – comment utiliser les fonctions Excel dans les macros VBA
- Liste de toutes les fonctions VBA
- Tutoriels, astuces, codes sources VBA et bien plus…
8 commentaires sur “VBA: retour à la ligne, formater un MsgBox”
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
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
Merci !!!
SUPER ! et ça marche !
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
Bonjour Martin,
vous pouvez utiliser par exemple ce code:
Cordialement, Martin (aussi 🙂 )
Plus convivial et plus élégant que le très technique "Chr(13) & Chr(10)", la constante vbCrLf (Cr=Carriage Return retour chariot) et Lf=Line feed – saut de ligne).
C'est l'avantage de VBA – il est possible d'arriver de manières différentes au même résultat.
Personnellement, je ne trouve pas
vbCrLf
particulièrement plus convivial. 🙂Alors autant utiliser
vbNewLine
🙂MsgBox "Ligne 1" & vbNewLine & "Ligne 2"
Sinon, si cela intéresse quelqu'un, voici quelques comparaisons:
Donc attention,
vbCR
etChr(13)
feront une nouvelle ligne dans unMsgBox
par contre ils ne le feront pas dans une cellule!Sinon, il semblerait que ces différentes notations vient de la différence entre les systèmes d'exploitation pour.
Unix –> vbCr
Windows –> vbCrLf
Mac –> vbLf
Intéressant… Même si pas particulièrement utile 😉