Accueil | Ce site | CV | Excel | Livre d’or | Macros XL4 | Modèles | VBA

 Chaîne de caractères

On désigne ainsi toute succession de caractères alphanumériques (lettres, chiffres, éléments de ponctuation, symboles mathématiques ou divers, …).

Un mot peut également représenter un nom défini dans une feuille Excel, une fonction, une constante, une variable ou une procédure dans VBA, …. Les mots de ce type désignent tous autre chose que ce que la simple succession de lettres qui les compose le laisserait penser.

C’est le même concept qui est classiquement utilisé en maths : dans l’expression y = ax2 + bx + c, les caractères a, b et c symbolisent des constantes, tandis que x et y sont des variables. Aucun ne représente une lettre de l’alphabet. Ce sont des nombres qui sont additionnés, et non des morceaux de texte.

Il faut absolument éviter toute ambiguïté entre les chaînes de caractères et les mots correspondant à un nom, une variable, … Pour ce faire, on utilise des guillemets droits ("Az") et non des guillemets typographiques (“Az” ou «Az») pour différencier les chaînes de caractères des autres mots.

La figure 1 illustre la différence entre entre les 2 premières sortes de guillemets, qui à première vue se ressemblent.


Fig. 1 - Guillemets droits, et guillemets typographiques.

Ainsi la ligne de code VBA ci-dessous :

Msgbox "Bonjour"

affiche une fenêtre avec le texte “Bonjour” (figure 2), car l’argument de MsgBox est entre guillemets,

tandis que celle-ci :

Msgbox TexteMessage

ne fonctionne que si TexteMessage contient une chaîne de caractères. TexteMessage n’est pas entre guillemets ; il doit donc s’agir d’une constante, d’une variable ou du résultat renvoyé par une fonction.


Fig. 2 - Exemple de UserForm contenant un TextBox
(une zone de saisie) où une date est attendue

En voici un exemple d’utilisation, correspondant au contrôle de saisie du TextBox (zone de saisie d’un objet UserForm) de la figure 2. Le code indiqué correspond à une version simplifiée de la fonction Controle :

Beaucoup de programmes utilisent au moins une zone de dialogue (objet UserForm de VBA) permettant à l’utilisateur de fournir l’information nécessaire à la poursuite du traitement. La fonction Controle permet de vérifier que l’utilisateur a bien entré l’information attendue.

Private Sub ControleInfos()
    Resultat = Controle(TDate = "", "la date.", TDate)
End Sub

Function Controle(ByVal Expression As Boolean, Optional ComplTexte, Optional CellActive, Optional TexteMessage)
    ' Test si anomalie
        If Expression Then
                If IsMissing(TexteMessage) Then
                    TexteMessage = "Vous n'avez pas indiqué " & ComplTexte
                End If
            MsgBox TexteMessage, 48, "Information manquante."
            ' MAJ Curseur
                If Not IsMissing(CellActive) Then
                    CellActive.SetFocus
                End If
        End If
    ' Résultat du contrôle
    If Expression Then Controle = False Else Controle = True
End Function

Ici, la ligne

            Msgbox TexteMessage, 48, "Information manquante"” 

provoque l’affichage du message reproduit en figure 3 :


Figure 3 - Message affiché par la routine ControleInfos si aucune date n’a été indiquée.

La fonction Controle accepte dans cette version simplifiée 4 arguments, les 3 derniers facultatifs. Ici, les trois premiers (“Expression”, “ComplTexte” et “CellActive”) sont renseignés, et le quatrième “TexteMessage” manque.

                If IsMissing(TexteMessage) Then
                    TexteMessage = "Vous n'avez pas indiqué " & ComplTexte
                End If

L’expression “IsMissing(TexteMessage)” testée dans l’extrait de code ci-dessus est vraie, ce qui conduit au message de la figure 3, qui résulte de la concaténation de la chaine de caractères "Vous n'avez pas indiqué " (qui se termine par une espace*) et de l’argument ComplTexte.

En fait pour être complet, un second controle est nécessaire : il faut également s’assurer que la date indiquée est valide. Voici la version complète de la routine “ControleInfos” associée au dialogue de la figure 2.

Private Sub ControleInfos()
    Resultat = Controle(TDate = "", "la date.", TDate)
    If Resultat Then Resultat = Controle(Not (IsDate(TDate)), , TDate, "Il faut entrer une date valide, au format ""j/m/aa"".")
End Sub

En cas de date invalide, le message de la figure 4 apparaît alors :


Figure 4 - Message affiché si la date indiquée n’est pas valide.

Contrairement au cas précédent, le quatrième argument, “TexteMessage” est fourni à la fonction Controle, tandis que le second, “ComplTexte” manque. L’expression “IsMissing(TexteMessage)” est cette fois fausse, et il n’y a pas de concaténation :

Le message affiché, "Il faut entrer une date valide, au format "j/m/aa." correspond simplement à l’argument “TexteMessage”, à un détail près :

Les guillemets étant un identifiant permettant de reconnaître les chaines de caractères, il faut respecter la convention suivante : pour afficher dans un message un guillemet, il faut le doubler. C’est pourquoi “TexteMessage” se termine ainsi :

“…format ""j/m/aa""."”, seul moyen d’afficher les guillemets de part et d'autre du format de date.

* Le mot “espace” est féminin en typographie.