Astuce VBA : la fonction Replace

La fonction Replace remplace des valeurs par d'autres à l'intérieur d'une chaîne de caractères (c'est plus ou moins l'équivalent de la fonction Excel SUBSTITUE).

Utilisation :

Replace(texte, valeur_avant, valeur_après)

ou

Replace(texte, valeur_avant, valeur_après, départ, nombre, casse)


Exemple d'utilisation

Pour mieux comprendre, voici un exemple simple dont l'objectif est de remplacer les - par des espaces :

Sub remplacer()

    ma_chaine = "CH-34-763-92-FR-1"
   
    MsgBox Replace(ma_chaine, "-", " ") 'Renvoie : CH 34 763 92 FR 1

End Sub

Astuce : pour supprimer des valeurs, entrez en chaîne vide "" comme valeur de remplacement :

Sub remplacer()

    ma_chaine = "CH-34-763-92-FR-1"
   
    MsgBox Replace(ma_chaine, "-", "") 'Renvoie : CH3476392FR1

End Sub

Exemple avec "départ" et "nombre"

Dans certains cas, il est utile de ne remplacer qu'une partie des valeurs trouvées par la fonction. Dans ce cas, l'argument "nombre" devra être renseigné.

Dans ce nouvel exemple, l'objectif sera de mettre en forme CH-34-763-92-FR-1 pour obtenir ce résultat CH 34.763.92.FR-1.

Pour éviter des coupures de texte, laissez "départ" à 1 et entrez dans "nombre" le nombre de remplacements à effectuer.

Sub remplacer()

    ma_chaine = "CH-34-763-92-FR-1"
   
    'Remplacement des 4 premiers tirets par des points
    ma_chaine = Replace(ma_chaine, "-", ".", 1, 4)
   
    'Remplacement du premier point par un espace
    ma_chaine = Replace(ma_chaine, ".", " ", 1, 1)
   
    'Résultat
    MsgBox ma_chaine 'Renvoie : CH 34.763.92.FR-1

End Sub

Exemple avec "casse"

Le dernier argument facultatif permet de définir s'il faut tenir compte ou non de la casse (par défaut, la fonction fait la différence entre majuscules et minuscules).

Pour ne pas faire de distinction, entrez la valeur 1 :

Sub remplacer()

    ma_chaine = "CH-34-763-92-FR-1"
   
    MsgBox Replace(ma_chaine, "-fr", "") 'Renvoie : CH-34-763-92-FR-1
    MsgBox Replace(ma_chaine, "-fr", "", , , 0) 'Renvoie : CH-34-763-92-FR-1
    MsgBox Replace(ma_chaine, "-fr", "", , , 1) 'Renvoie : CH-34-763-92-1

End Sub