I. Manipuler les chaines de caractères▲
I-A. Compter le nombre de caractères dans une chaine▲
Utilisez la fonction Len
MsgBox
Len
(
"Developpez"
) 'renvoie 10
I-B. Extraire une portion de caractères en partant de la gauche▲
Utilisez la fonction Left
'Renvoie les trois premiers caractères d'un texte
MsgBox
Left
(
"Developpez"
, 3
) 'renvoie "Dev"
I-C. Extraire une portion de caractères en partant de la droite▲
Utilisez la fonction Right
'Renvoie les trois derniers caractères d'un texte
MsgBox
Right
(
"Developpez"
, 3
) ' renvoie "pez"
I-D. Extraire une chaine de caractères à l'intérieur d'une autre chaine▲
Utilisez la fonction Mid
'5 est la position du caractère qui marque le début de la partie à extraire
'et 2 correspond au nombre de caractères à renvoyer)
MsgBox
Mid
(
"Vendredi"
, 5
, 2
) ' renvoie "re"
Si vous souhaitez récupérer toute la chaine à partir du 5e caractère, n'indiquez pas le dernier argument
MsgBox
Mid
(
"Vendredi"
, 5
) 'Renvoie "redi"
I-E. Renvoyer la position de la première occurrence d'une chaine dans une autre chaine▲
Utilisez la fonction InStr.
Remarque
Cette fonction renvoie 0 si aucune occurrence n'est trouvée.
'Renvoie la position de la première occurrence d'une chaine ("e")
MsgBox
InStr
(
"Developpez"
, "e"
) 'renvoie 2
les arguments de la fonction : InStr(start, string1, string2, compare)
Le premier argument « start » (facultatif) permet de définir la position de départ de la recherche.
MsgBox
InStr
(
1
, "Developpez"
, "e"
) 'renvoie 2
un autre exemple
Dim
x As
Integer
x =
InStr
(
1
, "Developpez"
, "e"
) +
1
MsgBox
InStr
(
x, "Developpez"
, "e"
) 'renvoie 4
string1 contient la chaine de caractères qui va être contrôlée.
String2 contient la chaine à rechercher.
La recherche est sensible à la casse si le dernier argument « compare » (facultatif) est égal à 0, ou omis.
(Casse : signifie que la recherche n'est pas sensible aux majuscules et aux minuscules).
MsgBox
InStr
(
1
, "Developpez"
, "Z"
, 0
) 'renvoie 0
MsgBox
InStr
(
1
, "Developpez"
, "z"
, 0
) 'renvoie 10
La recherche n'est pas sensible à la casse si le dernier argument « compare » est égal à 1
MsgBox
InStr
(
1
, "Developpez"
, "z"
, 1
) 'renvoie 10
MsgBox
InStr
(
1
, "Developpez"
, "Z"
, 1
) 'renvoie 10
Nota
La fonction Instr peut aussi servir à contrôler si le contenu d'une chaine est égal à un des mots « cible » définis dans la procédure.
Cet exemple vérifie si le contenu de la cellule A1 est égal à un des trois mots indiqués dans la variable « Cible ».
Sub
RechercheMultiple
(
)
Dim
Cible As
String
Cible =
"engrenage,reducteur,courroie"
If
InStr
(
Cible, Range
(
"A1"
)) =
0
Then
MsgBox
"Non"
Else
MsgBox
"Oui"
End
If
End
Sub
I-F. Inverser l'ordre des caractères dans une chaine▲
Utilisez la fonction StrReverse
MsgBox
StrReverse
(
"Developpez"
)
'Contrôler si un mot est un palindrome( qui s'épelle de la même façon dans les deux sens)
Dim
leMot As
String
leMot =
"radar"
If
leMot =
StrReverse
(
leMot) Then
MsgBox
"Il s'agit d'un palindrome"
I-G. Passer l'ensemble d'une chaine en majuscules▲
Utilisez la fonction UCase
MsgBox
UCase
(
"Developpez"
)
I-H. Passer l'ensemble d'une chaine en minuscules▲
Utilisez la fonction LCase
MsgBox
LCase
(
"Developpez"
)
I-I. Scinder une chaine▲
Utilisez la fonction Split.
Cette fonction est disponible à partir d'Excel2000
'Extraire les données séparées par un espace dans une chaine de caractères
Sub
extractionMots
(
)
Dim
Tableau
(
) As
String
Dim
i As
Integer
'découpe la chaine en fonction des espaces " "
'le résultat de la fonction Split est stocké dans un tableau
Tableau =
Split
(
"Bienvenue sur le site Developpez.com"
, " "
)
'boucle sur le tableau pour visualiser le résultat
For
i =
0
To
UBound
(
Tableau)
'Le résultat s'affiche dans la fenêtre d'exécution de l'éditeur de macros
Debug.Print
Tableau
(
i)
Next
i
End
Sub
I-J. Remplacer des caractères dans une chaine▲
Utilisez la fonction Replace
'Remplace les points virgules par des points dans la variable monText
Sub
remplacerCaracteres
(
)
Dim
monText As
String
monText =
Replace
(
monText, ";"
, "."
)
End
Sub
'Remplace les points virgules par des points dans la plage de cellules sélectionnée
Sub
remplacerCaracteres
(
)
Dim
Cell As
Variant
For
Each
Cell In
Selection
Cell.Value
=
Replace
(
Cell.Value
, ";"
, "."
)
Next
Cell
End
Sub
Un autre exemple
'Supprimer tous les espaces dans la colonne A
Sheets
(
"Feuil1"
).Columns
(
1
).Replace
" "
, ""
L'instruction MID permet aussi d'effectuer un remplacement dans une chaine. La position de la chaine à modifier doit être préalablement connue.
Merci à Bbil pour cette astuce.
Sub
ModifChaine
(
)
Dim
St As
String
St =
"deceloppez.com"
Debug.Print
St
'Oups... une erreur de frappe sur 3° caractère...
'Utilisons Mid pour le modifier
Mid
(
St, 3
, 1
) =
"v"
Debug.Print
St
End
Sub
I-K. Convertir une chaine vers un format spécifié▲
Utilisez la fonction StrConv
Les types de format :
vbUpperCase : 1 (Convertit la chaine en majuscules)
vbLowerCase : 2 (Convertit la chaine en minuscules)
vbProperCase : 3 (Convertit la première lettre de chaque mot de la chaine en majuscule)
vbUnicode : 64 (Convertit la chaine en Unicode à l'aide de la page de code par défaut du système)
vbFromUnicode : 128 (Convertit la chaine Unicode dans la page de code par défaut du système)
'Transformer une chaine en majuscules
MsgBox
StrConv
(
"Developpez"
, vbUpperCase)
Un autre exemple issu de l'aide en ligne Excel :
'Convertit une chaine Unicode en une chaine ANSI.
Dim
i As
Long
Dim
x
(
) As
Byte
x =
StrConv
(
"ABCDEFG"
, vbFromUnicode)
For
i =
0
To
UBound
(
x)
Debug.Print
x
(
i)
Next
I-L. Supprimer les caractères non imprimables dans la feuille active▲
Dim
Cell As
Range
For
Each
Cell In
ActiveSheet.UsedRange
Cell.Value
=
Application.WorksheetFunction.Clean
(
Cell.Value
)
Next
Il n'y a pas d'équivalent en VB6.
I-M. Supprimer tous les espaces superflus à l'exception des espaces simples entre les mots▲
L'équivalent de la fonction SUPPRESPACE
Dim
Cell As
Range
For
Each
Cell In
ActiveSheet.UsedRange
Cell =
Application.WorksheetFunction.Trim
(
Cell)
Next
Dim
monText as
String
monText =
Trim
(
monText) '- suppression des espaces à gauche et à droite
monText =
LTrim
(
monText) '- suppression des espaces à gauche
monText =
RTrim
(
monText) '- suppression des espaces à droite
I-N. Vérifier si un mot existe dans le dictionnaire Office▲
Sub
controleDictionnaireOffice
(
)
Dim
Valeur As
Boolean
Valeur =
Application.CheckSpelling
(
"ordinateur"
, , True
)
MsgBox
Valeur
End
Sub
Le dernier argument (False/True) indique si la vérification doit être sensible à la casse.
I-O. La fonction Val▲
Renvoie le nombre contenu dans une chaine de caractères
Dim
Chaine As
String
Chaine =
" 21e siècle"
MsgBox
Val
(
Chaine) ' renvoie 21
Chaine =
" siècle 21"
MsgBox
Val
(
Chaine) ' renvoie 0
Chaine =
"123,456"
MsgBox
Val
(
Chaine) ' renvoie 123
Chaine =
"123.456"
MsgBox
Val
(
Chaine) ' renvoie 123.456
Remarques
L'argument « Chaine » doit impérativement être de type String.
La fonction Val ne reconnait que le point comme séparateur décimal.
I-P. Extraire toutes les valeurs numériques (entiers et décimales) contenues dans une chaine.▲
Sub
extraireValeursNumeriques_DansChaine
(
)
Dim
i As
Byte, Nb As
Byte
Dim
Cible As
String
, Resultat As
String
Dim
Nombre As
Double
Cible =
"12,3azerty23,5 67"
'Pour que fonction Val puisse reconnaitre les décimales: Remplacement des
'virgules par des points
Cible =
Replace
(
Cible, ","
, "."
)
'Pour gérer deux nombres qui se suivent: remplacement des espaces
'par un caractère Alpha
Cible =
Replace
(
Cible, " "
, "x"
)
For
i =
1
To
Len
(
Cible)
If
IsNumeric
(
Mid
(
Cible, i, 1
)) Then
Nombre =
Val
(
Mid
(
Cible, i, Len
(
Cible) -
i +
1
))
Nb =
Nb +
1
Resultat =
Resultat &
Nombre &
vbLf
i =
i +
Len
(
Str
(
Nombre)) -
1
End
If
Next
MsgBox
"Il y a "
&
Nb &
" valeurs numériques dans la cellule "
&
vbLf
&
Resultat
End
Sub
I-Q. Utiliser Option compare▲
L'instruction Option Compare définit la méthode de comparaison de chaines. Si le module ne contient pas d'instruction Option Compare, la méthode de comparaison de texte par défaut est Binary.
Option Compare doit être placé tout en haut du module, avant toute procédure.
I-Q-1. Option compare Text▲
Les comparaisons ne distinguent pas les majuscules des minuscules.
I-Q-2. Option compare Binary▲
Les comparaisons sont basées sur la représentation binaire interne des caractères.
Dim
x As
Boolean
x =
"A"
>
"a"
MsgBox
x 'renvoie Faux
x =
"A"
<
"a"
MsgBox
x 'renvoie Vrai
x =
"a"
<
"b"
MsgBox
x 'renvoie Vrai
x =
"b"
<
"a"
MsgBox
x 'renvoie Faux
'Exemples:
'A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
I-R. Comparer deux chaines en utilisant l'opérateur LIKE▲
'Vérifie si la chaine DVP existe dans la cellule A1
If
Range
(
"A1"
).Value
Like "*DVP*"
Then
MsgBox
"Le mot ""DVP"" existe dans la cellule A1."
'Vérifie si la chaine DVP existe dans la chaine monText
If
monText Like "*DVP*"
Then
MsgBox
"Le mot ""DVP"" existe dans la chaine monText."
La fonction LIKE permet aussi de contrôler le format d'une chaine.
Cet exemple vérifie que le premier caractère est une lettre majuscule suivie de trois caractères numériques (Styles corrects: B124, F456… ), dans la cellule A1.
La procédure est sensible à la casse.
If
Range
(
"A1"
) Like "[A-Z]###"
Then
MsgBox
"OK"
If
monText Like "[A-Z]###"
Then
MsgBox
"OK"
I-S. La fonction ASC▲
Permet de récupérer la valeur d'un caractère dans un jeu de caractères.
MsgBox
Asc
(
"a"
) 'Renvoie 97
MsgBox
Asc
(
"A"
) 'renvoie 65
I-T. La fonction CHR▲
Permet de récupérer un caractère en fonction de sa valeur dans un jeu de caractères.
MsgBox
Chr
(
97
) 'renvoie a
MsgBox
Chr
(
65
) 'renvoie A
Un autre exemple pour manipuler des guillemets contenus dans une variable
'Remplace le caractère guillemet " par un point d'exclamation dans une chaine
Dim
strVariable As
String
strVariable =
Range
(
"A1"
)
MsgBox
Replace
(
strVariable, Chr
(
34
), "!"
)
I-U. Découper une longue chaine de caractères sans couper les mots▲
Exemple pour scinder une requête SQL dans une variable :
'------- procedure pour scinder la requete -------------
'La chaine sera scindée si sa longueur est supérieure à 80 caractères
Cible =
Requete
Requete =
""
For
i =
1
To
Len
(
Cible)
'Recherche le premier espace après le 80e caractère
X =
InStr
(
80
, Cible, " "
)
If
X =
0
Then
Chaine =
Cible
Requete =
Requete &
""""
&
Chaine &
""""
Exit
For
End
If
Chaine =
Mid
(
Cible, 1
, X)
Requete =
Requete &
""""
&
Chaine &
""" & _"
&
vbCrLf
Cible =
Mid
(
Cible, Len
(
Chaine) +
1
)
Next
Debug.Print
Requete
I-V. Vérifier la présence d'une chaine dans un tableau à une dimension▲
Utilisez la fonction Filter.
Cette fonction renvoie un tableau correspondant aux critères de filtre spécifiés.
Filter(sourcesrray, match[, include[, compare]])
Sourcesrray est le tableau de chaines à une dimension dans lequel la recherche doit être effectuée.
Match est la chaine à rechercher.
Include
Attribuez la valeur True pour que la fonction renvoie les éléments qui contiennent la chaine match spécifiée.
Attribuez la valeur False pour que la fonction renvoie les éléments qui ne contiennent pas la chaine match spécifiée.
Compare indique le type de comparaison de chaine à utiliser.
Constante |
Valeur |
Description |
---|---|---|
vbBinaryCompare |
0 |
Les comparaisons distinguent les majuscules des minuscules. |
vbTextCompare |
1 |
Les comparaisons ne distinguent pas les majuscules des minuscules: Valeur par défaut si l'argument n'est pas spécifié. |
vbDatabaseCompare |
2 |
Microsoft Access seulement. Effectue une comparaison basée sur des informations contenues dans votre base de données. |
Dim
DataString
(
3
) As
String
Dim
InString
(
) As
String
Dim
i As
Integer
'Remplissage du tableau qui va être testé
DataString
(
0
) =
"chaine 1"
DataString
(
1
) =
"string 2"
DataString
(
2
) =
"chaine 3"
DataString
(
3
) =
"string 4"
'"DataString" est le tableau dans lequel doit être effectué la recherche.
'"str" est la chaine à rechercher.
'La fonction Filter renvoie le tableau "InString" contenant les éléments
'qui répondent aux critères de la recherche.
InString =
Filter
(
DataString, "str"
, True
)
'Boucle sur le tableau afin de visualiser les éléments
'qui répondent aux critères de recherche.
For
i =
0
To
UBound
(
InString)
Debug.Print
InString
(
i)
Next
i
I-W. Créer une jonction entre les chaines contenues dans un tableau▲
Utilisez la fonction Join.
Join(sourcearray[, delimiter])
Sourcearray est le tableau à une dimension contenant les chaines à joindre.
Delimiter (Facultatif) spécifie le séparateur à utiliser entre les éléments du tableau, lors de la jonction. Les éléments sont séparés par un espace si l'argument Delimiter n'est pas spécifié.
Dim
Tableau
(
2
) As
String
Tableau
(
0
) =
"Chaine01"
Tableau
(
1
) =
"Chaine02"
Tableau
(
2
) =
"Chaine03"
'Regroupe les chaines du tableau, séparées par un point virgule ";"
MsgBox
Join
(
Tableau, ";"
)
'Regroupe les chaines du tableau sans séparateur
MsgBox
Join
(
Tableau, ""
)
'Les éléments sont séparés par un espace si l'argument Delimiter n'est
'pas spécifié.
MsgBox
Join
(
Tableau)
'Regroupe les chaines du tableau et ajout d'un saut de ligne
'entre chaque élément.
MsgBox
Join
(
Tableau, vbLf
)
II. Remerciements▲
Merci à Bbil et ThierryAIM pour leur relecture, contribution et conseils avisés.