Table des matières
Dans ce tutoriel, nous allons examiner plusieurs façons de rechercher et de remplacer plusieurs mots, chaînes de caractères ou caractères individuels, afin que vous puissiez choisir celle qui convient le mieux à vos besoins.
La plupart du temps, on utilise la fonction Rechercher & Remplacer, qui fonctionne bien pour des valeurs uniques. Mais qu'en est-il si vous avez des dizaines, voire des centaines d'éléments à remplacer ? Personne ne souhaite certainement effectuer tous ces remplacements manuellement, un par un, puis les recommencer lorsque les données changent. Heureusement, il existe quelques méthodes plus efficaces pour effectuer des remplacements massifs dans Excel, et notammentnous allons étudier chacun d'entre eux en détail.
Rechercher et remplacer plusieurs valeurs avec des SUBSTITUTS imbriqués
La façon la plus simple de trouver et de remplacer des entrées multiples dans Excel est d'utiliser la fonction SUBSTITUTE.
La logique de la formule est très simple : vous écrivez quelques fonctions individuelles pour remplacer une ancienne valeur par une nouvelle, puis vous imbriquez ces fonctions les unes dans les autres, de sorte que chaque SUBSTITUTE suivant utilise le résultat du SUBSTITUTE précédent pour rechercher la valeur suivante.
SUBSTITUT(SUBSTITUT(SUBSTITUT( texte , ancien_texte1 , nouveau_texte1 ), ancien_texte2 , nouveau_texte2 ), vieux_texte3 , nouveau_texte3 )Dans la liste des lieux figurant dans A2:A10, supposons que vous souhaitiez remplacer les noms de pays abrégés (tels que FR , ROYAUME-UNI et USA ) avec les noms complets.
Pour ce faire, entrez les anciennes valeurs dans D2:D4 et les nouvelles valeurs dans E2:E4 comme indiqué dans la capture d'écran ci-dessous. Ensuite, entrez la formule ci-dessous dans B2 et appuyez sur Entrée :
=SUBSTITUER(SUBSTITUER(SUBSTITUER(A2:A10, D2, E2), D3, E3), D4, E4)
...et vous aurez tous les remplacements effectués en même temps :
Veuillez noter que l'approche ci-dessus ne fonctionne que dans Excel 365 qui prend en charge les tableaux dynamiques.
Dans les versions pré-dynamiques d'Excel 2019, Excel 2016 et antérieures, la formule doit être écrite pour la cellule la plus haute (B2), puis copiée dans les cellules inférieures :
=SUBSTITUER(SUBSTITUER(SUBSTITUER(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Veuillez noter que, dans ce cas, nous verrouillons les valeurs de remplacement avec des références de cellule absolues, afin qu'elles ne se déplacent pas lorsque vous copiez la formule vers le bas.
Remarque : la fonction SUBSTITUTE est sensible à la casse ce qui signifie que vous devez taper les anciennes valeurs ( ancien_texte ) dans la même casse que celle des données d'origine.
Aussi simple qu'elle puisse être, cette méthode présente un inconvénient de taille : lorsque vous avez des dizaines d'éléments à remplacer, les fonctions imbriquées deviennent assez difficiles à gérer.
Avantages facile à mettre en œuvre ; compatible avec toutes les versions d'Excel
Inconvénients : à utiliser de préférence pour un nombre limité de valeurs de recherche/remplacement
Rechercher et remplacer des entrées multiples avec XLOOKUP
Dans la situation où vous cherchez à remplacer le contenu entier de la cellule n'est pas sa partie, la fonction XLOOKUP est très utile.
Supposons que vous ayez une liste de pays dans la colonne A et que vous souhaitiez remplacer toutes les abréviations par les noms complets correspondants. Comme dans l'exemple précédent, vous commencez par saisir les éléments "Rechercher" et "Remplacer" dans des colonnes séparées (respectivement D et E), puis vous saisissez cette formule dans B2 :
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Traduite du langage Excel au langage humain, voici ce que fait la formule :
Recherche la valeur A2 (lookup_value) dans D2:D4 (lookup_array) et renvoie une correspondance de E2:E4 (return_array). Si elle n'est pas trouvée, extrait la valeur originale de A2.
Double-cliquez sur la poignée de remplissage pour que la formule soit copiée dans les cellules ci-dessous, et le résultat ne vous fera pas attendre :
La fonction XLOOKUP n'étant disponible que dans Excel 365, la formule ci-dessus ne fonctionnera pas dans les versions antérieures. Toutefois, vous pouvez facilement imiter ce comportement en combinant IFERROR ou IFNA et VLOOKUP :
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Remarque : contrairement à la fonction SUBSTITUTE, les fonctions XLOOKUP et VLOOKUP sont des fonctions à part entière. non sensible à la casse Par exemple, notre formule remplacerait à la fois FR et fr avec France .
Avantages : utilisation inhabituelle des fonctions habituelles ; fonctionne dans toutes les versions d'Excel
Inconvénients : fonctionne au niveau de la cellule, ne peut pas remplacer une partie du contenu de la cellule
Remplacement multiple à l'aide de la fonction récursive LAMBDA
Pour les abonnés à Microsoft 365, Excel offre une fonction spéciale qui permet de créer des fonctions personnalisées en utilisant un langage de formule traditionnel. Oui, je parle de LAMBDA. La beauté de cette méthode est qu'elle peut convertir une formule très longue et complexe en une formule très compacte et simple. En outre, elle vous permet de créer vos propres fonctions qui n'existent pas dans Excel, ce qui était auparavant le cas.possible uniquement avec VBA.
Pour des informations détaillées sur la création et l'utilisation de fonctions LAMBDA personnalisées, veuillez consulter ce tutoriel : Comment écrire des fonctions LAMBDA dans Excel. Ici, nous allons discuter de quelques exemples pratiques.
Avantages Le résultat est une fonction élégante et étonnamment simple à utiliser, quel que soit le nombre de paires de remplacement.
Inconvénients disponible uniquement dans Excel 365 ; spécifique au classeur et ne peut être réutilisé dans différents classeurs.
Exemple 1 : Rechercher et remplacer plusieurs mots / chaînes de caractères à la fois
Pour remplacer plusieurs mots ou textes en une seule fois, nous avons créé une fonction LAMBDA personnalisée, nommée MultiReplacements qui peut prendre l'une des formes suivantes :
=LAMBDA(texte, old, new, IF(old "", MultiReplace(SUBSTITUTE(texte, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))
Ou
=LAMBDA(texte, ancien, nouveau, IF(ancien="", texte, MultiReplace(SUBSTITUTE(texte, ancien, nouveau), OFFSET(ancien, 1, 0), OFFSET(nouveau, 1, 0))))
Les deux sont des fonctions récursives qui s'appellent elles-mêmes. La différence réside uniquement dans la manière dont le point de sortie est établi.
Dans la première formule, la fonction IF vérifie si l'élément vieux n'est pas vide (anciennement " "). Si VRAI, la liste des MultiReplacements Si FALSE, la fonction retourne texte dans sa forme actuelle et en sort.
La deuxième formule utilise la logique inverse : si vieux est vide (old=""), alors le retour se fait texte et sortir ; sinon, appeler MultiReplacements .
La partie la plus délicate est accomplie ! Il ne vous reste plus qu'à nommer le MultiReplacements Pour des instructions détaillées, veuillez vous référer à Comment nommer une fonction LAMBDA.
Une fois que la fonction reçoit un nom, vous pouvez l'utiliser comme n'importe quelle autre fonction intégrée.
Quelle que soit la formule que vous choisissez, du point de vue de l'utilisateur final, la syntaxe est aussi simple que cela :
MultiReplace(texte, ancien, nouveau)Où :
- Texte - les données sources
- Vieux - les valeurs à trouver
- Nouveau - les valeurs à remplacer par
En poussant un peu plus loin l'exemple précédent, remplaçons non seulement les abréviations des pays mais aussi celles des états. Pour cela, tapez les abréviations ( vieux ) dans la colonne D en commençant par D2 et les noms complets ( nouveau ) dans la colonne E en commençant par E2.
Dans B2, saisissez la fonction MultiReplace :
=MultiReplace(A2:A10, D2, E2)
Appuyez sur Entrée et appréciez les résultats :)
Comment fonctionne cette formule
La clé pour comprendre la formule est de comprendre la récursion. Cela peut paraître compliqué, mais le principe est assez simple. À chaque itération, une fonction récursive résout une petite instance d'un problème plus important. Dans notre cas, la fonction MultiReplacements effectue une boucle entre les anciennes et les nouvelles valeurs et, à chaque boucle, effectue un remplacement :
MultiReplacements (SUBSTITUTE(texte, ancien, nouveau), OFFSET(ancien, 1, 0), OFFSET(nouveau, 1, 0))
Comme pour les fonctions SUBSTITUTE imbriquées, le résultat du SUBSTITUTE précédent devient la fonction texte pour le prochain SUBSTITUTE. En d'autres termes, à chaque appel ultérieur de la commande MultiReplacements la fonction SUBSTITUTE ne traite pas la chaîne de texte originale, mais la sortie de l'appel précédent.
Pour traiter tous les éléments de la vieux nous commençons par la cellule la plus haute et utilisons la fonction OFFSET pour descendre d'une rangée à chaque interaction :
OFFSET(old, 1, 0)
Il en va de même pour le nouveau liste :
OFFSET(nouveau, 1, 0)
L'essentiel est de fournir un point de sortie afin d'éviter que les appels récursifs ne se poursuivent indéfiniment. Cela se fait à l'aide de la fonction IF - si la fonction vieux est vide, la fonction renvoie texte sa forme actuelle et ses sorties :
=LAMBDA(texte, old, new, IF(old="", text, MultiReplace(...)))
ou
=LAMBDA(texte, ancien, nouveau, IF(ancien "", MultiReplace(...), texte))
Exemple 2 : Remplacer plusieurs caractères dans Excel
En principe, le MultiReplacements présentée dans l'exemple précédent peut également traiter des caractères individuels, à condition que chaque ancien et nouveau caractère soit saisi dans une cellule distincte, exactement comme les noms abrégés et complets dans les captures d'écran ci-dessus.
Si vous préférez saisir les anciens caractères dans une cellule et les nouveaux caractères dans une autre, ou les taper directement dans la formule, vous pouvez créer une autre fonction personnalisée, appelée ReplaceChars en utilisant l'une de ces formules :
=LAMBDA(texte, old_chars, new_chars, IF(old_chars "", ReplaceChars(SUBSTITUTE(texte, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), text))
Ou
=LAMBDA(texte, old_chars, new_chars, IF(old_chars="", texte, ReplaceChars(SUBSTITUTE(texte, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
N'oubliez pas de nommer votre nouvelle fonction Lambda dans le gestionnaire de noms, comme d'habitude :
Et votre nouvelle fonction personnalisée est prête à être utilisée :
ReplaceChars(texte, old_chars, new_chars)Où :
- Texte - les cordes d'origine
- Vieux - les caractères à rechercher
- Nouveau - les caractères à remplacer par
Pour le tester sur le terrain, faisons quelque chose qui est souvent effectué sur des données importées : remplaçons les guillemets intelligents et les apostrophes intelligentes par des guillemets droits et des apostrophes droites.
Tout d'abord, nous saisissons les guillemets intelligents et l'apostrophe intelligente dans D2, les guillemets droits et l'apostrophe droite dans E2, en séparant les caractères par des espaces pour une meilleure lisibilité (comme nous utilisons le même délimiteur dans les deux cellules, cela n'aura aucun impact sur le résultat - Excel remplacera simplement un espace par un espace).
Ensuite, nous entrons cette formule dans B2 :
=ReplaceChars(A2:A4, D2, E2)
Et obtenir exactement les résultats que nous recherchions :
Il est également possible de taper les caractères directement dans la formule. Dans notre cas, il suffit de penser à "dupliquer" les guillemets droits comme ceci :
=ReplaceChars(A2:A4, "" " '", """ "" '")
Comment fonctionne cette formule
Le site ReplaceChars permet de parcourir les vieux_chars et nouveaux_chars et effectue un remplacement à la fois en commençant par le premier caractère à gauche. Cette partie est réalisée par la fonction SUBSTITUTE :
SUBSTITUTE(texte, LEFT(old_chars), LEFT(new_chars))
À chaque itération, la fonction RIGHT supprime un caractère à gauche des deux fichiers vieux_chars et nouveaux_chars afin que LEFT puisse récupérer la paire de caractères suivante pour la substitution :
ReplaceChars(SUBSTITUTE(texte, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Avant chaque appel récursif, la fonction IF évalue la fonction vieux_chars S'il n'est pas vide, la fonction s'appelle elle-même. Dès que le dernier caractère a été remplacé, le processus d'itération se termine, la formule renvoie la valeur suivante texte sa forme actuelle et ses sorties.
Remarque : comme la fonction SUBSTITUTE utilisée dans nos formules de base est sensible à la casse les deux lambdas ( MultiReplacements et ReplaceChars ) traitent les lettres majuscules et minuscules comme des caractères différents.
Recherche et remplacement en masse avec UDF
Si la fonction LAMBDA n'est pas disponible dans votre Excel, vous pouvez écrire une fonction définie par l'utilisateur pour le remplacement multiple de manière traditionnelle en utilisant VBA.
Pour distinguer l'UDF de la définition de LAMBDA MultiReplacements nous allons la nommer différemment, par exemple MassReplace Le code de la fonction est le suivant :
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'tableau pour stocker les résultats Dim arSearchReplace(), sTmp As String 'tableau où stocker les paires find/replace, chaîne temporaire Dim iFindCurRow, cntFindRows As Long 'index de la ligne actuelle du tableau SearchReplace, nombre de lignes Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'index de la ligne courante dans la plage source, index de la colonne courante dans la plage source, nombre de lignes, nombre de colonnes cntInputRows = InputRng.Rows.Count cntInputCols = InputRng.Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'préparation du tableau de paires find/replace ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Recherche et remplacement dans la plage source For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Remplacement de toutes les paires find/replace dans chaque celluleFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End FunctionComme les fonctions définies par LAMBDA, les UDFs sont à l'échelle du classeur Cela signifie que le MassReplace Si vous ne savez pas comment procéder, suivez les étapes décrites dans la section Comment insérer un code VBA dans Excel.
Une fois le code ajouté à votre classeur, la fonction apparaîtra dans l'intellisense de la formule - seulement le nom de la fonction, pas les arguments ! Cependant, je pense qu'il n'est pas nécessaire de se souvenir de la syntaxe :
MassReplace(gamme_intrant, gamme_trouvant, gamme_remplaçant)Où :
- Plage d'entrée - la plage source où vous voulez remplacer les valeurs.
- Trouver_gamme - les caractères, chaînes de caractères ou mots à rechercher.
- Remplacer_gamme - les caractères, chaînes de caractères ou mots à remplacer.
Dans Excel 365, grâce à la prise en charge des tableaux dynamiques, cette formule fonctionne comme une formule normale, qu'il suffit de saisir dans la cellule supérieure (B2) :
=MassReplace(A2:A10, D2:D4, E2:E4)
Dans l'Excel pré-dynamique, cela fonctionne comme une formule de tableau CSE à l'ancienne : vous sélectionnez la plage source entière (B2:B10), tapez la formule et appuyez simultanément sur les touches Ctrl + Shift + Enter pour la compléter.
Avantages : une alternative décente à une fonction LAMBDA personnalisée dans Excel 2019, Excel 2016 et les versions antérieures
Inconvénients le classeur doit être enregistré en tant que fichier .xlsm compatible avec les macros.
Remplacement en masse dans Excel avec une macro VBA
Si vous aimez automatiser les tâches courantes avec des macros, vous pouvez utiliser le code VBA suivant pour rechercher et remplacer plusieurs valeurs dans une plage.
Pour utiliser la macro immédiatement, vous pouvez télécharger notre exemple de classeur contenant le code, ou vous pouvez insérer le code dans votre propre classeur.
Comment utiliser la macro
Avant d'exécuter la macro, saisissez les anciennes et les nouvelles valeurs dans deux colonnes adjacentes, comme le montre l'image ci-dessous (C2:D4).
Et puis, sélectionnez vos données source, appuyez sur Alt + F8 , choisissez le bouton BulkReplace et cliquez sur Exécuter .
Comme le rage des sources est présélectionné, il suffit de vérifier la référence et de cliquer sur OK :
Après cela, sélectionnez le remplacer la gamme et cliquez sur OK :
C'est fait !
Avantages : configurer une fois, réutiliser à tout moment
Inconvénients : la macro doit être exécutée à chaque changement de données
Recherche et remplacement multiples dans Excel avec l'outil Substring
Dans le tout premier exemple, j'ai mentionné que le SUBSTITUTE imbriqué est le moyen le plus simple de remplacer plusieurs valeurs dans Excel. J'admets que j'avais tort. Notre Suite Ultime rend les choses encore plus faciles !
Pour effectuer un remplacement en masse dans votre feuille de calcul, rendez-vous sur le site Web de la Commission européenne. Ablebits Data et cliquez sur Outils de sous-chaîne > ; Remplacer les sous-chaînes .
Le site Remplacer les sous-chaînes Une boîte de dialogue apparaîtra pour vous demander de définir le Source : gamme et Sous-strings gamme.
Avec les deux plages sélectionnées, cliquez sur le bouton Remplacer et trouver les résultats dans une nouvelle colonne insérée à droite des données originales. Oui, c'est aussi simple que cela !
Conseil. Avant de cliquer sur Remplacer il y a une chose importante que vous devez prendre en compte : le système de contrôle de la qualité. Sensible à la casse Veillez à la sélectionner si vous souhaitez traiter les majuscules et les minuscules comme des caractères différents. Dans cet exemple, nous cochons cette option parce que nous voulons uniquement remplacer les chaînes en majuscules et laisser intactes les sous-chaînes comme "fr", "uk" ou "ak" dans d'autres mots.
Si vous êtes curieux de savoir quelles autres opérations de masse peuvent être effectuées sur des chaînes de caractères, consultez les autres outils de sous-string inclus dans notre Ultimate Suite. Ou mieux encore, téléchargez la version d'évaluation ci-dessous et essayez-la !
Voilà comment trouver et remplacer plusieurs mots et caractères à la fois dans Excel. Je vous remercie de votre lecture et j'espère vous voir sur notre blog la semaine prochaine !
Téléchargements disponibles
Recherche et remplacement multiples dans Excel (fichier .xlsm)
Ultimate Suite 14 jours version entièrement fonctionnelle (fichier .exe)