Manipuler les chaînes de caractères
Avant toute chose, un petit rappel sur le maniement des chaînes de caractères (donc les variables de type String). A la base, une chaîne se déclare et s'initialise de cette manière :
Dim s As String
s = "lundi"
Vous pouvez placer n'importe quel caractère (y compris des symboles comme @, #, %...) entre les guillemets. Le seul caractère non autorisé est... le guillemet lui-même, puisqu'il sert de délimiteur. Donc ceci ne marche pas :
Dim s As String
s = "Je m'appelle "Hervé" et j'habite en France"
Le second guillemet marque la fin de la chaîne. Et VB ne sait plus ce qui lui arrive à partir de Hervé" et j'habite en...
Guillemets dans une chaîne
Il existe quand même une astuce pour placer des guillemets dans une chaîne : il faut penser à doubler ces guillemets. Ce qui donne :
Dim s As String
s = "Je m'appelle ""Hervé"" et j'habite en France"
Les guillemets doubles sont eux-mêmes compris entre les guillemets simples qui délimitent la chaîne. A l'écran ou sur le papier, un seul guillemet sera pourtant affiché.
La bonne nouvelle, c'est qu'on peut donc placer des guillemets dans une chaîne de caractères. La mauvaise nouvelle, c'est que le doublement des guillemets alourdit l'écriture et la lecture, donc le risque de bugs. Que le programmeur VB qui ne s'est jamais fait piéger par un guillemet me jette le premier clavier
Notamment, si les guillemets "intérieurs" se trouvent en fin de chaîne, vous obtenez ceci (vous avouerez que la lecture se complique) :
Dim s As String
s = "Je m'appelle ""Hervé"""
Qu'est-ce qu'une concaténation ?
A la base, "concaténer" est le terme informatique pour "coller". En gros, concaténer les valeurs "lundi" et "mardi", c'est tout simplement les coller pour obtenir "lundimardi".
En VB et dans les différentes formules d'Access, l'opérateur de concaténation est le symbole "&".
Information
En fait, le symbole "+" permet aussi de concaténer deux valeurs, à condition que celles-ci soient de type String exclusivement. On peut effectivement considérer qu'il s'agit d'une forme d'addition entre deux chaînes.
Vous verrez plus loin que l'opérateur "&" est plus souple, c'est sans doute celui-ci que vous garderez !
Concrètement, vous pouvez par exemple écrire ceci (comparez les lignes 15 et 35) :
- ' ---
- ' CONCATENATION : METHODE 1
- ' ---
- Sub Concatenation1()
- ' Déclaration des variables
- Dim s1 As String
- Dim s2 As String
- Dim s3 As String
- ' Initialisation des variables
- s1 = "lundi"
- s2 = "mardi"
- ' On concatène s1 et s2
- s3 = s1 & s2
- ' On affiche le résultat
- MsgBox s3
- End Sub
- ' ---
- ' CONCATENATION : METHODE 2
- ' ---
- Sub Concatenation2()
- ' Déclaration des variables
- Dim s1 As String
- Dim s2 As String
- Dim s3 As String
- ' Initialisation des variables
- s1 = "lundi"
- s2 = "mardi"
- ' Une autre forme de concaténation
- s3 = s1 + s2
- ' On affiche le résultat
- MsgBox s3
- End Sub
Et vous obtenez ce résultat :
Bien sûr, ce n'est pas très joli ! Pour ajouter un espace entre les 2 mots, vous pouvez :
- ajouter un espace en fin de chaîne s1, en écrivant :
s1 = "lundi " - ajouter un espace en début de chaîne s2, en écrivant :
s2 = " mardi" - concaténer s1, puis un espace, puis s2, en écrivant :
s3 = s1 & " " & s2
Cette solution est plus pratique, parce qu'elle demande pas de modifier s1 et s2.
Attention
Pour concaténer l'espace, utilisez bien une séquence guillemet+espace+guillemet. Si vous écrivez "" (guillemet+guillemet) — comme on le fait souvent dans Excel — vous collez s1, puis une chaîne vide (donc rien !), puis s2. Et vous obtenez à nouveau "lundimardi".
pour Info
L'opérateur "&" peut s'utiliser aussi dans Excel (formules ou VBA). Il peut remplacer la fonction Excel CONCATENER(), qui est bien plus longue à écrire !
Concaténation de types différents
L'opérateur "&" permet de concaténer des variables de types différents. Vous pouvez sans problème coller une chaîne, une valeur numérique, une date, etc.
Plus précisément : chaque valeur est transformée en chaîne avant d'être concaténée. Et le résultat final est obligatoirement une chaîne de caractères.
Exemple
- ' ---
- ' CONCATENATION DE TYPES DIFFERENTS
- ' ---
- Sub Concatenation3()
- ' Déclaration des variables
- Dim s1 As String
- Dim s2 As String
- Dim x As Integer
- Dim d As Date
- ' Initialisation des variables
- s1 = "lundi"
- x = 102
- d = #12/25/2017#
- ' Concaténation
- s2 = s1 & x & d
- MsgBox s2
- ' Variante
- s2 = s1 & " " & x & " " & d
- MsgBox s2
- End Sub
Résultat
Vous noterez une particularité de VB : la date a été définie en anglais, mais elle s'affiche pourtant au format français.
Attention
Le même programme ne marche plus si vous remplacez les "&" remplacés par des "+". Vous obtenez une erreur de type incompatible. L'opérateur "+" ne peut s'appliquer que si les variables sont de même type. L'opérateur "&" est donc plus souple.
Concaténation et type Variant
L'opérateur de concaténation s'applique aussi aux types Variant. Le programme qui suit fonctionne donc, même si la variable v a pour valeur Null :
- ' ---
- ' CONCATENATION DE VARIANTS
- ' ---
- Sub Concatenation4()
- ' Déclaration des variables
- Dim s1 As String
- Dim s2 As String
- Dim v As Variant
- ' Initialisation des variables
- s1 = "lundi"
- v = Null
- ' Concaténation
- s2 = s1 & v
- MsgBox s2
- End Sub
Concaténation et retour à la ligne
Une chaîne de caractères peut contenir un retour à la ligne. Généralement, l'intérêt de la chose se manifeste dans une boîte de message (MsgBox) ou dans un champ calculé de formulaire ou d'état. Souvent pour des raisons graphiques.
Le retour à la ligne est une séquence de 2 caractères : le caractère ASCII numéro 13 (retour chariot) et le caractère numéro 10 (avance ligne). Il est codé Chr(13) & Chr(10), ou encore vbCrLf.
Exemple
- ' ---
- ' RETOUR A LA LIGNE
- ' ---
- Sub Concatenation5()
- ' Déclaration des variables
- Dim s As String
- ' Initialisation des variables
- s = "lundi" & vbCrLf & "mardi"
- ' Affichage
- MsgBox s
- End Sub
Résultat
Info
La constante vbCrLf est plus efficace en VB. Par contre, vous ne pouvez pas l'employer dans un champ calculé de requête, de formulaire ou d'état ; utilisez dans ce cas Chr(13) & Chr(10).

Dans cet article...
Article mis à jour le 16/03/2010