VBA Traitements de chaines de caractères
Sommaire
- 1- Objectifs
- 2- Présentation
- 3- Qu'est-ce qu'une chaîne
- 4- Opérations sur les chaînes
- 5- Fonctions de chaîne intégrées à VBA
- 6- Instructions sur les chaînes
- 6.1- Lset <chaînel> = <chaîne2>
- 6.2- RSet <chaînel> = <chaîne2>
- 6.3- Mid(<chaînel>,<départ>[,<longueur>]) = <chaîne2>
- 7- Fonctions d'extraction
- 7.1- Len (<chaîne>)
- 7.2- Left(<chaîne>,<n>)
- 7.3- Right(<chaîne>,<n>)
- 7.4- Mid(<chaîne>,<d>[,<n>]
- 8- Fonctions de test
- 8.1- InStr([<d>,]<chaîne>,<sous-chaîne>)
- 8.2- InStrRev(<chaîne>,<sous-chaîne>[,<d>])
- 8.3- IsDate(<chaîne>)
- 8.4- ISNumeric(<chaîne>)
- 9- Fonctions de transformation
- 9.1- LCase (
) - 9.2- UCase (
) - 9.3- Trim, LTrim, RTrim
- 9.4- Replace(expression,find,replace[,start[,count, [compare]]])
- 9.5- bBinaryCompare (défaut) : binaire
- 9.6- vbTextCompare : texte (majuscules et minuscules confondues).
- 10- Fonctions de conversion
- 10.1- Conversions de caractères
- 10.2- Conversions de nombres
- 11- Comparaison de chaînes avec l’opérateur Like
- 12- Concaténer des chaînes
- 12.1- Concaténer des chaînes simples
- 12.2- Concaténer les valeurs d’une variable de matrice
- 12.3- Exemple
- 13- Activités
- 13.1- Act01
- 13.2- Act02
- 13.2.1- Sommaire du cours Excel
VBA Traitements de chaines de caractères
-
Objectifs
- Être capable de manipuler les chaines de caractères en VBA
-
Présentation
- L’utilisation de chaînes est une partie très importante de VBA. Il existe de nombreux types de manipulation que vous souhaiterez peut-être faire avec des chaînes. Celles-ci incluent des tâches telles que
- extraction d’une partie d’une chaîne
- comparaison de chaînes
- conversion de nombres en chaîne
- mise en forme d’une date pour inclure le jour de la semaine
- recherche d’un caractère dans une chaîne
- suppression des blancs
- analyse vers un tableau
- Dans ce tutoriel, vous trouverez les fonctions les plus importantes pour manipuler des chaînes dans VBA telles que la concaténation , ajouter ou supprimer des espaces supplémentaires , remplacer des chaînes ou une partie de chaînes , rechercher une partie de chaînes sur le côté gauche ou droit ou au milieu…
-
Qu’est-ce qu’une chaîne
- Le type de variable String est utilisé pour contenir des chaînes de texte. Les chaînes sont une séquence de caractères: alphabétiques, nombres, caractères spéciaux dans n’importe quelle combinaison.
- Une variable chaîne se déclare par
Dim
Texte As string. Nous déconseillons l’emploi des variables chaînes à longueur limitée (ex. Dim Nom As String10). - Les constantes chaînes se présentent entre guillemets(« ). Exemple : « Des mots … Des mots… ». Les majuscules et les espaces comptent en ce sens qu’ils seront répétés tels quels. VBA ne fait aucune analyse syntaxique dans les guillemets.
- Rappelons que si une telle chaîne doit être à cheval sur deux lignes, il faut la scinder en deux parties concaténées.
- Un paramètre important d’une chaîne est sa longueur = nombre de caractères. La chaîne de longueur O est la chaîne vide, notée « », élément neutre de la concaténation.
-
Opérations sur les chaînes
- Une donnée chaîne peut être utilisée dans une expression à droite du signe
=
. Elle peut figurer à gauche pour recevoir une valeur : Nom = « Riadh ». - La seule opération définie sur les chaînes est la concaténation ( = mise bout à bout : »Bon »+ »jour » donne « Bonjour »). En toute rigueur, l’opérateur de concaténation est
&
, mais on peut aussi employer+
. Le comportement est différent en cas de mélange avec numérique : - chaîne & chaîne donne chaîne
- chaîne + chaîne donne chaîne
- chaîne & nombre donne chaîne (le nombre est converti)
- chaîne + nombre donne message d’erreur
- nombre & nombre donne message d’erreur
- nombre + nombre donne nombre
-
Fonctions de chaîne intégrées à VBA
- Il existe des fonctions de chaîne VBA prédéfinies, qui aident les développeurs à travailler avec les chaînes de manière très efficace. Voici les méthodes String prises en charge dans VBA.
- Si String 1
- Si String 1 = String 2, StrComp renvoie 0
- Si String 1> String 2, StrComp renvoie 1
-
Instructions sur les chaînes
LSet
- Aligne à gauche une chaîne à l’intérieur d’une variable chaîne.
Mid
- Remplace un nombre spécifié de caractères dans une variable chaîne par des caractères extraits d’une autre chaîne.
RSet
- Aligne à droite une chaîne à l’intérieur d’une variable chaîne.
- On suppose
-
Lset <chaînel> = <chaîne2>
- met la chaîne2 à gauche dans chaîne1. Si chaîne2 est plus courte que chaîne1, on complète par des espaces, si elle est plus longue, on ne prend que le nombre de caractères de chaîne1,
- Len (<chaînel>). Avec les initialisations ci-dessus :
- Lset Ch1 = Ch2 donne Ch1 = « wxyz…. »
- Lset Ch1 = Ch3 donne Ch1 = « abcdefghi »
-
RSet <chaînel> = <chaîne2>
- met la chaîne2 à droite dans chaîne1. Si la chaîne2 est plus courte que la chaîne1, on complète par des espaces ; si elle est plus longue, on ne prend que le nombre de caractères de chaîne1,
Len (<chaînel>)
, mais à partir de la gauche, donc le résultat est le même que LSet. Avec les initialisations ci-dessus : -
Mid(<chaînel>,<départ>[,<longueur>]) = <chaîne2>
- remplace dans chaîne1, à partir de la position départ, longueur caractères pris dans chaîne2. Si <longueur> n’est pas fourni, on considère toute la chaîne2. Si le nombre de caractères à installer dépasse la taille disponible, on ne prend que ce qu’il faut. Avec les initialisations ci-dessus :
- Mid ( Ch1, 3) = Ch2 donne Ch1 = « 12wxyz789 »
- Mid ( Ch1, 3) = Ch3 donne Ch1 = « 12abcdefg »
- Mid(Chl,3,2) = Ch3 donne Ch1 = « 12ab56789 »
- Mid ( Ch1, 1) = Ch2 donne Ch1 = « wxyz56789 ».
- C’est cette solution et non Lset qui convient pour installer une sous-chaîne à gauche en gardant les caractères de droite.
-
Fonctions d’extraction
-
Len (<chaîne>)
- Fournit la longueur ( = nombre de caractères) de la chaîne.
Len
(11 Bonjour ») vaut 7. Len est de type Long car les chaînes peuvent dépasser 32 000 caractères. -
Left(<chaîne>,<n>)
- fournit les <n> caractères les plus à gauche de la chaîne.
Left
(« Bonjour « ,3) donne « Bon ». Si
<n> est supérieur à la longueur, on obtient toute la chaîne. Si <n> vaut 0, on obtient la chaîne vide. -
Right(<chaîne>,<n>)
- fournit les <n> caractères les plus à droite de la chaîne.
Right
(« Bonjour »,4) donne « jour ». Si
<n> est supérieur à la longueur, on obtient toute la chaîne. Si <n> vaut 0, on obtient la chaîne vide. -
Mid(<chaîne>,<d>[,<n>]
- fournit les n caractères extraits de la chaîne à partir de la position
d.Mid
(« Bonjour »,4,2) donne « jo ». Si <n> n’est pas spécifié ou est supérieur au nombre de caractères restants après d, on obtient toute la chaîne restante. Si <n> vaut 0, on obtient la chaîne vide. - Dans toutes ces questions, les positions de caractères sont comptées de gauche à droite à partir de 1.Mid(Texte,I,1) est très importante : c’est le 1° caractère de Texte, ce qui permet d’analyser une chaîne caractère par caractère.
-
Fonctions de test
-
InStr([<d>,]<chaîne>,<sous-chaîne>)
- indique si la sous-chaîne se trouve dans la chaîne; si non, le résultat est 0, si oui le résultat est la position où commence la première concordance. <d> est la position où commencer la recherche, 1 par défaut.
- Instr(« Bonjour », »jour ») donne 4;
- InStr (« Bonjour », »Jour ») donne 0 (à cause du J majuscule);
- InStr (« ABRACADABRA », »BRA » ) donne 2; InStr(3, »ABRACADABRA », »BRA ») donne 9.
-
InStrRev(<chaîne>,<sous-chaîne>[,<d>])
- agit comme InStr sauf que la recherche se fait en d’arrière en avant. Si Rep est le chemin d’accès à un dossier,
Left
(Rep, InStrRev (Rep, »\ »)-1) fournit le dossier père. -
IsDate(<chaîne>)
- est vraie si la chaîne peut représenter une date. IsDate(« 10/10/04 ») est vraie.
-
ISNumeric(<chaîne>)
- est vraie si la chaîne peut représenter un nombre. IsNumeric(« 1000 Euros ») est fausse mais IsNumeric (« 1000 € ») est vraie car l’argument s’interprète comme un format monétaire.
-
Fonctions de transformation
-
LCase (
) - renvoie la même chaîne, mais tout en minuscules. Seules les lettres sont transformées.
- LCase(« Bonjour ») vaut « bonjour ». If x = LCase (x) … teste si x ne contient pas de lettres ou que des minuscules.
-
UCase (
) - renvoie la même chaîne, mais tout en majuscules. Seules les lettres sont transformées.
- UCase (« Bonjour ») vaut « BONJOUR ». If x = UCase(x) … teste si x ne contient pas de lettres ou que des majuscules.
-
Trim, LTrim, RTrim
- Ces fonctions renvoient une copie de leur argument débarrassé des espaces à gauche (LTrim), à droite (RTrim) ou les deux (Trim). Les espaces internes restent.
- LTrim(« □□□□□ab□cd□□□□□ ») donne « ab□cd□□□□□ »
- RTrim(« □□□□□ab□cd□□□□□ ») donne « »□□□□□ab□cd »
- Trim(« »□□□□□ab□cd□□□□□ ») donne « ab□cd »
-
Replace(expression,find,replace[,start[,count, [compare]]])
- Les arguments sont nommés. On remplace dans expression les occurrences de find par replace. Si start est présent, on commence à la position qu’il indique, s’il est absent, on commence au début. Si count est présent, on fait count remplacements, s’il est absent, on fait tous les remplacements possibles. compare définit le mode de comparaison :
- vbUseCompareOption : obéit à Option Compare
-
bBinaryCompare (défaut) : binaire
-
vbTextCompare : texte (majuscules et minuscules confondues).
- La valeur renvoyée par la fonction est Mid (express ion, s tart) ; si s tart est absent, c’est la valeur de expression après transformation.
-
Fonctions de conversion
-
Conversions de caractères
- Asc(<chaîne>)
- renvoie le code (valeur numérique de la représentation binaire interne) du premier caractère de la chaîne.
- On ne l’utilise donc pratiquement qu’avec des chaînes de 1 seul caractère. Asc(« A ») vaut 65. Asc(« a ») vaut 97. Asc (« o ») vaut 48.
- Chr(<n>)
- renvoie la chaîne de 1 caractère dont le code est n. C’est le moyen d’obtenir des caractères
- impossibles à obtenir au clavier. Chr(65) est « A » ; Chr(32) est l’espace ; Chr(13) est le retour chariot, etc.
-
Conversions de nombres
- Val(<<haîne>)
- renvoie le nombre représenté par la chaîne. Il faut que la chaîne représente un nombre. Si vous connaissez le type du nombre, utilisez plutôt la fonction de conversion vers ce type CBool, CByte, CCur, CDate, CDec, CDbl, Cint, CLng, CSng.
- Str, CStr
- Ces fonctions font la conversion inverse. La différence est pour les nombres positifs : Str met un espace en tête (pour le signe), CStr n’en met pas. Str ( -2) et cstr ( -2) donnent
« -2 »; Str(2) donne « □2 »; cstr (2) donne « 2 ». Pour désigner une TextBox de BDi dont le numéro est calculé, on écrit : Controls (TextBox »+CStr(I)). - Format
- contrôle la chaîne convertie d’un nombre conformément à une chaîne de format identique (mais en anglais) à celle qu’on fournit dans un Format personnalisé d’Excel.
- Format (0.12345, »##0,00″) donne « □□0,12 »; Format (Date, « dd/mm/yyyy ») donne par exemple 11/10/2004.
- Oct et Hex
- traduisent respectivement leur argument en octal et en hexadécimal. Hex(7860) donne « 1EB4 ».
-
Comparaison de chaînes avec l’opérateur Like
- L’opérateur Like est très puissant. Il permet de comparer une variable String et un modèle. La syntaxe générale de cette instruction est la suivante :b = s Like modèle
- Où b est une variable Boolean, s est une variable String et modèle est le modèle à appliquer à la chaîne s. Si la variable s correspond au modèle, la variable b est initialisée à True. Elle est initialisée à False dans le cas contraire.
- Le modèle peut contenir un ou plusieurs caractères quelconques (des lettres, des chiffres ou des signes), mais aussi des caractères de remplacement :
-
Concaténer des chaînes
-
Concaténer des chaînes simples
- La concaténation des chaînes est réalisée à l’aide des opérateurs
&
et+
. Il est cependant conseillé de privilégier l’opérateur&
, qui ne fonctionne qu’avec les chaînes, et de conserver l’opérateur+
pour les additions. Votre code sera ainsi sans ambiguïté. - Vous pouvez concaténer toute expression qui renvoie une chaîne de caractères. Il peut s’agir d’une variable de type String comme d’une fonction renvoyant une chaîne, ou encore d’une chaîne de caractères entourée de guillemets.
-
Concaténer les valeurs d’une variable de matrice
- Si vous souhaitez créer une seule chaîne de caractères à partir des différentes valeurs d’une variable de matrice (ou variable tableau), utilisez la fonction Join selon la syntaxe suivante :
Join(SourceArray, Delimiter)
- où l’argument nommé SourceArray est la variable de matrice dont on souhaite réunir les données en une chaîne,
- et Delimiter (facultatif) la chaîne de caractères qui sera utilisée comme séparateur entre les différentes données extraites de la variable. Si Delimiter est omis, les éléments du tableau sont concaténés sans séparateur.
-
Exemple
- Dans l’exemple suivant, les jours de la semaine sont stockés dans le tableau Jours-Semaine. La boîte de dialogue représentée à la figure suivante est ensuite affichée.
- Notez qu’on utilise une virgule suivie d’un espace comme séparateur, et que l’on ajoute un point à la fi de la chaîne.
-
Activités
-
Act01
- Compter le nombre de caractères dans une cellule Excel
- La fonction
NBCAR
, permet de calculer le nombre de caractères dans Excel, peut être utilisée très facilement. Sa syntaxe très simple est la suivante :=NBCAR(référence de la cellule)
-
Act02
- Compter le nombre de mots, séparés par un espace dans une cellule Excel
- Essayez de faire l’exercice de votre côté avant de Cliquer ici !
Inchangé :
Nom de la fonction | La description |
---|---|
InStr | Renvoie la première occurrence de la sous-chaîne spécifiée. La recherche s’effectue de gauche à droite. |
InstrRev | Renvoie la première occurrence de la sous-chaîne spécifiée. La recherche s’effectue de droite à gauche. |
Lcase | Renvoie les minuscules de la chaîne spécifiée. |
Ucase | Renvoie la majuscule de la chaîne spécifiée. |
La gauche | Renvoie un nombre spécifique de caractères à partir du côté gauche de la chaîne. |
Droite | Renvoie un nombre spécifique de caractères du côté droit de la chaîne. |
Milieu | Renvoie un nombre spécifique de caractères d’une chaîne en fonction des paramètres spécifiés. |
Ltrim | Renvoie une chaîne après avoir supprimé les espaces sur le côté gauche de la chaîne spécifiée. |
Rtrim | Renvoie une chaîne après avoir supprimé les espaces sur le côté droit de la chaîne spécifiée. |
Garniture | Renvoie une valeur de chaîne après avoir supprimé les espaces vides de début et de fin. |
Len | Renvoie la longueur de la chaîne donnée. |
Remplacer | Renvoie une chaîne après avoir remplacé une chaîne par une autre chaîne. |
Espace | Remplit une chaîne avec le nombre d’espaces spécifié. |
StrComp | Renvoie une valeur entière après avoir comparé les deux chaînes spécifiées.Il peut renvoyer l’une des trois valeurs -1, 0 ou 1 en fonction des chaînes d’entrée à comparer.
|
Chaîne | Renvoie une chaîne avec un caractère spécifié le nombre de fois spécifié. |
StrReverse | Renvoie une chaîne après avoir inversé la séquence des caractères de la chaîne donnée. |
Ch1 = "123456789"
Ch2 = "wxyz"
Ch3 = "abcdefghijklmn"
RSet Chl = Ch2 donne Chl = "□□□□□wxyz"
RSet Chl = Ch3 donne Chl = "abcdefghi"
Caractère de remplacement | Signification |
---|---|
? | Un caractère quelconque |
* | zéro, un ou plusieurs caractères quelconques |
# | Un chiffre quelconque |
[A-Z] | Une lettre majuscule quelconque |
[A-CT-Z] | Une lettre majuscule comprise entre A et C ou entre T et Z |
[A-Za-z0-9] | Une lettre majuscule ou minuscule quelconque ou un chiffre |
[!G-J] | Une lettre majuscule différente de G, H, I et J |
-
Concaténer des chaînes consiste à les « accoler », c’est-à-dire à assembler plusieurs chaînes de caractères pour en créer une seule. Vous pouvez également concaténer l’ensemble des éléments d’une variable de matrice, de façon à obtenir une chaîne qui en reprenne toutes les valeurs.
Option Explicit
Sub ConcatenerUnTableau()
Dim JoursSemaine(1 To 7)
Dim n As Byte
For n = 1 To 7
JoursSemaine(n) = WeekdayName(Weekday:=n, abbreviate:=False, _
firstdayofweek:=vbMonday)
Next n
MsgBox "Les jours de la semaine sont : " & Join(JoursSemaine, ", ") & "."
End Sub