VBA Remplacer une chaîne, un texte (fonction Replace)

VBA - Visual Basic for Application

VBA est merveilleux pour automatiser différentes choses dans le monde de Microsoft Office et se créer quelques beaux outils pour un travail plus efficace.

Un cas typique, qui n’apparaît pas seulement dans VBA mais aussi dans de nombreux autres langages de programmation, est le remplacement d’un texte par un autre texte. Le remplacement peut se faire intégralement ou seulement une Sous-chaîne (texte partiel) doit être remplacée dans la chaîne de caractères originale. Il peut s’agir par exemple d’une extension de fichier dans un nom de fichier, qui doit être remplacée.

La fonction de remplacement explique les paramètres

Pour cela, il existe dans VBA la fonction Replace, qui présente les paramètres et valeurs de retour suivants.

Capture d'écran de l'éditeur VBA Fonction Replace avec indication des paramètres
Paramètres de la fonction Replace

Expression

Il s’agit de la chaîne de caractères/du texte original qui doit être recherché pour une autre chaîne de caractères.

Find

Il s’agit du texte ou du fragment de texte (sous-chaîne) recherché, qui doit être trouvé dans le texte original.

Replace

Il s’agit du texte avec lequel le texte recherché doit être remplacé.

Meilleure Vente n° 1

Start

Il s’agit d’un paramètre optionnel. On peut déterminer ici à quel endroit/position du texte original la recherche et le remplacement doivent commencer. Il s’agit d’une valeur numérique. La première lettre commence à 1, ce qui est un peu inhabituel, car dans d’autres langages de programmation, on commence toujours à zéro. La valeur par défaut est 1.

Count

Il s’agit également d’un paramètre facultatif. Si la sous-chaîne recherchée apparaît plusieurs fois dans le texte original, on peut définir ici combien de fois la sous-chaîne doit être remplacée. C’est pratique si l’on ne veut remplacer que la première occurrence d’une chaîne de caractères.

Compare

On a rarement besoin de ce paramètre numérique qui détermine la méthode de comparaison. La valeur par défaut suffit ici. Sinon, il y a

[-1] vbUseCompareOption

Si ce paramètre est utilisé, une instruction Option-Compare doit précéder la procédure concernée.

[0] vbBinaryCompare

Il s’agit de comparer la représentation binaire de la chaîne recherchée et de la chaîne parcourue.

[1] vbTextCompare

Une comparaison de texte est effectuée entre la chaîne recherchée et la chaîne parcourue.

[2] vbDatabaseCompare

Utilisé uniquement dans Microsoft Access pour les comparaisons au sein des bases de données.

Valeur de retour/Return

La valeur de retour est la nouvelle chaîne de caractères avec les paramètres remplacés.

Exemples d’utilisation de la fonction Replace en VBA

Exemple simple sans paramètres optionnels

Ici, toutes les sous-chaînes trouvées sont substituées par le texte à remplacer.

Sub privé ReplaceExample1()
  Dim strOriginal As String
  Dim strSearch As String
  Dim strReplace As String
  Dim strNew As String

  strOrignal = "Ma grand-mère fait de la moto dans le poulailler!"
  strSearch = "Moto"
  strReplace = "Tricycle"

  strNew = Replace(strOrignal, strSearch, strReplace)
  'Sortie en fenêtre directe
  Debug.Print strNew
Fin Sub
Output/Résultat: Ma grand-mère fait du tricycle dans le poulailler!

Remplacer uniquement un certain nombre dans la chaîne

Dans cet exemple, une seule occurrence du texte recherché est remplacée, car le paramètre optionnel Count a été défini.

Sub privée ReplaceExample2()
Dim strOriginal As String
Dim strSearch As String
Dim strReplace As String
Dim strNew As String

strOrignal = "Si tu donnes de l'opium à Opi, l'opium tuera Opi !"
strSearch = "Opi"
strReplace = "Omi"

strNew = Replace(strOrignal, strSearch, strReplace, Count:=1)

Debug.Print strNew
Fin Sub
Output/Résultat: Si tu donnes de l'opium à Mamie, l'opium tuera Opi!

Chercher dans la chaîne à partir d’une position donnée

Cet exemple montre comment une chaîne de caractères est recherchée à partir d’une certaine position (20) et comment les occurrences de la chaîne de caractères recherchée sont remplacées. Seule la chaîne à partir de la position de départ est alors renvoyée.

Private Sub ReplaceExample3()
Dim strOriginal As String
Dim strSearch As String
Dim strReplace As String
Dim strNew As String

strOrignal = "Si tu donnes de l'opium à Opi, l'opium tuera Opi !"
strSearch = "Opium"
strReplace = "Omi"

strNew = Replace(strOrignal, strSearch, strReplace, Start:=20)

Debug.Print strNew
Fin Sub
Output/Résultat: courage Mamie de tuer Papi!

Remplacer la dernière occurrence d’une chaîne de caractères

Les paramètres optionnels Count et Start ne sont pas particulièrement adaptés pour remplacer la dernière occurrence d’un caractère ou d’une chaîne de caractères, car on ne sait jamais quelle est la longueur de la chaîne orignal. Pour remplacer la dernière occurrence d’une chaîne de caractères dans une chaîne, il faut utiliser la fonction strReverse. Celle-ci retourne simplement la chaîne de caractères, comme si on la lisait à l’envers. Notre “Opi” devient alors “ipO”. On peut ainsi effectuer un remplacement à l’envers.

Sub privée ReplaceExample4()
Dim strOriginal As String
Dim strSearch As String
Dim strReplace As String
Dim strNew As String

strOrignal = "Si tu donnes de l'opium à Opi, l'opium tuera Opi !"
strSearch = "Opi"
strReplace = "Omi"

strNew = StrReverse(Replace(StrReverse(strOrignal), StrReverse(strSearch), StrReverse(strReplace), Count:=1))

Debug.Print strNew
Fin Sub
Output/Résultat: Si tu donnes de l'opium à Opi, l'opium tuera Mamie!
Meilleure Vente n° 1
Meilleure Vente n° 2

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *