Manipuler les chaînes de caractères
Objectifs du chapitre
Comme vous avez pu le voir dans le chapitre Les variables, les constantes, le type String fait partie des types de données basiques. C’est probablement celui que vous serez amené à manipuler le plus souvent, notamment au travers des fichiers texte qui pourraient être à traiter. Ce chapitre a pour objectif de vous montrer les principales fonctions qui peuvent vous servir pour manipuler des chaînes de caractères. Il en existe d’autres, bien plus rarement utilisées.
À la fin de ce chapitre, vous trouverez une série d’exercices pour vous entraîner.
Concaténer les chaînes : &
Le terme concaténer en programmation signifie mettre bout à bout, par exemple, la concaténation de « Luke » et « Skywalker » donne « Luke Skywalker ». Pour concaténer en VBA, vous pouvez utiliser le caractère &, qui se prononce esperluette en français et qui est souvent appelé "et commercial". La syntaxe générale sera la suivante :
Dim VotreVariable As String
VotreVariable = "abc" & "def"
'La variable VotreVariable aura alors la valeur "abcdef"
Exemple 1 : concaténer deux chaînes de caractères
Cet opérateur vous permettra de mettre bout à bout des chaînes de caractères mais également des valeurs numériques ou encore des dates.
Le symbole + permet également la concaténation, mais comme vous l’avez vu dans le chapitre précédent, il sert également comme opérateur d’addition pour les valeurs numériques.
Si par exemple, vous souhaitez transformer 1 et 2 en « 12 », il vous faudra utiliser :
Dim Texte As String
Texte = 1 & 2 'donne la valeur "12"
'alors que
Texte = 1 + 2 'donne la valeur "3"
Exemple 2 : privilégier...
Longueur d’une chaîne : Len()
Lorsque vous souhaitez renseigner des informations, ou simplement valider que les données renseignées sont cohérentes, par exemple une longueur de code postal, celle d’un identifiant ou encore d’un numéro de colis, l’information sur la longueur d’une chaîne de caractères vous sera très utile. La fonction qui vous permet de récupérer cette longueur est Len(). Cette fonction prend en paramètre la chaîne de caractères dont vous voulez connaître la longueur, et sa syntaxe est la suivante.
Dim ChaineQuelconque As String
'Alimentation de la chaîne ailleurs dans le programme
Dim Longueur As Long
Longueur = Len(ChaineQuelconque)
Exemple 4 : utilisation de la fonction Len pour connaître la longueur d’une chaîne de caractères
La fonction retournera le nombre de caractères de la chaîne, y compris les espaces ou caractères invisibles, comme les retours à la ligne. Une chaîne vide aura donc une longueur de 0.
Voici quelques exemples :
Dim Accueil As String, Titre As String
Accueil = "Bonjour"
Titre = "Madame"
MsgBox Len(Accueil) 'Affiche 7
MsgBox Len(Titre) 'Affiche 6
Msbox Len(Accueil & " " & Titre) 'affiche 14 (7 + 1 + 6)
Exemple 5 :...
Portions d’un texte : Left(), Right(), Mid()
Lorsque vous travaillez sur des chaînes comportant plusieurs informations, et que vous souhaitez découper cette chaîne principale en une ou plusieurs autres chaînes de plus petites tailles, vous disposez des trois fonctions élémentaires Left(), Right() et Mid(). Lorsque vous manipulez des libellés de dossier, avec une certaine nomenclature, ou que vous avez des noms de fichiers avec des noms toujours similaires, comme ABC_DEF_2021 ou DossierXXX456, les trois fonctions suivantes vous permettront d’aller chercher les bouts de texte que vous souhaitez récupérer.
À noter que lorsque vous travaillez avec VBA, la numérotation des caractères commence par 1. Ainsi dans la chaîne « ABCD », le 3e caractère est « C ».
Prendre les caractères de gauche : Left()
Lorsque vous souhaitez récupérer les X premiers caractères d’un texte, la fonction Left() est toute désignée. Elle se nomme ainsi car elle permet de récupérer les caractères de gauche. Cette fonction prend en paramètre le texte d’origine, ainsi que le nombre de caractères que vous souhaitez extraire, et retourne la chaîne correspondante. La syntaxe générale de cette fonction est la suivante :
Dim Resultat As String
Resultat = Left(Texte_Long,NombreDeCaracteres)
Exemple 7 : syntaxe générale de la fonction Left()...
Majuscules et minuscules : UCase(), LCase()
Lorsque vous manipulez des chaînes de caractères, il est possible que vous deviez passer l’ensemble des caractères en majuscules, pour un nom de famille par exemple, ou inversement en minuscules. Cette notion de majuscule et minuscule pour des caractères est appelée la casse en informatique. On parle de bas-de-casse pour les minuscules, et de haut de casse pour les majuscules. Vous pouvez l’utiliser pour des plaques d’immatriculation (traditionnellement en capitales) ou encore des adresses postales (en minuscules).
Transformer une chaîne en lettres capitales / majuscules : UCase()
La fonction UCase(), qui est un diminutif de Upper Case soit haut de casse en français, est une fonction qui prend en paramètre la chaîne de caractères à transformer, et retourne son équivalent uniquement composé de lettres capitales (y compris les caractères accentués). La syntaxe générale de cette fonction est la suivante.
VariableResultat = UCase(TexteOriginal)
Exemple 15 : syntaxe générale de la fonction UCase()
Et voici un exemple d’utilisation :
Dim TexteExemple As String
TexteExemple = "Bonjour à tous"
MsgBox UCase(TexteExemple) 'affiche BONJOUR À TOUS
Exemple 16 : utilisation de la fonction UCase()
Lorsque votre chaîne de caractères...
Présence d’une sous-chaîne dans une chaîne : InStr(), InstrRev() et Like
Parfois, vous avez besoin de savoir si un mot ou une lettre est quelque part dans une chaîne de caractères, ou encore vous cherchez à savoir quel est le dernier emplacement d’une sous-chaîne à l’intérieur d’un texte d’origine. Les fonctions InStr() et InStrRev() vous aideront à arriver à vos fins. Elles retournent la position de la chaîne à l’intérieur d’une chaîne.
Obtenir la position d’une chaîne : InStr()
Lorsque vous cherchez à savoir à quelle position se situe un caractère ou une chaîne de caractères, la fonction InStr() est toute désignée. Cette fonction a pour syntaxe générale :
Dim Position As Integer
Position = InStr([PositionDeDebutDeRecherche], [TexteDansLequelOnCherche],
[TexteQueLonCherche], [ModeDeComparaison])
Exemple 20 : syntaxe générale de la fonction InStr()
Le premier des paramètres attendus dans cette fonction est la position à partir de laquelle la recherche doit être effectuée dans la chaîne (rappel : la chaîne commence au caractère 1, aussi si le paramètre est omis, la valeur par défaut sera 1). Viennent ensuite la chaîne dans laquelle la recherche est effectuée, et la chaîne qui est recherchée.
En dernier paramètre optionnel, vous pouvez préciser si la recherche doit faire une distinction entre les valeurs « X » et « x » (constante...
Effacer des espaces en trop : Trim()
Parmi les fonctions très pratiques pour manipuler les chaînes de caractères, voici les trois qui permettent de supprimer les espaces qui se situent en début ou en fin de chaîne, qui reproduit ainsi le comportement de la formule SUPPRESPACE, laissant les espaces en milieu de chaîne. Cette fonction permet notamment de corriger les erreurs de saisie, lorsqu’un utilisateur ajoute involontaire un caractère espace en bout de texte par exemple.
Cette fonction Trim() prend en paramètre une chaîne de caractères, et retourne une chaîne en ayant retiré les espaces qui se situeraient en début et en fin de chaîne. La syntaxe générale de cette fonction est la suivante :
Dim Resultat As String
Resultat = Trim(ChaineDeDepart)
Exemple 27 : syntaxe générale de la fonction Trim()
Un exemple d’utilisation de cette fonction :
MsgBox Len(Trim(" Bonjour " )) ' Affiche la longueur de "Bonjour", c'est-à-dire 7.
Exemple 27 : Cas d'utilisation de la fonction Trim()
Il est à noter que si aucun espace n’est présent ni en début ni en fin de chaîne, alors la fonction retourne la même chaîne que celle qui lui est passée en paramètre.
Il existe deux autres fonctions similaires à...
Découper en un tableau, regrouper : Split, Join
Lorsque vous avez une chaîne de caractères dans laquelle vos informations sont délimitées par des caractères de séparation fixe, comme la virgule, le point-virgule, la tabulation ou tout autre caractère, il est possible de transformer cette chaîne en tableau de valeurs.
Fonction Split()
La fonction Split() permet cette manipulation. La fonction retourne un Variant, car le nombre d’éléments sera variable.
La syntaxe générale de la fonction est la suivante :
Split(Texte, Delimiteur, [Limite],[Comparaison])
Exemple 28 : syntaxe générale de la fonction Split.
Le premier paramètre Texte correspond à la chaîne de caractères que vous souhaitez découper, et Delimiteur correspond à la chaîne qui permet ce découpage.
Par exemple, vous pouvez l’utiliser ainsi :
Dim Tableau As Variant
Tableau = Split("VBA Excel 2023", " " )
?Tableau(0) ' "VBA"
?Tableau(1) ' "Excel"
?Tableau(2) ' "2023"
Exemple 29 : utilisation de la fonction Split
Il vous est ainsi possible d’obtenir des sous-chaînes à partir d’une chaîne principale.
Le paramètre Limite permet d’indiquer le nombre de sous-chaînes qui seront renvoyées par...
Travailler en combinant plusieurs de ces fonctions
Lorsque vient le temps de travailler avec des chaînes, il est très probable que vous ayez besoin de manipuler de façon plus intense les blocs de données, et travailler en combinant les différentes fonctions vues jusqu’ici sera d’une grand aide.
Vous pouvez avoir besoin de récupérer les caractères qui suivent un mot-clé dans une chaîne, par exemple « Nom : » dans la chaîne « Prénom : Jean-Philippe / Nom : André », et mettre le tout en majuscules, soit obtenir en sortie ANDRÉ. Le point important dans ce genre de situation est de bien découper le raisonnement dans un premier temps, et de traiter les points pas à pas.
Voici un exemple de solution :
Sub IsolerLeNom()
Dim strEntree As String
strEntree = "Prénom : Jean-Philippe / Nom : André"
'1ere étape, on détermine l'emplacement du Nom : à partir de la fin
Dim iEmplacementNom As Integer
iEmplacementNom = InStrRev(strEntree, "Nom :")
'2e étape on récupère les caractères situés après Nom :
Dim strSousChaine As String ...
Exercices
Concaténation de chaînes
Symbole au choix
Écrivez une fonction, nommée Concatenation, de portée publique.
Cette fonction prend en paramètres deux chaînes de caractères, nommées ChaineA et ChaineB.
Cette fonction retournera une chaîne de caractère contenant ChaineA et ChaineB séparées par le caractère espace « ».
Créez une macro AfficherConcatenation.
Cette macro affichera le retour de la fonction Concatenation, en lui passant les valeurs « Bonjour » et « bienvenue ».
Exécutez la macro AfficherConcatenation.
Le résultat attendu est "Bonjour bienvenue".
Un seul symbole possible
Écrivez une fonction, nommée ConcatenationNombres, de portée publique.
Cette fonction prend en paramètres deux valeurs numériques entières, nommées NombreA et NombreB.
Cette fonction retournera une chaîne de caractère contenant NombreA et NombreB sans caractère de séparation.
Créez une macro AfficherConcatenationNombres.
Cette macro affichera le retour de la fonction ConcatenationNombres en lui passant les valeurs 20 et 5.
Exécutez la macro AfficherConcatenationNombres.
Le résultat attendu est 205.
Portions de chaînes
Ces exercices ont pour but de vous faire manipuler les fonctions qui retournent une partie d’une chaîne de caractères. Il existe plusieurs solutions possibles à chaque exercice.
Plus court ou plus long
Écrivez une fonction PlusLongQue, de portée publique, qui retourne une valeur booléenne.
Cette fonction prend deux paramètres en entrée, une chaîne de caractères strChaine, et une valeur numérique entière...