VBA - String assigner, comparer, concatener...
Introduction
Il s'agit ici de décrire les "opérations" de base sur les chaînes de caractères.
Tout est dit dans les commentaires des fonctions proposées.
Assigner
Création et destruction d'une variable String :
Sub String_Creation() 'String création et destruction Dim myString As String 'Ici, ma variable myString existe, est créée, et vaut : "" End Sub '==> Ici, ma variable myString est détruite!
Sub String_Assignement() Dim myString$ 'Le symbole $ remplace As String 'Ici, ma variable myString existe, est créée, et vaut : "" 'assignements : myString = vbNullString 'retourne : "" myString = "Hello World" 'retourne : "Hello World" myString = String(12, "A") 'retourne : "AAAAAAAAAAAA" End Sub
Comparaison
A lire impérativement :
Sub String_Comparaison() 'String comparaison Dim A$, B$, C$ If A = B Then Debug.Print "A = B" A = "creation": B = "destruction": C = "CREATION" 'test egalité : (opérateur =) If A = B Then Debug.Print A & " = " & B 'utiles pour le tri alphabétique : (opérateur < et >) ElseIf A > B Then Debug.Print A & " > " & B Else 'ici : A < B Debug.Print A & " < " & B End If 'test si A est différent de C If A <> C Then Debug.Print A & " et " & B & " sont différents." 'même test sans casse If UCase(A) = UCase(C) Then Debug.Print A & " = " & C & " (sans casse)" 'opérateur Like : If A Like "*ation" Then Debug.Print A & " Like *ation" If Not B Like "*ation" Then Debug.Print B & " Not Like *ation" End Sub
A voir également : https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/like-operator
Clonage copie
Sub String_Clone_Copy() Dim A As String, B$ A = "Hello world!" 'clonage : B = A End Sub
Test si String est vide
Sub Test_Si_Vide() Dim A As String, B As Variant Debug.Print IsEmpty(A) 'retourne Faux Debug.Print IsEmpty(Null) 'retourne Faux Debug.Print IsEmpty(B) 'retourne Vrai ==> B est un Variant Debug.Print A = vbNullString 'retourne Vrai Debug.Print StrPtr(A) 'retourne 0 (zéro) 'Appuyer sur le bouton OK sans saisir de donnée dans l'Inputbox : A = InputBox("Ne rien saisir et valider par OK : ") Debug.Print A = "" 'retourne Vrai Debug.Print IsEmpty(A) 'retourne Faux Debug.Print StrPtr(A) = 0 'retourne Faux 'Appuyez sur le bouton ANNULER (avec ou sans saisie de donnée) A = InputBox("Appuyer sur le buoton annuler : ") Debug.Print StrPtr(A) = 0 'retourne Vrai Debug.Print IsEmpty(A) 'retourne Faux Debug.Print A = "" 'retourne Vrai 'Note : StrPtr est un bon moyen de savoir si vous avez annulé une InputBox End Sub
Ajouter à un String - Concaténer
Sub Ajouter_A_string() Dim A As String A = "Hello worl" Debug.Print A & Chr(100) 'retourne : Hello world Debug.Print A & "d" 'retourne : Hello world End Sub
Sub Concatener() Dim A$, B As String A = "Hello" B = "world" Debug.Print A & " " & B 'retourne : Hello world 'Si vous êtes surs que A et B sont des Strings : Debug.Print A + " " + B 'retourne : Hello world End Sub
Extraire une sous-chaîne
Sub ExtraireDeString() Dim A$, B As String A = "Hello world" B = Mid(A, 3, 8) Debug.Print B 'retourne : llo worl End Sub
Remplacer un caractère
Remplacer chaque occurrence d'un caractère dans un String
Sub ReplaceInString() 'cet exemple remplace le l par un espace Dim A$, B As String, C$ A = "Hello world" B = Chr(108) ' "l" C = " " Debug.Print Replace(A, B, C) 'retourne : He o wor d End Sub
Inverser les caractères d'un String
Pour l'exemple, testons si la chaîne est un palindrome :
Sub Test_Palindrome() Debug.Print IsPalindrome("Un roc lamina l animal cornu") 'retourne Vrai End Sub Function IsPalindrome(txt As String) As Boolean Dim tempTxt As String tempTxt = LCase(Replace(txt, " ", "")) IsPalindrome = (tempTxt = StrReverse(tempTxt)) End Function
Placer chaque caractère dans un Array
Sub Eclater_String() Dim tb, Ch As String Ch = "Bonjour tout le monde!" tb = Split(StrConv(Ch, vbUnicode), Chr(0)) 'retourne un tableau contenant chaque caractère de la chaîne (espaces compris) Debug.Print Join(tb, Chr(124) & " ") End Sub
Split spécial
Cette fonction splitte une chaîne de caractère selon le changement de caractère.
Exemple : CnnnTY va retourner : (C, nnn, T, Y)
Exemple d'appel :
Sub Split_String_change_character() Dim myArr() As String, t As String Const STRINPUT As String = "gHHH5YY++///\" Const SEP As String = ", " myArr = Split_Special(STRINPUT) t = Join(myArr, SEP) Debug.Print Left(t, Len(t) - Len(SEP)) End Sub
Code de la fonction :
Function Split_Special(Ch As String) As String() 'retourne un Array de Strings Dim tb, i&, st As String, cpt As Long, R() As String tb = Split(StrConv(Ch, vbUnicode), Chr(0)) st = tb(LBound(tb)) ReDim R(cpt) R(cpt) = st For i = 1 To UBound(tb) If tb(i) = st Then R(cpt) = R(cpt) & st Else st = tb(i) cpt = cpt + 1 ReDim Preserve R(cpt) R(cpt) = st End If Next Split_Special = R End Function
Ce document intitulé « VBA - String assigner, comparer, concatener... » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.