Manipuler les textes avec les fonctions VBA chaîne de caractères
Quelques conseils et astuces pour manipuler les chaînes de caractères avec la programmation VBA.
Les besoins de manipulations de texte et de chaîne de caractères sont innombrables. Vous trouverez quelques exemples de traitement possible. Nous sommes à votre disposition pour vous accompagner à maîtriser ces codes via une la formation sur les bases VBA.
- Fonction LEN : longueur d’une chaîne de caractères
- Fonction LEFT : extraire le texte à gauche d’une chaîne de caractères
- Fonction RIGHT : extraire le texte à droite d’une chaîne de caractères
- Fonction UCASE : Convertir en majuscule un texte
- Fonction LCASE : Convertir en minuscule un texte
- Fonction MID : Extraire x caractères à l’intérieur d’un texte
- Fonction INSTR : Renvoyer la position des caractères dans un texte
- Fonction REPLACE : Remplacer des caractères par d’autres caractères
- Fonction SPLIT : Scinder une chaîne, identifier les mots séparées par un caractère spécifique
- Fonction StrReverse : Inverser l’ordre des lettres
- Supprimer tous les accents
- Remplacer les caractères interdits pour les noms de fichier
- Dernière position d’un caractère dans une chaîne de caractères
- Supprimer les doublons dans une chaîne de caractères VBA
- Formation VBA pour manipuler les chaînes de caractères
Fonction LEN : longueur d’une chaîne de caractères
Longueur d’une chaîne de caractères VBA
La fonction VBA LEN permet de renvoyer le nombre de caractère d’un texte.
[vb]
Len("Dophis")
‘Cette commande renvoie 6[/vb]
Fonction LEFT : extraire le texte à gauche d’une chaîne de caractères
Extraire le texte à gauche d’une chaîne de caractères VBA
La fonction VBA LEFT permet d’extraire les x caractères à gauche d’un texte de départ.
[vb]Left("Dophis",3)
‘Cette commande renvoie Dop[/vb]
Fonction RIGHT : extraire le texte à droite d’une chaîne de caractères
Extraire des caractères à droite d’un texte VBA
La fonction VBA RIGHT permet d’extraire les x caractères à droite d’un texte initial.
[vb]Right("Dophis", 4)<br /><br />
‘Cette commande renvoie phis[/vb]
Fonction UCASE : Convertir en majuscule un texte
Convertir en majuscule du texte en VBA
La fonction VBA UCASE permet de passer en majuscule un texte.
[vb]Ucase("Dophis")<br /><br />
‘Cette commande renvoie DOPHIS[/vb]
Fonction LCASE : Convertir en minuscule un texte
Convertir en minuscule du texte en VBA
La fonction VBA LCASE permet de passer en minuscule un texte.
[vb]Lcase("Dophis")<br /><br />
‘Cette commande renvoie dophis[/vb]
Fonction MID : Extraire x caractères à l’intérieur d’un texte
Extraire x caractères à l’intérieur d’un texte – VBA
La fonction VBA MID permet d’extraire un nombre de caractères déterminés à l’intérieur d’une chaîne de caractères.
Il faut transmettre 3 paramètres à cette fonction :
- texte initial : par exemple “Dophis”
- la position du premier caractère dans la chaîne. Par exemple pour commencer d’extraire à partir de p dans Dophis, la position est : 3
- le nombre de caractères à extraire à partir de p. Prenons par exemple 2
[vb]Mid("Dophis",3,2)<br /><br />
‘Cette commande renvoie ph[/vb]
Fonction INSTR : Renvoyer la position des caractères dans un texte
Donner la position des caractères dans un texte – VBA
La fonction VBA InStr permet de renvoyer la position de caractères dans un texte.
3 arguments sont transmettre à cette fonction :
- point de départ de la recherche : cet argument est optionnel. S’il n’est pas renseigné, la recherche commence au premier caractère
- texte sur lequel porte la recherche. Par exemple : Dophis
- les caractères recherchés dans la chaîne. Par exemple, nous souhaitons connaître le position de ph dans Dophis
[vb]Instr(1,"Dophis","ph")<br /><br />
‘Cette commande renvoie 3<br /><br />
‘Cette commande aurait pu être écrite Instr("Dophis","ph",1)[/vb]
Cette fonction renvoie la première position trouvée. Si la chaîne de caractère que vous recherchez est présente plusieurs fois dans le texte de départ, la fonction ne renvoie que la première position.
Si le texte recherché n’est pas trouvé la fonction renvoie 0.
Fonction REPLACE : Remplacer des caractères par d’autres caractères
Remplacer des caractères par d’autres caractères – VBA
La fonction VBA Replace permet de remplacer des caractères par d’autres caractères.
3 arguments sont à transmettre à cette fonction :
- texte de départ : “Dophis : développement et formation sur mesure Excel et Access”
- texte à remplacer : Par exemple “Excel”
- texte de remplacement
[vb]Replace("Dophis : développement et formation sur mesure Excel et Access","Excel","VBA")<br /><br />
‘Cette commande renvoie "Dophis : développement et formation sur mesure VBA et Access"[/vb]
Fonction SPLIT : Scinder une chaîne, identifier les mots séparées par un caractère spécifique
Scinder une chaîne : identifier les mots séparés par un caractère spécifique
Cette fonction permet de récupérer dans un tableau l’ensemble des éléments d’une chaîne de caractères qui sont séparés par un élément à définir.
Par exemple, vous souhaitez récupérer l’ensemble des éléments séparés par ; de la chaîne suivante:
268069955055656;185065156106190;169091505522055;270071027803371;160116690501129
Function SpliterChaine(valeur As Variant , separateur As String ) As Variant Dim Tableau() As String Dim i As Integer SpliterChaine = Split(valeur, separateur) End Function |
Dans cet exemple le séparateur est un ; mais vous pouvez définir n’importe quel caractère comme séparateur.
Pour traiter la chaîne de caractère, vous réalisez ensuite une boucle sur la variable tableau que vous avez générée.
[vb]Sub TraitementChaine()<br /><br />
Dim i As Integer<br /><br />
Dim Var_traitement</p><br />
<p>Var_traitement = SpliterChaine("268069955055656;185065156106190;169091505522055;270071027803371;160116690501129", ";")<br /><br />
For i = LBound(Var_traitement) To UBound(Var_traitement)<br /><br />
‘Vous réalisez dans la boucle le traitement que vous souhaitez<br /><br />
Debug.Print Var_traitement(i)<br /><br />
Next i<br /><br />
End Sub[/vb]
Fonction StrReverse : Inverser l’ordre des lettres
Inverser l’ordre des lettres
Pour inverser l’ordre des lettres d’une chaîne de caractères, une fonction VBA permet de le faire : StrReverse.
[vb]StrReverse("1234")<br /><br />
‘cette fonction renvoie 4321[/vb]
Supprimer tous les accents
Cette fonction permet de remplacer tous les accents d’une chaîne de caractères par la même lettre sans accent.
[vb]Function SupprAccent(chaine As String)<br /><br />
Dim VarCtrl As String * 1<br /><br />
Dim VarRempl As String * 1<br /><br />
Dim i As Integer<br /><br />
Const Accent = "àáâãäåéêëèìíîïðòóôõöùúûüç"<br /><br />
Const SansAccent = "aaaaaaeeeeiiiioooooouuuuc"<br /><br />
For i = 1 To Len(Accent)<br /><br />
VarCtrl = Mid(Accent, i, 1)<br /><br />
VarRempl = Mid(SansAccent, i, 1)<br /><br />
chaine = Replace(chaine, VarCtrl, VarRempl)<br /><br />
Next<br /><br />
SupprAccent = chaine<br /><br />
End Function[/vb]
Remplacer les caractères interdits pour les noms de fichier
Lorsque vous créez des fichiers, certains caractères sont interdits dans le nom du fichier. Cette fonction permet de gérer ces caractères interdits. La fonction détecte les caractères interdits et les remplace par un caractère que vous définissez.
[vb]Function CaracteresInterdits(chaine As Variant, ListeCaracInterdit As String, new_caract As String) As Variant<br /><br />
””” Caractères interdits pour nom de fichier et répertoire : ;/:*?|"<br /><br />
Dim i As Integer<br /><br />
Dim A As String<br /><br />
On Error GoTo erreur<br /><br />
If IsNull(chaine) Then<br /><br />
CaracteresInterdits = Null<br /><br />
Exit Function<br /><br />
End If</p><br />
<p>For i = 1 To Len(ListeCaracInterdit)<br /><br />
A = Mid(ListeCaracInterdit, i, 1)<br /><br />
chaine = Replace(chaine, A, new_caract)<br /><br />
Next</p><br />
<p>CaracteresInterdits = chaine<br /><br />
Exit Function<br /><br />
erreur:<br /><br />
CaracteresInterdits = chaine<br /><br />
End Function[/vb]
Pour faire appel à cette fonction, vous pouvez utiliser la procédure VBA suivante :
[vb]Sub RemplacementCaractere()<br /><br />
Debug.Print CaracteresInterdits("nom :du<fichier;erronne.xlsx", "/*:?""<>|;", "_")<br /><br />
End Sub[/vb]
Il est possible de changer le caractère de remplacement par rien en précisant “” pour le 3ème paramètre de la fonction.
Dernière position d’un caractère dans une chaîne de caractères
Pour identifier la dernière position d’un caractère dans une chaîne de caractère, il est possible d’utiliser la fonction suivante.
A titre d’exemple vous avez le chemin complet d’accès à un fichier : nom du répertoire nom du fichier. Vous souhaitez récupérer le nom du fichier. Pour cela il faut identifier le dernier antislash () de la chaîne.
[vb]Function DernierePosition(VarTexte As Variant, VarStrRecherche As String) As Integer<br /><br />
Dim position As Integer</p><br />
<p>position = InStr(1, StrReverse(VarTexte), VarStrRecherche)<br /><br />
If position = 0 Then<br /><br />
DernierePosition = 0<br /><br />
Else<br /><br />
DernierePosition = position<br /><br />
End If<br /><br />
End Function[/vb]
Pour identifier l’antislash d’une chaîne de caractère, la fonction précédente va être mise en œuvre.
[vb]Function NomFichier(VarRepNom As String) As Variant<br /><br />
On Error GoTo erreur<br /><br />
Debug.Print DernierePosition(VarRepNom, "")<br /><br />
NomFichier = Right(VarRepNom, DernierePosition(VarRepNom, "") – 1)<br /><br />
Exit Function<br /><br />
erreur:<br /><br />
NomFichier = Null<br /><br />
End Function</p><br />
<p>Sub Exemple()<br /><br />
Debug.Print NomFichier("C:DophisExempleNomFichier.xlsx")<br /><br />
‘renvoie NomFichier.xlsx<br /><br />
End Sub[/vb]
Supprimer les doublons dans une chaîne de caractères VBA
Vous souhaitez supprimer les doublons présents dans une chaine de caractères qui sont séparés par un élément distinctif et répétitif. Par exemple vous avez un texte avec des prénom en double : “Monique Marion Jean Lucien Monique Laura Evan Marion Evan“.
[vb]Public Function SuppDoublonChaine(valeur As Variant, separateur As String) As String<br /><br />
Dim nbEspaces As String<br /><br />
Dim i As Byte<br /><br />
Dim c<br /><br />
Dim VarDic<br /><br />
Dim Temp<br /><br />
Temp = ""<br /><br />
nbEspaces = (Len(valeur) – Len(Replace(valeur, separateur, ""))) / Len(separateur)<br /><br />
Set VarDic = CreateObject("Scripting.Dictionary")<br /><br />
If valeur <> "" Then<br /><br />
For i = 0 To nbEspaces<br /><br />
c = Split(valeur, separateur)(i)<br /><br />
If Not VarDic.Exists(c) Then VarDic.Add c, c<br /><br />
Next</p><br />
<p> For Each d In VarDic.Items<br /><br />
If Temp <> "" Then<br /><br />
Temp = Temp & separateur & d<br /><br />
Else<br /><br />
Temp = d<br /><br />
End If<br /><br />
Next<br /><br />
End If<br /><br />
SuppDoublonChaine = Trim(Temp)<br /><br />
End Function[/vb]
En utilisant cette fonction le résultat est le suivant : ” Monique Marion Jean Lucien Laura Evan”. Les doublons ont été supprimés.
[vb]Sub Test()<br /><br />
Debug.Print SuppDoublonChaine("Monique Marion Jean Lucien Monique Laura Evan Marion Evan", " ")<br /><br />
End Sub[/vb]
Formation VBA pour manipuler les chaînes de caractères
Nous proposons des cours VBA sur mesure en visio ou en présentiel sur votre lieu de travail pour maîtriser l’utilisation des fonctions VBA chaîne de caractères.