VBA TextBox1 vers TextBox2, majuscule et espaces sur copie.

Résolu
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 - 18 oct. 2023 à 15:46
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 19 oct. 2023 à 12:02

Bonjour,

Je cherche à copier le contenue de TextBox1 dans TextBox2, la copie doit être en majuscule et doit avoir un espace entre les chiffres et les lettre.

Le contenue du TextBox1 peut-être le suivant:

aZetHd52B4005
158erT544P
123001
Btcht025890000001
TXXXXXX45
00547999BTb4563

Dans Module1 j'ai:

Public Function spacer(s As String) As String
    Dim i As Long, buf As String, L As Long
    L = Len(s)
    If L < 2 Then
        spacer = s
        Exit Function
    End If
    
    buf = Left(s, 1)
    For i = 2 To L
        v1 = Right(buf, 1)
        v2 = Mid(s, i, 1)
        If (v1 Like "[a-zA-Z]" And v2 Like "[0-9]") Or (v2 Like "[a-zA-Z]" And v1 Like "[0-9]") Then
            buf = buf & " "
        End If
        buf = buf & v2
    Next i
    
    spacer = buf
End Function

Dans UserForm1 j'ai:

TextBox1:

Private Sub TextBox1_Change()

Me.TextBox1 = Me.TextBox2

End Sub

TextBox2:

Private Sub TextBox2_Change()

Dim A As Variant
A = Me.TextBox2
A = UCase(A)
Me.TxetBox2 = A

spacer (TextBox2.Value)

End Sub

Je ne vois pas ce qui ne vas pas?

Pouvez-vous m'aider?

Bien cordialement

3 réponses

NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
Modifié le 18 oct. 2023 à 22:10

Ou avais-je la tête !!!

Private Sub TextBox1_Change()
    TextBox2 = spacer(TextBox1.Value)
    TextBox2 = UCase(TextBox2.Value)
End Sub
1
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
19 oct. 2023 à 08:08

Tu peux directement écrire 

TextBox2.Value = UCase(spacer(TextBox1.Value))

Et j'insiste sur la mauvaise pratique de passer par la conversion implicite 


0
NeriXs Messages postés 258 Date d'inscription lundi 4 mai 2015 Statut Membre Dernière intervention 27 février 2024 1
19 oct. 2023 à 09:01

Dans ce cas-là je pourrais l'écrire:

TextBox2.Text = UCase(spacer(TextBox1.Text))

Concernant "Option Strict" ça reste assez obscure.
Avec "Option Strict" avec le code ci-dessus je ne parviens pas à tout déclarer correctement pour que ça passe.

0

Effectivement la propriété Text devrait passer aussi.

Par contre, sur Excel 2016, je n'ai pas Option Strict, en fait quand je l'ai écrit je confondais avec VB.Net (je ne code jamais en VBA).

Pour ta fonctions spacer, je pense que ça peut se réduire à un replace regex. Mais faut que je vérifie que ça existe e, VBA.

0
Whismeril > Whismeril
19 oct. 2023 à 11:32

Oui ça marche

Public Function spacerRegex(s As String) As String
    Dim RegEx, matches, Match As Object
    
    Set RegEx = New RegExp

    RegEx.Global = True
    RegEx.Pattern = "(\d+)(\D+)?"
    Set matches = RegEx.Execute(code)

    spacerRegex = UCase(Trim(RegEx.Replace(s, " $1 $2")))
End Function
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656 > Whismeril
19 oct. 2023 à 12:02

Je viens de m'apercevoir que j'ai laissé de test en trop

Public Function spacerRegex(s As String) As String
    Dim RegEx As Object
    
    Set RegEx = New RegExp

    RegEx.Global = True
    RegEx.Pattern = "(\d+)(\D+)?"

    spacerRegex = UCase(Trim(RegEx.Replace(s, " $1 $2")))
End Function
0
Rejoignez-nous