XL 2021 supprimer des signes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Solution
Bonsoir à toutes & à tous,

@merinos , je suis sur mon téléphone avec une version très simplifiée d'Excel 365, alors excuse moi si je dis des bêtises.
Il me semble que ta proposition s'éloigne un peu du sujet du fil :
Avec Excel2021, d'une chaîne qui se compose de groupes de chiffres parmis d'autres caractères quelconques, ne conserver que les groupes de chiffres séparés par 1 espace.
Excel2021 : pas de LAMBDA. Et comment faire avec la table pour atteindre le but ?
Là je n'ai pas accès au gestionnaire de nom donc pas accès à la définition de ta formule, mais dès que je retrouve mon PC je regarderai.

@jurassic pork , dans mon post#10 je me suis un peu compliqué la vie en fait il suffit d'encapsuler la formule du post#5 dans...
Hello,
en VBA une fonction personnalisée avec un Regex.Replace (le RegexReplace existe en formule dans Excel 365)
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)
regex.pattern = "\s+"
' on remplace des espaces multiples par un seul espace
RegexReplace = regex.Replace(RegexReplace, " ")
Set regex = Nothing
End Function


RegexReplace.png



Ami calmant, J.P
 
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 :
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
en utilisant ceci :
Code:
=RegexReplace(B2;"[#&\-\+\s]+";" ")
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).
Ami calmant, J.P
 
Dernière édition:
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 :
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
en utilisant ceci :
Code:
=RegexReplace(B2;"[#&\-\+\s]+";" ")
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).
Ami calmant, J.P
 
Re,
Ça y est j'ai trouvé, plus d'espaces consécutifs avec cette formule :
Enrichi (BBcode):
=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");""))
(à partir d'EXCEL2021)

À bientôt
 

Pièces jointes

Bonjour le forum,

Juste une remarque pour jurassic pork

CreateObject("VBScript.RegExp") prend du temps, il vaut mieux utiliser cette fonction VBA :
VB:
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
A+
 
Dernière édition:
Juste une remarque pour jurassic pork

CreateObject("VBScript.RegExp") prend du temps, il vaut mieux utiliser cette fonction VBA :
Hello job75,
c'est sûr que cela est nettement moins rapide mais cela dépend du nombre d'utilisation de la formule et l'avantage c'est que c'est plus souple : on peut changer le motif dans les paramètres de la fonction.
Et je serais curieux de savoir si quelqu'un a un Excel 365 , si il peut utiliser la fonction formule RegexReplace pour savoir le temps que cela prends.
 
Bonjour à tous 🙂 ,

Allez! Pour le fun, une p'tite dernière :
VB:
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
 
job75, bon j'ai fait des mesures de performance avec une chaîne de 23 caractères en entrée :
Epure : 60µs
RegexReplace : 500µs
Comme c'est la création de l'objet Regex qui plombe la fonction RegexReplace, en créant l'objet en Global en Early Binding, la création ne se fait qu'une seule fois. Voici le code :
VB:
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
avec ce code le temps moyen de la fonction RegexReplace est de 30µs (avec 23 caractères)
[EDIT] Avec la fonction QueLesChiffres de mapomme, j'ai 40 µs
et comme maPomme ne fait que les chiffres le Regex peut être alors :
VB:
=RegexReplace(B2;"[^\d]+";" ")
on remplace tout ce qui n'est pas chiffre
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 bouton supprimer
Réponses
4
Affichages
105
Réponses
6
Affichages
151
Réponses
10
Affichages
453
Retour