Convertir string en autres string en utilisant "select case"

Résolu
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007 - 4 juin 2005 à 18:24
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007 - 8 juin 2005 à 21:53
bonjour,
j'ai besoin de faire une fonction qui permet de convertir une chaine de caracteres en une autre chaine de caracteres en utilisant "select case"; cad si qlq entre une chaine de caracteres dans "text1" -->dans "text2" apparait une autre chaine de caracteres (ex: en text1="alin" --> text2="jard") en se basant dans "select case" de remplacer chaque caractere par une autre caractere
stp aider moi de faire cette fonction
et merci d'avance.

30 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 juin 2005 à 21:37
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

Dim x As Integer

x = Text1.SelStart

Select Case KeyCode

Case 8: If x > 0 Then Text2 = Left$(Text2.Text, x - 1) & Mid$(Text2.Text, x + 1)

Case 46: Text2 = Left$(Text2.Text, x) & Mid$(Text2.Text, x + 2)

End Select

End Sub



Private Sub Text1_KeyPress(KeyAscii As Integer)

Dim i As Integer

Dim x As Integer

Dim K As String



If KeyAscii = 8 Then Exit Sub



Select Case Chr$(KeyAscii)

Case "a": K = "j"

Case "l": K = "a"

Case "i": K = "r"

Case "n": K = "d"

Case Else: K = Chr$(KeyAscii)

End Select

x = Text1.SelStart

Text2 = Left$(Text2.Text, x) & K & Mid$(Text2.Text, x + 1)

End Sub


Daniel
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
5 juin 2005 à 11:14
Salut,
elmekki, ton code un peu corrigé :

Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim k As String
Select Case Chr(KeyAscii)
Case "a": k = "j"
Case "l": k = "a"
Case "i": k = "r"
Case "n": k = "d"
End Select
Text2.SetFocus
If k <> "" Then
SendKeys k
Else
SendKeys Chr(KeyAscii)
End If
End Sub


Private Sub Text2_Change()
Text1.SetFocus
End Sub

Ainsi le focus reviendra à ta 1ère textbox et tu pourras utiliser le bakspace pour effacer le dernier caractère.
Si tu veux que ta 2ème textbox reçoive (en dehors des caractères modifiés) les mêmes commandes (suppr, déplacement avec les flèches,...) ça devient plus complexe mais il me semble que j'ai déjà vu ça sur le site.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 juin 2005 à 18:18
il faut faire la même chose avec Text2_change.

1) il faut éviter que Text1_Change entraîne Text2_Change et réciproquement

2) il faut conserver la position du curseur

3) pas de double dans s1 et s2, si "a" --> "d" il faut "d" --> "a"





Dim s1 As String

Dim s2 As String

Dim bb As Boolean



Private Sub Form_Load()

s1 = "abcdefghijklmnopqrstuvwxyz"

s2 = "jbcnefghrlkamdopqistuvwxyz"

End Sub



Private Sub Text1_Change()

Dim i As Integer

Dim j As Integer

Dim c As String

Dim s As String

If bb Then Exit Sub

bb = True

For j = 1 To Len(Text1.Text)

c = Mid$(Text1.Text, j, 1)

i = InStr(s1, c)

If i > 0 Then

s = s & Mid$(s2, i, 1)

Else

s = s & c

End If

Next

i = Text2.SelStart

Text2.Text = s

Text2.SelStart = i

bb = False

End Sub



Private Sub Text2_Change()

Dim i As Integer

Dim j As Integer

Dim c As String

Dim s As String

If bb Then Exit Sub

bb = True

For j = 1 To Len(Text2.Text)

c = Mid$(Text2.Text, j, 1)

i = InStr(s2, c)

If i > 0 Then

s = s & Mid$(s1, i, 1)

Else

s = s & c

End If

Next

i = Text1.SelStart

Text1.Text = s

Text1.SelStart = i

bb = False

End Sub


Daniel
3
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 8 septembre 2006 1
4 juin 2005 à 19:18
Si j'ai bien compris ce que tu veux dire, je ferais un truc du genre:

sub text1_keypress(byval keycode (ou keyascii, je sais plus) as integer)
select case keycode '(ou keyascii, toujours)
case "a"
textbox2.setfocus
sendkeys("j")
case "l"
textbox2.setfocus
sendkeys("a")
'pour chaque lettre on répèe l'opération
end select

Cependant, je n'ai pas VB installé sur le poste avec lequel j'écris ca, donc j'ai pas pu tester si c'était exactement la technique à utiliser, mais je pense que ca fait déjà une bonne base de recherche...

Brice
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
4 juin 2005 à 19:31
Bonsoir,



Tu peux faire aussi



Private Sub Text1_Change()

Select Case Texte1

Case "alin"

Text2 = "jard"

Case "loisir"

Text2 = "bon temps"

Case Else

Text2 = ""

End Select



jpleroisse
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
4 juin 2005 à 20:12
bonsoir
merci pour votre reponse.
pastis51forever c exactement ce que je veux mais le code ca marche pa , il me donne une erreur à (case "a")
est ce que vous pouvez ou qlqun peu corriger le code:


private sub text1_keypress(keyascii as integer)
select case keyascii
case "a"
text2.setfocus
sendkeys("j")
case "l"
text2.setfocus
sendkeys("a")
end select
end sub
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 juin 2005 à 20:26
ça risque de faire beaucoup de Select Case s'il y a beaucoup de lettres.









Dim s1 As String

Dim s2 As String



Private Sub Form_Load()

'complète tes chaînes de correspondances

s1 = "alin"

s2 = "jard"

End Sub



Private Sub Text1_KeyPress(KeyAscii As Integer)

Dim i As Integer

i = InStr(s1, Chr$(KeyAscii))

If i > 0 Then

KeyAscii = Asc(Mid$(s2, i, 1))

End If

End Sub


Daniel
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
4 juin 2005 à 20:31
Keyascii est en "INTEGER" comment retrouver un "a" dans le select case !! ca me parait difficile ---> (Chr$())
private sub text1_keypress(keyascii as integer)
select case chr$(keyascii)
case "a"
text2.setfocus
sendkeys("j")
case "l"
text2.setfocus
sendkeys("a")
end select
end sub

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
4 juin 2005 à 20:38
c'est sur Daniel, c'est fastidieux, on peut aussi utiliser la fonction "switch"

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 juin 2005 à 20:56
je l'ai fait directement dans Text1 mais tu peux adapter pour Text2:
If i > 0 Then

Text2.Text = Text2.Text & Mid$(s2, i, 1)

End If



le problème c'est que le nouveau caractère entré n'est pas forcément à
la fin, il y a aussi les suppressions de caractères qui se reflèteront
pas dans Text2, bref l'édition complète.



Private Sub Text1_Change()

Dim i As Integer

Dim j As Integer

Dim c As String

Dim s As String

For j = 1 To Len(Text1.Text)

c = Mid$(Text1.Text, j, 1)

i = InStr(s1, c)

If i > 0 Then

s = s & Mid$(s2, i, 1)

Else

s = s & c

End If

Next

Text2.Text = s


End Sub


Daniel
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
4 juin 2005 à 21:07
Lorsque je tappe un text dans textbox1 par exemple si je tape la lettre "a" il la converti en "j" en textbox2 mais le curseur passe au textbox2 il me laisse pa de continuer le mot dans textbox1, c mon premier probleme.
et aussi lorsque j'efface une caractere a textbox1 il s' efface pa à textbox2, c mon deuxieme probleme.
Svp aider moi d'ajouter ces taches a ce code en gardant "select case" :

private sub text1_keypress(keyascii as integer)
select case chr$(keyascii)
case "a"
text2.setfocus
sendkeys("j")
case "l"
text2.setfocus
sendkeys("a")
end select
end sub

Merci d'avance
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 juin 2005 à 21:42
il vaut mieux supprimer tous les caractères < 32 comme chr$(13) , Ctrl(M), etc..



<strike> If KeyAscii = 8 Then Exit Sub

</strike> If KeyAscii < 32 Then Exit Sub


Daniel
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
4 juin 2005 à 21:42
private sub text1_keypress(keyascii as integer)
dim Ret as string
select case chr$(keyascii)
case "a"
ret = "j"
case "l"
ret = "a"
end select

text2.text = text2.text & ret
end sub

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
4 juin 2005 à 23:36
Bonsoir,

Question toute simple (comme le code)

elmekki, as-tu essayés le code que je t' ais passé ?

jpleroisse
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
5 juin 2005 à 00:35
JP, il veut tester chaque caractere, et non tout d'un seul coup, d'apres son post.

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
5 juin 2005 à 01:36
OK, liquide,

Mais parfois je me pose la question, quel genre de programme
fabriquent-ils (bon nombre de posteurs) . Que recherche un utilisateur ?

A mon avis la simplicité, la rapidité et l'efficacité.

Tu sais, les barres de titres qui clignottent, les progressBar
multiCouleur, ect...ect.., je pense que celà est bien pour programmer
et apprendre, mais dans un programme (disons sérieux) celà ne fait pas
très sérieux.

Enfin, c'est mon avis et ce n'est pas le sujet.

Bonne prog et bonne nuit.



jpleroisse
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
5 juin 2005 à 20:51
Merci à tous pour vos reponses,
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
5 juin 2005 à 21:15
bonsoir jpleroisse moi je veux tester chaque caractere apart ,
de toute facon merci pour vos reponses
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
5 juin 2005 à 22:37
j'ia toujours pas compris pourquoi vous faisiez un sendcase et un focus sur la textbox2, puisque tout peut etre balancer sans qu'elle prenne le focus pour ensuite le lui faire perdre au bénéfice de la textbox1, autant que la textbox1 conserve le focus en permanence.

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
6 juin 2005 à 20:04
liquide > tu as tout a fait raison, il existe une autre manière, sans sendkeys et qui plus est prend en charge toute opération sur le textbox1 :

Il faut oublier le keypress et autres keydown et keyup. Dans le change du textbox1, on analyse la chaine car par car puis on transmet le résultat à textbox2 :

Private Sub Text1_Change()
Dim s As String
Dim k As String
Dim i As Integer


For i = 1 To Len(Text1.Text)
k = Mid(Text1.Text, i, 1)
Select Case k
Case "a": s = s & "j"
Case "l": s = s & "a"
Case "i": s = s & "r"
Case "n": s = s & "d"
Case Else: s = s & k
End Select
Next


Text2.Text = s


End Sub

Question performance, je n'ai pas analysé mais bon, quand il s'agit de saisie, je ne crois pas que la différence soit sensible. Surtout qu'on a un résultat beaucoup plus correct.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Rejoignez-nous