Texte UniquementTexte

Magic_Doctor

XLDnaute Barbatruc
Supprime les chiffres dans une chaîne.

VB:
Function UniquementTexte$(laVar As Variant)
'***************************************
'Supprime les chiffres dans une chaîne
'mRomain
'***************************************
'Ex : azegtqze589qsrgywdr54s ---> azegtqzeqsrgywdrs

Dim leMot$, i%

    leMot = laVar
    For i = 1 To Len(leMot)
        If Not IsNumeric(Mid(leMot, i, 1)) Then UniquementTexte = UniquementTexte & Mid(leMot, i, 1)
    Next
End Function
 
Bonjour le fil

je l'aurai plutôt vue comme cela !

Bien cordialement
VB:
Function UniquementTexte$(ByVal laVar As Variant)
'***************************************
'Supprime les chiffres dans une chaîne
'***************************************
'Ex : azegtqze589qsrgywdr54s ---> azegtqzeqsrgywdrs
    For i = 0 To 9
        If InStr(1, laVar, i) > 0 Then laVar = Replace(laVar, i, "")
    Next
    UniquementTexte = laVar
End Function
 

patricktoulon

XLDnaute Barbatruc
bonjour @Yeahou
moi aussi mais si je ne l'ai pas dis c'est pour la simple et bonne raison que(par exemple) la boucle sur une chaîne de 30 caractère en récupérant que les lettres est plus rapide que le replace de 0 à 9 sur la même chaîne
testé sur 1000 lignes
par contre le replace d'un regex avec le pattern[0-9] est plus rapide
c'est étonnant non ?
;)
 

patricktoulon

XLDnaute Barbatruc
re
oui même avec instr
if instr pèse son poids même si il répond non il est exécuté donc toute la ligne est exécutée même si elle replace pas
certes ta version est rapide avec le instr mais moins que le direct
âpres sur une chaîne de plus de 30 caractères il faut essayer je suppose que là on va voir des différences plus flagrantes et c'est peur être le replace 0-9 qui va gagner
 
Re,
en expression régulière, le replace doit normalement pulser un peu plus.
[édition : désolé, je n'avais pas vu que tu l'évoquais dans ton post, et je trouve cela tout à fait normal que ce soit plus rapide, le replace ne s'exécutant qu'une fois]
[édition 2 : c'est d'ailleurs très bête qu'une option ne permette pas d'utiliser les caractères génériques avec le replace Vba]

VB:
Function UniquementTexte$(laVar As Variant)
'***************************************
'Supprime les chiffres dans une chaîne
'mRomain
'***************************************
'Ex : azegtqze589qsrgywdr54s ---> azegtqzeqsrgywdrs
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "[0-9]"
UniquementTexte = .Replace(laVar, "")
End With
End Function
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir Yeahou,

Bien vu. La solution avec le Pattern est élégante.
Maintenant, corsons le problème avec des chiffres décimaux :
UniquementTexte("5 poires, 2 cerises, 0,5 melon") --> poires, cerises, , melon
En modifiant légèrement le pattern :
VB:
Function UniquementTexte$(laVar As Variant)
'***************************************
'Supprime les chiffres dans une chaîne
'Yeahou
'***************************************
'Ex : azegtqze589qsrgywdr54s ---> azegtqzeqsrgywdrs
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "[0-9,]"
UniquementTexte = .Replace(laVar, "")
End With
End Function
UniquementTexte("5 poires, 2 cerises, 0,5 melon") --> poires cerises melon
 
Re,

Ce code fonctionne maintenant exactement comme je le voyais, on sort une chaine texte trimée sans saut de ligne, sans doublons d'espace, sans nombre qu'il soient décimaux ou pas.
Les sauts de ligne ne veulent plus rien dire quand on a supprimé la moitié des caractères.

Bien cordialement, @+

[édition : code amélioré avec un regex de patricktoulon.]

Code:
Function UniquementTexte$(ByVal laVar As Variant)
'***************************************
'Supprime les chiffres dans une chaîne
'***************************************
'Ex : azegtqze589qsrgywdr54s ---> azegtqzeqsrgywdrs
'Ex : "       5 poires, 2 cerises, 0,5 melon et 12.27 carrés de chocolat.   " ---> "poires, cerises, melon et carrés de chocolat."
'Ex : "       5 poires,
'2 cerises,          0,5 melon et
'12.27 carrés de chocolat.   " ---> "poires, cerises, melon et carrés de chocolat."
With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = " \s|(\d+)([.,]|)"
    UniquementTexte = Application.Trim(.Replace(laVar, ""))
End With
End Function
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 133
Messages
2 116 603
Membres
112 802
dernier inscrit
Dan Marc