Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Supprimer des caractères indésirables

13 réponses
Avatar
Nicolas B.
Bonjour,

Dans une chaîne de caractères comme celle-ci :ABC-000.123&4, je voudrais ne
conserver que les lettres (en majuscules) et les chiffres. Ca donnerait donc
ABC0001234.
Tout ça par VBA, et si possible passer par une boucle qui testerait un à un
les caractères parasites.

Comment puis-je faire ?


Merci :-)
--
Nicolas B.

10 réponses

1 2
Avatar
isabelle
bonjour Nicolas,

avec la chaine de caractère en cellule A1, le résultat sera mit en
cellule A2.

Sub Macro1()
For i = 1 To Len(Range("A1"))
u = Mid(Range("A1"), i, 1)
If IsNumeric(u) Or (Asc(u) >= 65 And Asc(u) <= 90) Then
m = m & u
End If
Next
Range("A2") = m
End Sub

isabelle


Bonjour,

Dans une chaîne de caractères comme celle-ci :ABC-000.123&4, je voudrais ne
conserver que les lettres (en majuscules) et les chiffres. Ca donnerait donc
ABC0001234.
Tout ça par VBA, et si possible passer par une boucle qui testerait un à un
les caractères parasites.

Comment puis-je faire ?

Merci :-)
--
Nicolas B.


Avatar
AV
Ca pourrait faire ça :

Sub zzzz()
For i = 1 To Len(ActiveCell)
If Asc(Mid(ActiveCell, i, 1)) > 64 And Asc(Mid(ActiveCell, i, 1)) < 91 _
Or Asc(Mid(ActiveCell, i, 1)) > 47 And Asc(Mid(ActiveCell, i, 1)) < 58 Then
x = x & Mid(ActiveCell, i, 1)
Next
MsgBox x
End Sub

AV
Avatar
Nicolas B.
Merci isabelle, ça marche.


A+
--
Nicolas B.


bonjour Nicolas,

avec la chaine de caractère en cellule A1, le résultat sera mit en
cellule A2.

Sub Macro1()
For i = 1 To Len(Range("A1"))
u = Mid(Range("A1"), i, 1)
If IsNumeric(u) Or (Asc(u) >= 65 And Asc(u) <= 90) Then
m = m & u
End If
Next
Range("A2") = m
End Sub

isabelle


Bonjour,

Dans une chaîne de caractères comme celle-ci :ABC-000.123&4, je
voudrais ne conserver que les lettres (en majuscules) et les
chiffres. Ca donnerait donc ABC0001234.
Tout ça par VBA, et si possible passer par une boucle qui testerait
un à un les caractères parasites.

Comment puis-je faire ?

Merci :-)
--
Nicolas B.




Avatar
Nicolas B.
Merci à toi aussi.
:-)


A+
--
Nicolas B.


Ca pourrait faire ça :

Sub zzzz()
For i = 1 To Len(ActiveCell)
If Asc(Mid(ActiveCell, i, 1)) > 64 And Asc(Mid(ActiveCell, i,
1)) < 91 _ Or Asc(Mid(ActiveCell, i, 1)) > 47 And
Asc(Mid(ActiveCell, i, 1)) < 58 Then
x = x & Mid(ActiveCell, i, 1)
Next
MsgBox x
End Sub

AV


Avatar
_rg_rg_
"Nicolas B." wrote in news:eppfSH
$:

ABC-000.123&4





Private Function Clean(ByVal S As String) As String
Const OUT As String = "-.&"
Dim i As Long
Clean = S
For i = 1 To Len(OUT)
While InStr(Clean, Mid(OUT, i, 1)) > 0
Position = InStr(Clean, Mid(OUT, i, 1))
Clean = Left(Clean, InStr(Clean, Mid(OUT, i, 1)) - 1) _
& Right(Clean, Len(Clean) - InStr(Clean, Mid(OUT, i, 1)))
Wend
Next i
End Function

Avatar
Pascal Engelmajer
Salut
Performant :
Public Function cleanAZ09(S As String) As String
'nécessite une référence à Microsoft VBScriprt Regular Expression 5.5
Dim regex As RegExp
'Application.Volatile True 'Si utile
Set regex = New RegExp
regex.Global = True ' Définit le champ d'application.
regex.IgnoreCase = True ' Ignore la casse.
S = "ABC-000.123&4"
regex.Pattern = "[^A-Z0-9]" ' non A à Z et 0 à 9
S = regex.Replace(S, "")
cleanAZ09 = S
End Function
Sub test()
MsgBox cleanAZ09("ABC-000.123&4")
End Sub

--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Nicolas B." a écrit dans le message de
news: eppfSH$
Bonjour,

Dans une chaîne de caractères comme celle-ci :ABC-000.123&4, je voudrais
ne

conserver que les lettres (en majuscules) et les chiffres. Ca donnerait
donc

ABC0001234.
Tout ça par VBA, et si possible passer par une boucle qui testerait un à
un

les caractères parasites.

Comment puis-je faire ?


Merci :-)
--
Nicolas B.




Avatar
Pascal Engelmajer
Salut Alain,
à force de voir ce type de question je suggère l'usage de Microsoft VBScript
Regular Expression 5.5
c'est très puissant...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"AV" a écrit dans le message de news:
et$EfU$
Ca pourrait faire ça :

Sub zzzz()
For i = 1 To Len(ActiveCell)
If Asc(Mid(ActiveCell, i, 1)) > 64 And Asc(Mid(ActiveCell, i, 1)) <
91 _

Or Asc(Mid(ActiveCell, i, 1)) > 47 And Asc(Mid(ActiveCell, i, 1)) <
58 Then

x = x & Mid(ActiveCell, i, 1)
Next
MsgBox x
End Sub

AV




Avatar
Pascal Engelmajer
Salut,
attention il faut supprimer le S en dur dans la fonction (utilisé pour
tester)
Public Function cleanAZ09(S As String) As String
'nécessite une référence à Microsoft VBScriprt Regular Expression 5.5
Dim regex As RegExp
'Application.Volatile True 'Si utile
Set regex = New RegExp
regex.Global = True ' Définit le champ d'application.
regex.IgnoreCase = True ' Ignore la casse.
'ligne à supprimer ============================== > S = "ABC-000.123&4"

'========================================== > regex.Pattern = "[^A-Z0-9]" ' non A à Z et 0 à 9
S = regex.Replace(S, "")
cleanAZ09 = S
End Function


--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Pascal Engelmajer" a écrit dans le
message de news: #$zlRe$
Salut
Performant :
Public Function cleanAZ09(S As String) As String
'nécessite une référence à Microsoft VBScriprt Regular Expression 5.5
Dim regex As RegExp
'Application.Volatile True 'Si utile
Set regex = New RegExp
regex.Global = True ' Définit le champ d'application.
regex.IgnoreCase = True ' Ignore la casse.
S = "ABC-000.123&4"
regex.Pattern = "[^A-Z0-9]" ' non A à Z et 0 à 9
S = regex.Replace(S, "")
cleanAZ09 = S
End Function
Sub test()
MsgBox cleanAZ09("ABC-000.123&4")
End Sub

--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Nicolas B." a écrit dans le message de
news: eppfSH$
Bonjour,

Dans une chaîne de caractères comme celle-ci :ABC-000.123&4, je voudrais
ne

conserver que les lettres (en majuscules) et les chiffres. Ca donnerait
donc

ABC0001234.
Tout ça par VBA, et si possible passer par une boucle qui testerait un à
un

les caractères parasites.

Comment puis-je faire ?


Merci :-)
--
Nicolas B.








Avatar
Nicolas B.
Merci pour ta réponse, mais je voulais en fait une solution sans boucler sur
chaque caractère à supprimer (vu qu'il y en a presque 200).


A+
--
Nicolas B.


"Nicolas B." wrote in news:eppfSH
$:

ABC-000.123&4





Private Function Clean(ByVal S As String) As String
Const OUT As String = "-.&"
Dim i As Long
Clean = S
For i = 1 To Len(OUT)
While InStr(Clean, Mid(OUT, i, 1)) > 0
Position = InStr(Clean, Mid(OUT, i, 1))
Clean = Left(Clean, InStr(Clean, Mid(OUT, i, 1)) - 1) _
& Right(Clean, Len(Clean) - InStr(Clean, Mid(OUT, i, 1)))
Wend
Next i
End Function



Avatar
Nicolas B.
Merci aussi, pour une soluion originale.


A+
--
Nicolas B.


Salut
Performant :
Public Function cleanAZ09(S As String) As String
'nécessite une référence à Microsoft VBScriprt Regular Expression
5.5 Dim regex As RegExp
'Application.Volatile True 'Si utile
Set regex = New RegExp
regex.Global = True ' Définit le champ d'application.
regex.IgnoreCase = True ' Ignore la casse.
S = "ABC-000.123&4"
regex.Pattern = "[^A-Z0-9]" ' non A à Z et 0 à 9
S = regex.Replace(S, "")
cleanAZ09 = S
End Function
Sub test()
MsgBox cleanAZ09("ABC-000.123&4")
End Sub

--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Nicolas B." a écrit dans le
message de news: eppfSH$
Bonjour,

Dans une chaîne de caractères comme celle-ci :ABC-000.123&4, je
voudrais ne conserver que les lettres (en majuscules) et les
chiffres. Ca donnerait donc ABC0001234.
Tout ça par VBA, et si possible passer par une boucle qui testerait
un à un les caractères parasites.

Comment puis-je faire ?


Merci :-)
--
Nicolas B.




1 2