Function RegexReplace$(texte$, pattern$, replacement$)
Dim regex As Object
On Error Resume Next
Set regex = CreateObject("VBScript.RegExp")
regex.pattern = pattern
regex.Global = True
RegexReplace = regex.Replace(texte, replacement)
regex.pattern = "\s+"
' on remplace des espaces multiples par un seul espace
RegexReplace = regex.Replace(RegexReplace, " ")
Set regex = Nothing
End Function
=CONCAT(LET(T;B2;
C;STXT(T;SEQUENCE(NBCAR(T));1);
SI((CODE(C)<48)+(CODE(C)>57);" ";C)))
Function RegexReplace$(texte$, pattern$, replacement$)
Dim regex As Object
On Error Resume Next
Set regex = CreateObject("VBScript.RegExp")
regex.pattern = pattern
regex.Global = True
RegexReplace = regex.Replace(texte, replacement)
Set regex = Nothing
End Function
=RegexReplace(B2;"[#&\-\+\s]+";" ")
Hello AtTheOne,
apparemment bobafric veut aussi réduire les espaces qui se suivent à un seul espace après remplacement de tous les caractères, ce que fait ma fonction personnalisée.
[EDIT] Oops je suis sur un Ordi qui n'a que Excel 2019 peut-être que ta formule le fait !
et ma fonction personnalisée peut être simplifiée :
en utilisant ceci :VB:Function RegexReplace$(texte$, pattern$, replacement$) Dim regex As Object On Error Resume Next Set regex = CreateObject("VBScript.RegExp") regex.pattern = pattern regex.Global = True RegexReplace = regex.Replace(texte, replacement) Set regex = Nothing End Function
Explication du motif : on remplace les caractères qui se trouvent au moins une fois entre crochet par un espace sachant que le \- représente le - (échappement) le \+ le + et le \s les caractères d'espacement comme par exemple l'espace ou tab. Le + derrière les crochets signifiant au moins un (un ou plus).Code:=RegexReplace(B2;"[#&\-\+\s]+";" ")
Ami calmant, J.P
Hello AtTheOne,
apparemment bobafric veut aussi réduire les espaces qui se suivent à un seul espace
Non je te rassure elle ne le fait pas, je cherche quelque chose qui le fasse,Oops je suis sur un Ordi qui n'a que Excel 2019 peut-être que ta formule le fait !
=JOINDRE.TEXTE(" ";VRAI;SIERREUR(FILTRE.XML("<T><C>"&CONCAT(LET(T;B2;C;STXT(T;SEQUENCE(NBCAR(T));1);SI((CODE(C)<48)+(CODE(C)>57);"</C><C>";C)))&"</C></T>";"//C");""))
Function Epure(x$, sep$)
Dim i%
For i = 1 To Len(x)
If Not IsNumeric(Mid(x, i, 1)) Then Mid(x, i, 1) = " "
Next
Epure = Application.Trim(x) 'SUPPRESPACE
Epure = Replace(Epure, " ", sep)
End Function
Hello job75,Juste une remarque pour jurassic pork
CreateObject("VBScript.RegExp") prend du temps, il vaut mieux utiliser cette fonction VBA :
Function QueLesChiffres$(x$)
Dim c$, i&, y$
For i = 1 To Len(x): c = Mid(x, i, 1): y = y & IIf(c Like "#", c, " "): Next
Do: i = Len(y): y = Replace(y, " ", " "): Loop Until i = Len(y)
QueLesChiffres = Trim(y)
End Function
Global Regex As New RegExp
Function RegexReplace$(texte$, pattern$, replacement$)
On Error Resume Next
Regex.pattern = pattern
Regex.Global = True
RegexReplace = Regex.Replace(texte, replacement)
End Function
=RegexReplace(B2;"[^\d]+";" ")