Caractères génériques dans le texte «Remplacer par» (Microsoft Excel)
Anne-Mie se rend compte qu’elle peut utiliser des caractères génériques (?) Pour rechercher dans Excel, mais elle se demande si elle peut utiliser des caractères génériques dans la chaîne de remplacement. Par exemple, elle aimerait rechercher «abde» et le remplacer par «aa * de», où l’astérisque représente n’importe quel nombre de caractères, ou aucun du tout.
La réponse courte est qu’il n’y a aucun moyen de le faire dans Excel, comme décrit. Si vous vouliez seulement convertir le deuxième caractère d’une valeur de texte de « b » en « a », cela peut être fait assez facilement:
=REPLACE(A1,2,1,"a")
Cependant, ce n’est probablement pas ce que vous voulez faire; vous voulez un moyen d’utiliser des caractères génériques dans le texte «remplacer par». Le terme technique pour faire de tels remplacements de chaînes est appelé REGEX, qui est l’abréviation de Regular Expressions. REGEX a commencé avec des langages comme Perl mais était si puissant que de nombreux autres langages de programmation l’ont ajouté.
Le VBA utilisé dans Excel ne fait pas exception. La première étape de l’utilisation de REGEX est de l’activer. Vous faites cela dans l’éditeur VBA en choisissant Outils | Références, puis assurez-vous qu’il y a une coche à côté de l’option Expressions régulières Microsoft VBScript. Si plusieurs versions de la référence sont disponibles, choisissez la dernière version.
L’activation de cette référence vous permet de créer des objets REGEX. Techniquement, vous pouvez le laisser désactivé, en fonction de la manière dont vous souhaitez que la liaison se produise dans vos macros. Une discussion sur les avantages et les inconvénients de la fin par rapport à
la liaison anticipée dépasse cependant la portée de cette astuce, alors allez-y et activez la référence REGEX.
Les objets REGEX possèdent une méthode Test et une propriété Pattern. Cela signifie que vous définissez la propriété Pattern, puis que la méthode Test vérifie si le modèle existe. Un objet REGEX a également une méthode Replace, qui est utilisée pour effectuer des remplacements.
Avant de continuer, il est important de comprendre que les expressions régulières peuvent devenir très complexes et, enfin, «geek». Il n’y a pas moyen de contourner cela; comment travailler avec des expressions régulières a fait l’objet de livres entiers. Heureusement, pour les besoins de cette astuce, les expressions sont plutôt simples par nature. Dans ce cas, nous utiliserons le modèle « ^ ab.de $ ». Ce modèle fait référence à un mot qui commence (indiqué par ^) par « ab » suivi d’une expression arbitraire (indiqué par)
composé d’au moins un caractère (indiqué par le point) et se terminant (indiqué par le $) par « de ».
Voici le code qui implémente l’utilisation de l’objet REGEX pour effectuer les remplacements réels.
Public Function SearchNReplace1(Pattern1 As String, _ Pattern2 As String, Replacestring As String, _ TestString As String) Dim reg As New RegExp reg.IgnoreCase = True reg.MultiLine = False reg.Pattern = Pattern1 If reg.Test(TestString) Then reg.Pattern = Pattern2 SearchNReplace1 = reg.Replace(TestString, ReplaceString) Else SearchNReplace1 = TestString End If End Function
Pour utiliser cette macro, commencez par les chaînes que vous souhaitez modifier dans la colonne A. En supposant que la première chaîne se trouve dans la cellule A1, vous pouvez placer ce qui suit dans une autre cellule afin d’obtenir le texte modifié:
=SearchNReplace1("^ab.*de$","^ab","aa",A1)
Cela indique à la macro que le motif que vous souhaitez rechercher est « ^ ab. * De $ »
(le premier paramètre), et que vous voulez remplacer « ^ ab » par « aa ».
Cette formule peut être collée dans la colonne, et vous vous retrouvez avec une conversion de la colonne A où la chaîne « abde » est remplacée par « aade ».
Si vous préférez ne pas utiliser les expressions REGEX dans VBA pour une raison quelconque, vous pouvez créer une macro qui parcourra simplement un groupe de cellules sélectionnées et recherchera toute cellule commençant par « ab » et se terminant par « de », et remplace ensuite la partie de début par « aa ».
Sub SearchNReplace2() Dim sFindInitial As String Dim sReplaceInitial As String Dim iLenInitial As Integer Dim sFindFinal As String Dim sReplaceFinal As String Dim iLenFinal As Integer Dim sTemp As String Dim rCell As Range sFindInitial = "ab" sReplaceInitial = "aa" sFindFinal = "de" sReplaceFinal = "de" For Each rCell In Selection sTemp = rCell.Value iLenInitial = Len(sFindInitial) iLenFinal = Len(sFindFinal) If Left(sTemp, iLenInitial) = sFindInitial And _ Right(sTemp, iLenFinal) = sFindFinal Then sTemp = Mid(sTemp, iLenInitial + 1) sTemp = Left(sTemp, Len(sTemp) - iLenFinal) sTemp = sReplaceInitial & sTemp & sReplaceFinal rCell.Value = sTemp End If Next Set rCell = Nothing End Sub
Pour utiliser cette routine, sélectionnez simplement les cellules que vous souhaitez modifier, puis exécutez la macro. Vous devez également apporter des modifications aux variables sFindInitial, sReplaceInitial, sFindFinal et sReplaceFinal, si nécessaire.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (11170) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:
link: / excel-Wildcards_in_Replace_With_Text [Wildcards in 'Replace With' Text]
.