SUPPRESSION DE CARACTÈRES DANS UN STRING

Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 - 22 sept. 2005 à 20:59
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 8 juin 2006 à 11:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33908-suppression-de-caracteres-dans-un-string

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 juin 2006 à 11:57
ce genre de question est récurrent, et des sources le traite.

une solution possible :

Private Const ES_UPPERCASE As Long = &H8&
Private Const GWL_STYLE As Long = -16

Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Form_Load()
SetWindowLong Text1.hwnd, GWL_STYLE, ES_UPPERCASE Or (GetWindowLong(Text1.hwnd, GWL_STYLE))
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
If InStrB("1234567890ABCDEFabcdef" & Chr$(8) & Chr$(24) & Chr$(22) & Chr$(3), Chr$(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End Sub




attention, tu peux ici coller des valeurs interdites...
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
8 juin 2006 à 11:55
Slu

il faut traiter la valeur ascii dans la fonction keypress .... il faut, je crois, mettre ascii = 0 pour les caracteres qui ne sont pas permis !
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 juin 2006 à 11:53
Merci de poser ta question sur le Forum...
sanyohan13 Messages postés 7 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 23 mars 2009
8 juin 2006 à 11:42
salut
je débute et je voudrais savoir comment faire pour écrire seulement "1234567890ABCDEF" et que les autres caractères ne s'écrivent pas m^me si on appuie dessus...
merci
VBsnail Messages postés 13 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 19 mars 2008
23 févr. 2006 à 23:47
Bon, à la demande générale, le code avec la fonction Replace:
Function Strip(ByVal strA As String, ByVal ParamArray varZoek() As String)
' Merci Jean Elens
Dim intTel As Integer
Dim strNew As String
Dim varteken As Object
Dim strTekst As String

strTekst = strA
For Each varteken In varZoek
strNew = ""
'For intTel = 1 To Len(strTekst)
' If Mid(strTekst, intTel, 1) <> varteken Then
' strNew = strNew & Mid(strTekst, intTel, 1)
' End If
'Next
strNew = Replace(strTekst, varteken, "")

strTekst = strNew
MessageBox.Show(strNew, "Strip", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
Next
Strip = strNew
End Function
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 févr. 2006 à 10:21
en Visual Basic 2005 :o

tu ne va pas me faire croire qu'il n'existe pas de fonction Replace !!!
VBsnail Messages postés 13 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 19 mars 2008
23 févr. 2006 à 09:45
Merci pour ce code qui est bien utile au débutant que je suis.
Je l'ai adapté pour VisualBasic 2005 Express edition, cela donne:

Function Strip(ByVal strA As String, ByVal ParamArray varZoek() As String)

Dim intTel As Integer
Dim strNew As String
Dim varteken As Object
Dim strTekst As String

strTekst = strA
For Each varteken In varZoek
strNew = ""
For intTel = 1 To Len(strTekst)
If Mid(strTekst, intTel, 1) <> varteken Then
strNew = strNew & Mid(strTekst, intTel, 1)
End If
Next
strTekst = strNew
MessageBox.Show(strNew, "Strip", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
Next
Strip = strNew
End Function
sosodef88 Messages postés 78 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 décembre 2005
24 sept. 2005 à 20:53
je pourrai te rajouter deux ligne dans mon code pour ariver au meme résultat mé bon ca suffit et la tienne est largement bonne. aller bonne prog a+
Jean_Elens Messages postés 53 Date d'inscription dimanche 29 mai 2005 Statut Membre Dernière intervention 16 octobre 2006
24 sept. 2005 à 16:54
sosodef88, la via les lignes que tu mentionnes, tu ne supprimes que le signe "|", ici, via ma fonction, tu peux supprimer une serie de caractères. Et cela fonctionne très bien en VB5.

En effet, la fonction "replace" de VB6 améliore le code. Donc ceux qui ont VB6 pourront facilement l'améliorer. (voir code de draluorg)

Pour les noms de variables, je les ai utilisées dans ma langue (néerlandais) mais j'ai un VB anglais, et de temps en temps, je mets un mot en EN. Voilà l'explication.
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
23 sept. 2005 à 15:39
Pourquoi utiliser des variables néerlandaises mélangées à des variables anglaises ??? lol
A part ce petit problème d'esthétique, rien à redire...
sosodef88 Messages postés 78 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 décembre 2005
23 sept. 2005 à 13:46
loool encore un peu et j'allais te dire de dormir un bon coup :D
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
23 sept. 2005 à 13:44
oup's non sorry suis vraiment fatigue moi j'avais aller me coucher mdr
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
23 sept. 2005 à 13:41
Eh wai mais non tu n'est pas sence connaitre le la variable "a" a l'avance ;)
sosodef88 Messages postés 78 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 décembre 2005
23 sept. 2005 à 13:38
j'avais très bien compris mé il suffit juste de rajouter

a = "salut"
do until instr(1,a,"l") = 0
StrDel a, "l"
loop
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
23 sept. 2005 à 13:18
Yep j'avais bien compris mais je parlais pour ceux juste au dessus qui n'avaient pas l'air d'avoir saisi que la fonction etait pour remplacer toute une liste de caractere et non 1 seul
ou alors j'ai rien compris lol ;)
@+
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 sept. 2005 à 13:13
L'idée, c'est de ne pas utiliser la fonction replace...
(dont les utilisateurs de VB5 ne disposent pas)
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
23 sept. 2005 à 01:17
Pour virer un tableau de caractere, je ferai plutot ceci:

toto = "azè-e(r(tè-y"
MsgBox Strip(toto, "(", "è", "-") ' donne "azerty"
Function Strip(strA As String, ParamArray varZoek()) As String
Dim i As Long
For i = 0 To UBound(varZoek)
strA = Replace(strA, varZoek(i), vbNullString)
Next i
Strip = strA
End Function

non ?
sosodef88 Messages postés 78 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 décembre 2005
22 sept. 2005 à 23:18
oui c'est sure

> msgbox Replace("salut", "t", "")
****************************************
et une ptite fonction vite fé

Function StrDel(Str As String, DelChar) As String
For a = 1 To Len(Str)
If Mid(Str, a, 1) = DelChar Then
StrDel = Mid(Str, 1, a - 1) & Mid(Str, a + 1)
End If
Next a
End Function
shadowmoy Messages postés 340 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 25 août 2007
22 sept. 2005 à 22:58
sauf pour les users de vb5 .....
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
22 sept. 2005 à 20:59
Slu

pas mal, mais il y avait plus simple ... en utilisant la fonction Replace !
Rejoignez-nous