Vba excel - plusieurs textbox [Résolu/Fermé]

Signaler
Messages postés
21
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
20 février 2017
-
Messages postés
21
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
20 février 2017
-
Bonjour,



Bonjour, J'ai plusieurs textbox dans un userform et j'ai indiqué pour chaque textbox un code vba afin de n'accepter que la virgule et pouvoir la compléter 2 chiffres après la virgule mais j'aimerais savoir si quelqu'un pourrait m'aider pour réduire le code car il est très long:

'TEXTBOX EN VALEUR NUMERIQUE + 2 CHIFFRES APRES LA VIRGULE
Private Sub Textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or Textbox1.SelStart > 0 And Chr(KeyAscii) = "-" _
Or InStr(Textbox1.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
KeyAscii = 0: Beep
End If
If Right(Textbox1, 1) = "." Or Right(Textbox1, 1) = "," Then
Textbox1.MaxLength = Len(Textbox1) + 2
End If
End Sub

Private Sub Textbox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or Textbox2.SelStart > 0 And Chr(KeyAscii) = "-" _
Or InStr(Textbox2.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
KeyAscii = 0: Beep
End If
If Right(Textbox2, 1) = "." Or Right(Textbox2, 1) = "," Then
Textbox2.MaxLength = Len(Textbox2) + 2
End If
End Sub

Private Sub Textbox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or Textbox3.SelStart > 0 And Chr(KeyAscii) = "-" _
Or InStr(Textbox3.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
KeyAscii = 0: Beep
End If
If Right(Textbox3, 1) = "." Or Right(Textbox3, 1) = "," Then
Textbox3.MaxLength = Len(Textbox3) + 2
End If
End Sub

Private Sub Textbox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or Textbox4.SelStart > 0 And Chr(KeyAscii) = "-" _
Or InStr(Textbox4.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
KeyAscii = 0: Beep
End If
If Right(Textbox4, 1) = "." Or Right(Textbox4, 1) = "," Then
Textbox4.MaxLength = Len(Textbox4) + 2
End If
End Sub

-------------------------

de plus j'aimerais savoir si il existe un code pour que quand on quitte un textbox celui se mette automatiquement 2 chiffres après la virgule (ex: notez 99 dans un textbox et dès qu'on passe au 2ième, ça inscrit 99,00).

dans l'attente de vos lumières car je galère un peu

FRED

1 réponse

Messages postés
16366
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 janvier 2021
3 110
Bonjour

ci joint un 1° allègement avec 1 macro textbox au lieu de 4 en utilisant un module de classe
https://www.cjoint.com/?3GbjVRhkUvw
j'avoue ne pas avoir trop compris ton histoire de virgule...
la macro textbox se trouve maintenant dans le module de classe...
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
En fait, tu veux que tout tes textbox soient numériques avec virgule sauf le 1er TextBox1? Si c'est bien cela, alors dans l'userform_initialise de michel_m, il faut exclure le textbox1, peut être comme ceci :
Private Sub UserForm_Initialize() 
Dim Nb As Byte, Ctrl As Control 
ReDim liste(1) 
Nb = 0 
For Each Ctrl In UserForm1.Controls 
    If TypeName(Ctrl) = "TextBox" Then 
        If Ctrl.Name = "TextBox1" Then 
        Else 
            If Nb <= 3 Then 
                Nb = Nb + 1 
                ReDim Preserve liste(Nb) 
                Set liste(Nb).Tb_cle = Ctrl 
            'Else 'ici je ne comprends pas bien le else exit for 
                'Exit For 'si Fred a d'autres contrôles dans son Userform, ça fera "planter" le truc non? 
            End If 
        End If 
    End If 
Next 
End Sub

Et après ajouter un code pour le TextBox1 comme tu l'as indiqué :
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)  
KeyAscii = Asc(UCase(Chr(KeyAscii)))  
End Sub 

Personnellement, je l'aurais traité à la sortie de TextBox1 comme ceci :
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
If TextBox1 = "" Then Exit Sub 
TextBox1 = UCase(TextBox1) 
End Sub

Enfin, tout ça sous réserve d'avoir compris...
Messages postés
16366
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 janvier 2021
3 110
OK, mais je n'arrive pas à caser en module de classe la procédure "exit" pour le coup des décimales...
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
Ok. Ceci explique cela.
merci à vous tous, je vais tester tout ça et vous redit
Messages postés
21
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
20 février 2017

nikel, ça marche, merci à vous 2