🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel SUBSTITUTE et REPLACE — Remplacer par contenu vs remplacer par position

|

Excel SUBSTITUTE et REPLACE — Remplacer par contenu vs remplacer par position

En bref — Les deux fonctions remplacent du texte, mais elles répondent à des questions différentes. SUBSTITUTE(text, old, new, [instance]) (français : SUBSTITUE) travaille par contenu — « remplace chaque "," par rien », ou avec le 4e argument, « remplace seulement la 2e ». REPLACE(text, start, length, new) (français : REMPLACER) travaille par position — « écrase 5 caractères à partir de la position 9 », quoi qu'il y ait. Choisissez la mauvaise et vous modifiez silencieusement la mauvaise chose. SUBSTITUTE est sensible à la casse ; REPLACE ne regarde pas du tout le contenu. Les deux renvoient du texte et fonctionnent dans toutes les versions d'Excel.

=SUBSTITUTE("1,234,567", ",", "")      ' -> "1234567"  (chaque virgule, par contenu)
=SUBSTITUTE("a-b-c", "-", ":", 2)      ' -> "a-b:c"    (seulement le 2e trait d'union)
=REPLACE("2026-XX-01", 6, 2, "04")     ' -> "2026-04-01" (par position)

Ce sont les deux formules de « rechercher et remplacer », et toute la compétence consiste à savoir dans quel modèle mental vous vous trouvez. Réglez cela correctement et elles deviennent triviales ; trompez-vous et vous passerez un après-midi à vous demander pourquoi les mauvais caractères ont changé.

Ce que vous allez apprendre

  • La distinction fondamentale : SUBSTITUTE correspond au contenu, REPLACE correspond à la position
  • Comment le 4e argument de SUBSTITUTE cible uniquement la Nème occurrence
  • Pourquoi SUBSTITUTE est sensible à la casse, et comment cela vous piège
  • La fameuse astuce LEN-moins-LEN pour compter les occurrences
  • Quand associer REPLACE à FIND — et quand s'arrêter et utiliser TEXTSPLIT

Le modèle mental : un remplacement de mot vs un tampon

SUBSTITUTE est un rechercher-remplacer par sens, comme appuyer sur Ctrl+H : « trouve ce texte, mets cet autre texte à sa place, partout où il apparaît ». Il ne se soucie pas de l'endroit où sont les correspondances, seulement de ce qu'elles sont.

REPLACE est un tampon à une coordonnée : « à partir du caractère 9, efface les 5 suivants et écris ceci à la place ». Il ne se soucie pas de ce qui s'y trouvait — il ne connaît que la position. Si la chose que vous voulez changer se situe à un endroit prévisible, utilisez REPLACE. Si c'est une chaîne prévisible qui pourrait se trouver n'importe où, utilisez SUBSTITUTE.

' Format fixe -> la position est fiable -> REPLACE
=REPLACE("ID-000123", 1, 3, "REF-")    ' "REF-000123"

' Texte connu, emplacement inconnu -> contenu -> SUBSTITUTE
=SUBSTITUTE("Qty: 5 units", "units", "pcs")   ' "Qty: 5 pcs"

Cette seule distinction résout presque toutes les questions « lequel dois-je utiliser ? ».

La règle qui débloque tout : le 4e argument de SUBSTITUTE

Par défaut, SUBSTITUTE remplace chaque occurrence — ce que vous voulez pour retirer toutes les virgules ou tous les espaces d'une valeur. Mais son 4e argument facultatif, instance_num, vous permet d'en cibler exactement une :

=SUBSTITUTE("a-b-c-d", "-", " ")       ' "a b c d"   — toutes
=SUBSTITUTE("a-b-c-d", "-", " ", 3)    ' "a-b-c d"   — seulement le 3e trait d'union

C'est la fonctionnalité qui fait jouer SUBSTITUTE au-dessus de sa catégorie : « change le dernier séparateur en espace », « corrige seulement la deuxième barre oblique ». C'est chirurgical d'une manière dont REPLACE est incapable, car REPLACE exigerait que vous calculiez d'abord la position.

SUBSTITUTE est sensible à la casse (REPLACE s'en moque)

Un piège discret : SUBSTITUTE fait correspondre la casse à l'identique. SUBSTITUTE("Apple apple", "apple", "orange") ne change que celui en minuscules, renvoyant "Apple orange". C'est cohérent avec FIND (également sensible à la casse) mais à l'opposé du comportement de la comparaison = de la feuille et de SEARCH, ce qui prend les gens au dépourvu. Si vous avez besoin d'un remplacement insensible à la casse, il n'y a pas de paramètre — vous normalisez d'abord (par ex. SUBSTITUTE(UPPER(A2), "APPLE", ...)) ou vous acceptez de devoir respecter la casse exacte.

REPLACE contourne entièrement le problème : il ne regarde jamais le contenu, donc la casse est sans importance.

L'astuce qui vaut le coup : compter les occurrences avec LEN

Voici l'idiome SUBSTITUTE le plus apprécié, et il n'a rien à voir avec le remplacement. Pour compter combien de fois un caractère apparaît, mesurez de combien la chaîne raccourcit quand vous le retirez :

' Combien de virgules dans A2 ?
=LEN(A2) - LEN(SUBSTITUTE(A2, ",", ""))

' Combien de mots ? (espaces + 1, pour une chaîne à espace simple)
=LEN(TRIM(A2)) - LEN(SUBSTITUTE(TRIM(A2), " ", "")) + 1

Retirez chaque virgule, observez combien de caractères ont disparu — c'est votre compte. C'est le genre d'astuce latérale que, une fois découverte, vous réutilisez pour toujours.

Quand REPLACE a besoin de FIND, et quand s'arrêter

REPLACE ne connaît que les positions, donc dès que la position dépend du contenu, vous la calculez avec FIND (français : TROUVE) :

' Masquer tout ce qui précède le @ dans un e-mail, de longueur inconnue
=REPLACE(A2, 1, FIND("@", A2) - 1, "*****")

C'est le mariage légitime de la position et du contenu. Mais si vous recourez à SUBSTITUTE pour restructurer une chaîne — découper « Prénom,Nom,Service » en colonnes, disons — vous avez dépassé son cadre. Enchaîner des SUBSTITUTE pour simuler un découpage est un anti-modèle classique ; TEXTSPLIT (français : FRACTIONNER.TEXTE, Excel 365) le fait en une seule formule qui reste dynamique. Et notez qu'il s'agit ici de REPLACE/SUBSTITUTE de la feuille de calcul, et non du Replace de VBA, qui est insensible à la casse par défaut et possède un argument de position qui tronque — des règles différentes, le même nom.

Le bon réflexe

Posez-vous une seule question : est-ce que je change un texte précis ou une position précise ? Texte précis, n'importe où → SUBSTITUTE (ajoutez le 4e argument pour le limiter à une occurrence). Position précise → REPLACE (calculez la position avec FIND si elle n'est pas littéralement fixe). Vous recourez au comptage LEN-moins-LEN ? C'est SUBSTITUTE qui gagne sa place. Vous empilez trois SUBSTITUTE pour remodeler un enregistrement ? C'est votre signal pour découper correctement la chaîne à la place.

Comment ExcelMaster vous aide

« Retire les symboles de devise et les séparateurs de milliers, mais garde la décimale », ou « masque le numéro de compte sauf les quatre derniers chiffres » — ce sont des tâches SUBSTITUTE/REPLACE où le piège consiste à faire correspondre le contenu alors que vous vouliez la position (ou l'inverse). ExcelMaster lit l'intention en français courant et écrit la bonne — le instance_num quand vous voulez dire « juste la deuxième », la position pilotée par FIND quand vous voulez dire « après le @ » — pour que vous ne changiez pas les mauvais caractères. Vous décrivez le remplacement ; il choisit le modèle.

Foire aux questions

Quelle est la différence entre SUBSTITUTE et REPLACE ?

SUBSTITUTE remplace le texte par contenu — trouve une chaîne, échange-la partout où elle apparaît (ou seulement la Nème fois). REPLACE remplace par position — écrase un nombre fixe de caractères à partir d'un point donné, quel que soit le contenu. Utilisez SUBSTITUTE pour un texte connu, REPLACE pour des positions connues.

Comment remplacer uniquement la deuxième occurrence d'un caractère ?

Utilisez le 4e argument de SUBSTITUTE : =SUBSTITUTE(A2, "-", " ", 2) change seulement le deuxième trait d'union. REPLACE ne peut pas cibler par occurrence — il ne travaille que par position.

SUBSTITUTE est-il sensible à la casse ?

Oui. SUBSTITUTE(A2, "apple", "orange") ne touchera pas à « Apple ». Pour remplacer quelle que soit la casse, normalisez d'abord le texte avec UPPER (français : MAJUSCULE) ou LOWER (français : MINUSCULE), puisqu'il n'existe pas de paramètre d'insensibilité à la casse.

Comment compter le nombre de fois qu'un caractère apparaît dans une cellule ?

Soustrayez la longueur après substitution de la longueur d'origine : =LEN(A2) - LEN(SUBSTITUTE(A2, ",", "")) compte les virgules. Retirer le caractère et mesurer la différence donne le compte.

Comment remplacer du texte à une position que je ne connais pas à l'avance ?

Calculez la position avec FIND et fournissez-la à REPLACE : =REPLACE(A2, 1, FIND("@", A2) - 1, "*****") masque tout ce qui précède le @. Cela combine le modèle de position de REPLACE avec la recherche par contenu de FIND.

Testé dans

Testé dans : Excel 365 (Windows 11) — dernière vérification le 2026-06-29.

Guides associés : Excel FIND et SEARCH · Excel LEFT, RIGHT et MID · Excel TEXTSPLIT · VBA Replace