Replace() – Fonction VBA pour remplacer du texte

VBA: fonction REPLACE

Fonction VBA Replace permet de remplacer un texte par un autre dans une chaîne de caractères. En plus simple, elle vous permet, par exemple de remplacer "en cours" par "terminée" dans le texte "tâche en cours"…

La syntaxe de la fonction Replace

La fonction a un nombre impressionnant de 6 paramètres: 3 obligatoires et 3 facultatifs mais ne vous laissez pas décourager! Son utilisation est assez simple et directe. Et il s'agit d'une fonction qui ouvre un large éventail de possibilités de travail avec des données textuelles en Excel…

x = Replace(TexteOriginal, TexteARemplacer, NouveauTexte, [PositionDebut], [NombreDeRemplacements], [TypeDeComparaison])

Dans l'éditeur VBA, les paramètres de la fonction Replace ont les noms anglais suivants:

x = Replace(Expression, Find, Replace, [Start], [Count], [Compare])

L'explication des paramètres utilisés dans la fonction Replace

  • TexteOriginal ("Expression"): le texte original dont on veut remplacer une partie (par exemple "trajet: Paris-Brest").
  • TexteARemplacer ("Find"): ceci est le texte que l'on veut remplacer (par exemple "Brest").
  • NouveauTexte ("Replace"): ceci est le nouveau texte qui remplacera le TexteARemplacer dans TexteOriginal (par exemple "Nice" – >>> "trajet: Paris-Brest" devient alors "trajet: Paris-Nice").
  • PositionDebut ("Start"): paramètre facultatif qui indique à partir de quel caractère le remplacement peut s'effectuer. Si omis, le remplacement se fera dans tout le TexteOriginal.
    Attention
    , le résultat que la fonction renvoie ne commence qu'à cette position (le TexteOriginal sera "coupé" à droite!). Voir la section "Exemples" plus loin…
  • NombreDeRemplacements ("Count"): paramètre facultatif. Si le TexteARemplacer se trouve plusieurs fois dans le TexteOriginal, ce paramètre indique combien de fois il doit être remplacé à partir du début du TexteOriginal (voir section "Exemples" plus loin). Si omis, toutes les occurrences du TexteARemplacer seront remplacées (ceci sera également le cas si la valeur est = -1).
  • TypeDeComparaison ("Compare"): paramètre technique (et facultatif) pour choisir entre recherche Textuelle et Binaire. En gros, ce paramètre détermine si la recherche doit ou pas être sensible aux minuscules/majuscules. Deux valeurs sont disponibles:
    • vbBinaryCompare (ou sa représentation numérique = 0) – avec cette valeur, la recherche EST sensible aux majuscules et minuscules. Ceci est la valeur par défaut.
    • vbTextCompare (ou sa représentation numérique = 1) – avec cette valeur, la recherche N'EST PAS sensible aux majuscules et minuscules.

L'illustration pratique de toutes les possibilités se trouve plus bas, dans la section avec des Exemples d'utilisation.

Valeurs de résultat de la fonction

Selon le contenu de différents paramètres de la fonction, plusieurs résultats sont possibles. En voici la liste…

  • De manière générale, le résultat de la fonction Replace est une chaîne de caractères qui correspond à TexteOriginal ("Expression") où le TexteARemplacer ("Find") a été remplacé par NouveauTexte ("Replace")
  • Dans certains cas particuliers, la fonction retourne les valeurs suivantes:
    • Si TexteARemplacer ("Find") est vide, la fonction retournera comme résultat la copie du texte original.
    • Si NouveauTexte ("Replace") est  vide, la fonction retournera comme résultat le texte original où le TexteARemplacer a été supprimé (=> le texte à remplacer est remplacé par "rien").
    • Si TexteOriginal ("Expression") est vide ou le numéro dans PositionDebut ("Start") est supérieur à la longueur du TexteOriginal, la fonction retournera comme résultat la valeur Nothing (valeur vide).
    • Si NombreDeRemplacements ("Count") est égal à 0, le résultat de la fonction sera la copie du texte original…

Les exemples suivent pour montrer les différentes possibilités d'utilisation de cette fonction…

Exemples d'utilisation pratique de la fonction Replace en VBA

Les exemples suivants vous permettront de vous faire une idée de différent cas qui peuvent se produire lors de l'utilisation de la fonction VBA Replace. Chaque cas est décrit et expliqué.

Exemple de la fonction & résultat Explication
Replace("ID-1258-FR-78″,"FR","EU")

= "ID-1258-EU-78"

Le cas le plus classique: On remplace "FR" dans la chaîne "ID-1258-FR-78" par "EU".
Replace("FR59 1257 2589 5478″," ","")

= "FR59125725895478"

La fonction Replace peut être utilisée pour "supprimer" des caractères. Dans ce cas-ci, on supprime les espaces du n° de compte bancaire.
Replace("Ceci est un test.", "voiture", "avion")

= "Ceci est un test."

Si le texte qui doit être remplacé (ici "voiture") n'est pas retrouvé dans le texte d'origine comme c'est le cas ici, la fonction Replace retourne la copie du texte d'origine.
Replace("Commande: 125 / Objets: 98, 111, 125, 128", "125", "C125", 1, 1)

= "Commande: C125 / Objets: 98, 111, 125, 128"

Un exemple qui utilise le paramètre "Count". Ici, on veut remplacer le n° de commande ("125") par une autre référence (ici "C125"). Pour éviter que le n° d'objet dans la commande soit impacté, on limite le nombre de remplacement à 1 (le 5ème paramètre – en rouge).
Replace("Ceci est un test: Mon premier test", "test", "essai", 19)

= "Mon premier essai"

Exemple de l'utilisation du paramètre "Start". Ici, on demande à la fonction Replace de commencer le remplacement à partir du 19ème caractère du texte original. Attention! Le résultat ne sera pas "Ceci est un test: Mon premier essai" comme on pourrait s'y attendre! La fonction va "couper" les 18 premiers caractères comme le ferait la fonction Right. Le résultat sera donc: "Mon premier essai"
Replace("aaaa", "a", "x") = "xxxx"
Replace("aaaa", "a", "x", 1, 2) = "xxaa"
Autre exemple de l'utilisation du paramètre "Count": dans le premier cas (paramètre "Count" omis), tout les occurrences de "a" seront remplacées par "x". Dans le deuxième cas ("Count" = 2), seul les 2 premières occurrences de "a" seront remplacées par "x".
Replace("aaAA", "a", "X", 1, -1, 0) = "XXAA"
Replace("aaAA", "a", "X", 1, -1, 1) = "XXXX"
Exemple d'utilisation de paramètre "Compare": dans le premier cas ("Compare" égal à 0), la fonction est sensible à la casse. seul les "a" minuscules seront donc remplacés.

Dans le deuxième cas ("Compare" = 1), la fonction n'est pas sensible à la casse et donc les "a" seront remplacés peu importe s'ils sont en minuscule ou en majuscule.

Notez qu'il est possible d'utiliser comme valeur du paramètre "Compare"  vbBinaryCompare et vbTextCompare plutôt que les valeurs 0 et 1.

 

Pour une compréhension plus facile, les valeurs textuelles sont utilisées dans les exemples. Mais sachez que vous pouvez utiliser comme paramètres de la fonction Replace des valeurs contenues dans des variables:

Replace(MonText, "a", MonNouveauCaractere)

ou même des références à des cellules:

Replace(ThisWorkbook.Sheets("Feuil1").Range("B2").Value, "a", ThisWorkbook.Sheets("Feuil1").Range("D2").Value)

Équivalent de la fonction Replace dans Excel

La fonction Replace n'a pas d'équivalent exact parmi les fonctions disponibles directement dans les Classeurs Excel. En fait, il existe en Excel deux fonctions semblables (mais pas équivalents):

  • Fonction Excel SUBSTITUEest très proche de la fonction VBA Replace. Cependant, a) vous ne pouvez pas choisir si elle doit être ou pas sensible aux majuscules (paramètre "Compare"), b) le paramètre "Start" manque et c) l'argument no_position n'indique pas combien d'occurrences doivent être remplacées (comme "Count" dans Replace) mais indique LAQUELLE des occurrences doit être remplacée.
  • Fonction Excel REMPLACERpermet de remplacer un nombre défini de caractères dans un texte commençant à un endroit défini dans ce texte. Son utilisation pourra coïncider avec la fonction VBA Replace mais pourra également être très différente (par ex: remplacer dans le texte "abcd" 2 caractères à partir de 2ème par "oo" ). Elle sera donc plutôt utile avec les données structurés.

Attention à l'orthographe! 🙂  Dans un cas, le nom de la fonction est un infinitif mais pas dans l'autre…

A quoi la fonction Replace peut-elle servir?

Cette fonction VBA vous servira le plus probablement en combinaison avec une boucle ou comme une partie de UDF (= une fonction Excel définie par l'utilisateur). Et dans quel cas? Probablement lors de modification de vos fichiers de données. Imaginez que vous avez une base de données de produits (avec des milliers de références) et vous devez:

  • changer le format des numéros d'articles
  • adapter le nom du fabricant dans les descriptions de produits
  • changer la structure des noms de fichiers ou des chemins de dossiers

Pour aller plus loin en Excel et en VBA

Et voici quelques autres articles & tutoriels qui pourraient vous être utiles, notamment si vous travaillez avec des textes dans Excel et dans VBA:

Et vous voudrez peut-être savoir comment importer le texte à modifier à partir d'un fichier texte et ensuite exporter le résultat vers un (autre) fichier texte… Oui, tout ceci est possible en Excel. Grâce à VBA!

Laissez un commentaire

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

2 commentaires sur “Replace() – Fonction VBA pour remplacer du texte”