Changer les lettres avec celles qui viennent en 3eme position apres dans l'alphab

garrec

XLDnaute Occasionnel
Bonjour :confused:

j'ai un Useform avec un CommandButton1_Click() et un TextBox1

J'aimerais quand j'écris par exemple : toto dans le Text Box obtenir wrwr et quand j'écrit TOTO obtenir WRQR.

W = T + 3 caractères dans l'alphabet (T U V W)
R = O + 3 caractères dans l'alphabet (O P Q R)

J'ai déjà coder ceci

Code:
Private Sub CommandButton1_Click()

Dim lettre As String, decalage As Integer

lettre = TextBox1

decalage = 3

MsgBox (Cesar(lettre, decalage))

End Sub

Function Cesar(lettre As String, decalage As Integer) As String



Dim LResult As Integer

Dim Declettre As String

Dim DecResult As Integer



LResult = Asc(lettre)

DecResult = (LResult + 3)



    If DecResult > 90 Then

    DecResult = CInt((Fix((DecResult - 65) Mod 26)) + 65)

    End If

    

Declettre = Chr(DecResult)

Cesar = Declettre

End Function






Private Sub TextBox1_Change()

End Sub

Cette macro me change seulement une lettre en majuscule en la lettre qui vient 3 fois apres dans l'alphabet avec la fonction Asc mais je ne trouve pas comment prendre un string en entier et aussi en minuscule

Je joint mon fichier ci dessous!

Thanks in advance:D
 

Pièces jointes

  • gestion de portefeuille VBA.xlsm
    22.3 KB · Affichages: 37

Pierrot93

XLDnaute Barbatruc
Re : Changer les lettres avec celles qui viennent en 3eme position apres dans l'alpha

Bonjour,

regarde peut être ceci, utiliser dans le module de l'usf :
Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = KeyAscii + 3
End Sub
bon après midi
@+
 

garrec

XLDnaute Occasionnel
Re : Changer les lettres avec celles qui viennent en 3eme position apres dans l'alpha

Bonjour Pierrot

Merci mais je ne vois pas tres bien ce que tu veux dire avec ce code

Private Sub CommandButton1_Click()



Dim lettre As String, decalage As Integer

lettre = TextBox1

decalage = 3

MsgBox (Cesar(lettre, decalage))

End Sub

Function Cesar(lettre As String, decalage As Integer) As String



Dim LResult As Integer

Dim Declettre As String

Dim DecResult As Integer



LResult = Asc(lettre)

DecResult = (LResult + 3)



If DecResult > 90 Then

DecResult = CInt((Fix((DecResult - 65) Mod 26)) + 65)

End If



Declettre = Chr(DecResult)

Cesar = Declettre

End Function


Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = KeyAscii + 3
End Sub

Pour ma part je pense qu'il y a 2 probleme

Le problemes des minuscules mais on peut les obtenirs entre 90 et 122 avec des IF

mais dans mon texte box on ne peut prendre QUE une lettre toujours et non pas une chaine de caractere??

non?
 

Pierrot93

XLDnaute Barbatruc
Re : Changer les lettres avec celles qui viennent en 3eme position apres dans l'alpha

Re,

une autre proposition qui répondra peut être un peu plus à la demande...
Code:
Private Sub CommandButton1_Click()
Dim i As Byte, t As String
For i = 1 To Len(TextBox1)
    t = t & Chr(Asc(Mid(TextBox1, i, 1)) + 3)
Next i
MsgBox t
 

garrec

XLDnaute Occasionnel
Re : Changer les lettres avec celles qui viennent en 3eme position apres dans l'alpha

Pierrot

J'ai une question sur les majuscules et les minuscules avant de changer toute la chaine de texte ;)

Code:
Private Sub CommandButton1_Click()

Dim lettre As String

lettre = TextBox1


MsgBox (Cesar(lettre))

End Sub

Function Cesar(lettre As String) As String



Dim LResult As Integer

Dim Declettre As String

Dim DecResult As Integer



LResult = Asc(lettre)

'Pour les majuscules jusqu'a W

If 65 < LResult <= 87 Then

DecResult = (LResult + 3)

End If

'X Y Z

If LResult = 88 Then

DecResult = 65

End If

If LResult = 89 Then

DecResult = 66

End If

If LResult = 90 Then

DecResult = 67

End If

' Pour les minuscules

If 97 < LResult <= 122 Then
    
DecResult = (LResult + 3)
    
End If
    
Declettre = Chr(DecResult)

Cesar = Declettre

End Function

Pourquoi par exemple quand je met X il me resort pas le Chr(65) ? Quand je fais le pas a pas détaillé il passe sur les deux conditions ci dessous?

If 65 < LResult <= 87 Then

If 97 < LResult <= 122 Then
 

garrec

XLDnaute Occasionnel
Re : Changer les lettres avec celles qui viennent en 3eme position apres dans l'alpha

Re!

J'ai finalement fait comme ça (code ci dessous) mais j'ai toujours un pb avec x y z et X Y Z

Code:
Private Sub CommandButton1_Click()

Dim i As Byte, t As String

Dim AscCaractere As Integer

For i = 1 To Len(TextBox1)

AscCaractere = Asc(Mid(TextBox1, i, 1))

    t = t & Chr(Cesar(AscCaractere))
    
Next i

MsgBox t

End Sub


Function Cesar(AscCaractere As Integer) As Integer



Dim Declettre As String

Dim DecResult As Integer




'Pour les majuscules jusqu'a W

If 65 <= AscCaractere <= 87 Then

DecResult = (AscCaractere + 3)

End If

'X Y Z

If AscCaractere = 88 Then

DecResult = 65

End If

If AscCaractere = 89 Then

DecResult = 66

End If

If AscCaractere = 90 Then

DecResult = 67

End If


' Pour les minuscules

If 97 < AscCaractere <= 122 Then
    
DecResult = (AscCaractere + 3)
    
End If

    
Cesar = DecResult



End Function
 

Pierrot93

XLDnaute Barbatruc
Re : Changer les lettres avec celles qui viennent en 3eme position apres dans l'alpha

Bonjour,

peut être comme ceci :
Code:
Private Sub CommandButton1_Click()
Dim i As Byte, t As String, x As Integer
For i = 1 To Len(TextBox1)
    x = Asc(Mid(TextBox1, i, 1))
    If (x >= 88 And x <= 90) Or (x >= 120 And x <= 122) Then
        x = x - 23
    Else
        x = x + 3
    End If
    t = t & Chr(x)
Next i
MsgBox t
End Sub

bonne journée
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 321
Membres
103 178
dernier inscrit
BERSEB50