Manipuler Les Chaines De Caractères En VB6 Et VBA Excel - SilkyRoad
Maybe your like
Table des matières
Ce document présente quelques fonctions VB6 et/ou VBA Excel qui permettent de manipuler les chaines de caractères. Tous les exemples ont été testés avec VB6-SP6 et Excel2002. ♪
Article lu fois.
L'auteur
SilkyRoad

L'article
Publié le 23 novembre 2006
Version PDF Version hors-ligne
ePub, Azw et Mobi
Liens sociaux
I. Manipuler les chaines de caractères▲
I-A. Compter le nombre de caractères dans une chaine▲
Utilisez la fonction Len
VB6-VBASélectionnezMsgBox Len("Developpez") 'renvoie 10I-B. Extraire une portion de caractères en partant de la gauche▲
Utilisez la fonction Left
VB6-VBASélectionnez'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
VB6-VBASélectionnez'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
VB6-VBASélectionnez'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
VB6-VBASélectionnezMsgBox 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.
VB6-VBASélectionnez'Renvoie la position de la première occurrence d'une chaine ("e") MsgBox InStr("Developpez", "e") 'renvoie 2les 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.
VB6-VBASélectionnezMsgBox InStr(1, "Developpez", "e") 'renvoie 2un autre exemple
VB6-VBASélectionnezDim x As Integer x = InStr(1, "Developpez", "e") + 1 MsgBox InStr(x, "Developpez", "e") 'renvoie 4string1 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).
VB6-VBASélectionnezMsgBox InStr(1, "Developpez", "Z", 0) 'renvoie 0 MsgBox InStr(1, "Developpez", "z", 0) 'renvoie 10La recherche n'est pas sensible à la casse si le dernier argument « compare » est égal à 1
VB6-VBASélectionnezMsgBox InStr(1, "Developpez", "z", 1) 'renvoie 10 MsgBox InStr(1, "Developpez", "Z", 1) 'renvoie 10Nota 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 ».
VB6-VBASélectionnezSub RechercheMultiple() Dim Cible As String Cible = "engrenage,reducteur,courroie" If InStr(Cible, Range("A1")) = 0 Then MsgBox "Non" Else MsgBox "Oui" End If End SubI-F. Inverser l'ordre des caractères dans une chaine▲
Utilisez la fonction StrReverse
VB6-VBASélectionnezMsgBox StrReverse("Developpez") VB6-VBASélectionnez'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
VB6-VBASélectionnezMsgBox UCase("Developpez")I-H. Passer l'ensemble d'une chaine en minuscules▲
Utilisez la fonction LCase
VB6-VBASélectionnezMsgBox LCase("Developpez")I-I. Scinder une chaine▲
Utilisez la fonction Split. Cette fonction est disponible à partir d'Excel2000
VB6-VBASélectionnez'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 SubI-J. Remplacer des caractères dans une chaine▲
Utilisez la fonction Replace
VB6Sélectionnez'Remplace les points virgules par des points dans la variable monText Sub remplacerCaracteres() Dim monText As String monText = Replace(monText, ";", ".") End Sub VBASélectionnez'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 SubUn autre exemple
VBASélectionnez'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.
VB6-VBASélectionnezSub 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 SubI-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)
VB6-VBASélectionnez'Transformer une chaine en majuscules MsgBox StrConv("Developpez", vbUpperCase)Un autre exemple issu de l'aide en ligne Excel :
VB6-VBASélectionnez '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) NextI-L. Supprimer les caractères non imprimables dans la feuille active▲
VBASélectionnezDim Cell As Range For Each Cell In ActiveSheet.UsedRange Cell.Value = Application.WorksheetFunction.Clean(Cell.Value) NextIl 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
VBASélectionnezDim Cell As Range For Each Cell In ActiveSheet.UsedRange Cell = Application.WorksheetFunction.Trim(Cell) Next VB6SélectionnezDim 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 à droiteI-N. Vérifier si un mot existe dans le dictionnaire Office▲
VBASélectionnezSub controleDictionnaireOffice() Dim Valeur As Boolean Valeur = Application.CheckSpelling("ordinateur", , True) MsgBox Valeur End SubLe 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
VB6-VBASélectionnezDim 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.456Remarques 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.▲
VB6-VBASélectionnezSub 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 SubI-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.
VB6-VBASélectionnezDim 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▲
VBASélectionnez'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." VB6Sélectionnez'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.
VBASélectionnezIf Range("A1") Like "[A-Z]###" Then MsgBox "OK" VB6SélectionnezIf 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.
VB6-VBASélectionnezMsgBox Asc("a") 'Renvoie 97 MsgBox Asc("A") 'renvoie 65I-T. La fonction CHR▲
Permet de récupérer un caractère en fonction de sa valeur dans un jeu de caractères.
VB6-VBASélectionnezMsgBox Chr(97) 'renvoie a MsgBox Chr(65) 'renvoie AUn autre exemple pour manipuler des guillemets contenus dans une variable
VB6-VBASélectionnez'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 :
VB6-VBASélectionnez '------- 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 RequeteI-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. |
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é.
VB6-VBASélectionnezDim 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.
Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants :
Tag » Code Vba Droite
-
Fonction VBA : Right - Excel
-
Right Function (Visual Basic For Applications) - Microsoft Docs
-
Fonction Droite En VBA | Excel-Downloads
-
VBA Right$() : Macro Pour Extraire Des Caractères à Droite
-
MS Excel: How To Use The RIGHT Function (WS, VBA) - TechOnTheNet
-
Excel - Fonction DROITE En VBA
-
Excel VBA Mid Left And Right: A Complete Guide
-
Excel VBA Fonction Len, Right, Left - YouTube
-
VBA RIGHT Function (Syntax + Example) - Excel Champs
-
Right Function In VBA Excel - WallStreetMojo
-
VBA Right Function - Extract Text From Right - Automate Excel
-
How To Use VBA Right Function In Excel? - EduCBA
-
How To Use VBA Right Function In Excel (6 Examples)
-
Manipuler Les Chaînes De Caractères, Extraire Texte Par VBA - Dophis
