Les chaînes de caractères en VBA : Len, Left, Right, Mid, UCase, InStr, Trim, Split et Join
Une chaîne de caractères (type String) est un texte : un nom, un code article, une ligne importée d’un fichier. VBA fournit des fonctions pour la mesurer (Len), en extraire une partie (Left, Right, Mid), changer sa casse (UCase, LCase), y chercher un texte (InStr, Like), la nettoyer (Trim) ou la découper (Split, Join). Dans chaque simulateur, les caractères sont numérotés à partir de 1 et les espaces sont affichés « · ». Voir aussi les opérateurs (dont & et Like) et les boucles.
Len() : la longueur d’une chaîne
Len(texte) renvoie le nombre de caractères d’une chaîne, espaces compris. Elle sert à vérifier une saisie (un code postal fait 5 caractères), à repérer une cellule vide (Len(Cells(i, 1).Value) = 0) ou à calculer une position pour Right et Mid. Une chaîne vide "" a une longueur de 0.
If Len(cp) <> 5 Then MsgBox "Code postal incorrect" : un test simple avant d’enregistrer une fiche.Len(1500) renvoie 4 : VBA convertit d’abord le nombre en texte.Left(), Right() et Mid() : extraire une partie
Left(texte, n) renvoie les n premiers caractères, Right(texte, n) les n derniers. Mid(texte, départ, longueur) renvoie une partie située au milieu : à partir du caractère départ (le premier caractère porte le numéro 1), sur longueur caractères ; sans longueur, Mid renvoie tout jusqu’à la fin. Ces fonctions découpent des codes structurés : EXC-2026-Lille contient un logiciel, une année et une ville.
Right(t, Len(t) - 4), ou plus simplement Mid(t, 5).Mid(t, 0, 3) provoque l’erreur 5, tout comme une longueur négative.Majuscules et minuscules : UCase() et LCase()
UCase(texte) met tout en majuscules, LCase(texte) tout en minuscules. Pour une majuscule au début de chaque mot (comme NOMPROPRE dans Excel), utilisez StrConv(texte, vbProperCase). Par défaut, VBA compare les textes en tenant compte de la casse : « Excel » et « EXCEL » sont différents. Comparer les deux versions en majuscules règle le problème.
Présence d’une sous-chaîne : InStr() et Like
InStr(texte, cherché) renvoie la position de la première occurrence du texte cherché, ou 0 s’il est absent. On l’utilise donc dans un test : If InStr(t, "Excel") > 0 Then. La forme complète InStr(départ, texte, cherché, vbTextCompare) commence la recherche plus loin et ignore la casse. InStrRev cherche depuis la fin. L’opérateur Like répond seulement Vrai ou Faux, mais accepte des caractères génériques : t Like "*Excel*".
> 0 rend l’intention claire et évite les erreurs avec Not.code Like "EXC-####".Trim() : effacer des espaces
Les données saisies ou importées contiennent souvent des espaces en trop, invisibles mais qui faussent les comparaisons : "Durand " n’est pas égal à "Durand". Trim(texte) supprime les espaces au début et à la fin, LTrim seulement à gauche, RTrim seulement à droite. Les espaces à l’intérieur du texte sont conservés ; pour réduire les espaces multiples à un seul, utilisez la fonction de feuille Application.WorksheetFunction.Trim (SUPPRESPACE).
If UCase(Trim(Cells(i, 1).Value)) = "EXCEL" Then : Trim et UCase ensemble neutralisent les espaces et la casse.Replace(t, Chr(160), " ") avant Trim.Split() et Join() : découper et assembler
Split(texte, séparateur) découpe une chaîne en un tableau de chaînes, à chaque séparateur. Le premier élément porte l’indice 0 et le dernier UBound(tableau). Sans séparateur, Split découpe sur l’espace. Join(tableau, séparateur) fait l’inverse : il assemble les éléments en une seule chaîne. C’est la méthode la plus simple pour lire une ligne CSV, séparer un prénom d’un nom ou reconstituer une liste.
Dim t() As String, puis t = Split(ligne, ";").t(0). Un indice supérieur à UBound(t) provoque l’erreur 9.Exercice : nettoyer, extraire, chercher et découper
Classeur d’exercice (Énoncé et Corrigé)
- Enregistrez le classeur en .xlsm et collez le code de la feuille « Code VBA » dans un module standard.
- Feuille Données : exécutez
Nettoyer(Trim, StrConv, Len) puisExtraire(Left, Mid). - Exécutez
Compter(InStr, Like) etDecouper(Split, Join). - Répondez aux questions de la feuille Contrôle.