VBA - String assigner, comparer, concatener...

Novembre 2017




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 :

https://msdn.microsoft.com/fr-fr/VBA/Language-Reference-VBA/articles/option-compare-statement


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

Publié par pijaku.
Ce document intitulé «  VBA - String assigner, comparer, concatener...  » issu de CommentCaMarche (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.