Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1725 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Dans une TextBox, saisie uniquement numérique...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Dans une TextBox, saisie uniquement numérique...

n°1743588
scaryfan
Apple Inside
Posté le 09-06-2008 à 17:17:25  profilanswer
 

:hello:  
 
Bonsoir à tous !
 
Je présente mon problème.
J'ai une boîte de dialogue avec des zones de saisie (TextBox).
Certaines zones ne doivent être que des valeurs numériques... et d'autres alphanumériques.
Je cherche le code permettant de bloquer la personne qui va saisir de saisir des éléments non numériques... (bien sûr la virgule est acceptée).
 
;)

mood
Publicité
Posté le 09-06-2008 à 17:17:25  profilanswer
 

n°1743621
kiki29
Posté le 09-06-2008 à 18:52:48  profilanswer
 

Salut


Option Explicit
 
Const entrees_decimales_permises = ".,0123456789" & vbCr & vbBack
Const entrees_entieres_permises = "0123456789" & vbCr & vbBack
Const Point = "."
Const Virgule = ","
 
' Remplace une saisie accidentelle d'un POINT par une VIRGULE
' permet donc l'utilisation du pavé numérique et n'admettra  
' pas la saisie d'un second séparateur décimal  
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = Asc(Point) Then
        If InStr(TextBox1, Virgule) = 0 Then
            KeyAscii = Asc(Virgule)
        Else
            KeyAscii = 0
        End If
    ElseIf InStr(entrees_decimales_permises, Chr(KeyAscii)) = 0 Then
        KeyAscii = 0
    ElseIf InStr(TextBox1, Virgule) > 0 And KeyAscii = Asc(Virgule) Then
        KeyAscii = 0
    End If
     
    If KeyAscii = 13 Then SendKeys "{TAB}": KeyAscii = 0
End Sub
 
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr(entrees_entieres_permises, Chr(KeyAscii)) = 0 Then KeyAscii = 0
 
    If KeyAscii = 13 Then SendKeys "{TAB}": KeyAscii = 0
End Sub

Message cité 1 fois
Message édité par kiki29 le 09-06-2008 à 18:53:19
n°1743821
scaryfan
Apple Inside
Posté le 09-06-2008 à 22:08:48  profilanswer
 

kiki29 a écrit :

Salut


Option Explicit
 
Const entrees_decimales_permises = ".,0123456789" & vbCr & vbBack
Const entrees_entieres_permises = "0123456789" & vbCr & vbBack
Const Point = "."
Const Virgule = ","
 
' Remplace une saisie accidentelle d'un POINT par une VIRGULE
' permet donc l'utilisation du pavé numérique et n'admettra  
' pas la saisie d'un second séparateur décimal  
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = Asc(Point) Then
        If InStr(TextBox1, Virgule) = 0 Then
            KeyAscii = Asc(Virgule)
        Else
            KeyAscii = 0
        End If
    ElseIf InStr(entrees_decimales_permises, Chr(KeyAscii)) = 0 Then
        KeyAscii = 0
    ElseIf InStr(TextBox1, Virgule) > 0 And KeyAscii = Asc(Virgule) Then
        KeyAscii = 0
    End If
     
    If KeyAscii = 13 Then SendKeys "{TAB}": KeyAscii = 0
End Sub
 
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr(entrees_entieres_permises, Chr(KeyAscii)) = 0 Then KeyAscii = 0
 
    If KeyAscii = 13 Then SendKeys "{TAB}": KeyAscii = 0
End Sub



 
Salut kiki29 !
 
Merci pour le code, je vais essayer cela.
Par contre, je le place où ?
Dans le This Workbook, dans le code de la boîte de dialogue concernée ?
 ;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°1743825
scaryfan
Apple Inside
Posté le 09-06-2008 à 22:23:20  profilanswer
 

Bon, j'ai placé ton astuce au début du code de ma boîte de dialogue... et ça marche... cool.
Faut juste que je le copie 55 fois car j'ai 55 zone de saisie où il ne doit y avoir que des nombres.
Maintenant, j'ai une autre question.
Quand je saisis le nombre "25,25" et que je tabule, la donnée saisie est bien "25,25"... logique...  :D  
Quand je saisis "25,1" (ou "25" tout court) et que je tabule, la donnée saisie est "25,1" (ou "25" )... toujours logique...  :D  :D  
Mais j'aimerais que pour le "25,1" (ou "25" ), la donnée devienne "25,10" (ou "25,00" )... que la valeur soit constamment à 2 virgules...  :cry:  
Un peu comme quand on formate une cellule Excel avec 2 virgules et que - quelque soit la valeur saisie - on a toujours 2 virgules...
Et - grand luxe - qu'il y est le séparateur des milliers...  :p quand je tape "1524", j'aimerais "1 524" et non "1524"...


Message édité par scaryfan le 09-06-2008 à 22:25:17

---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°1743830
kiki29
Posté le 09-06-2008 à 22:41:47  profilanswer
 

Salut voir avec TextBox1_AfterUpdate() ou TextBox1_Exit et Format(TextBox1.Text, "##,##0.00" )

Message cité 1 fois
Message édité par kiki29 le 09-06-2008 à 22:48:29
n°1743840
scaryfan
Apple Inside
Posté le 09-06-2008 à 23:08:02  profilanswer
 

kiki29 a écrit :

Salut voir avec TextBox1_AfterUpdate() ou TextBox1_Exit et Format(TextBox1.Text, "##,##0.00" )


 
Merci, je vais essayer... ;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°1743951
scaryfan
Apple Inside
Posté le 10-06-2008 à 08:51:57  profilanswer
 

:hello:  
 
J'ai ce code :
 

Code :
  1. Private Sub R001_AfterUpDate()
  2.     If R002.Text = "" Then R001.Text = 0
  3.     Format (R001.Text, "##,##0.00" )
  4.      
  5. End Sub


 
Mais ça ne marche pas... j'ai le message 'Erreur de compilation : erreur de syntaxe' et la ligne "Format" se met en rouge...
Quand je passe à la ligne, il y a un nouveau message : 'Erreur de compilation - Attendu:='
Quel est le souci ???
 
 :??:  
 
Ma TextBox s'appelle R001...
 :??:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°1743957
kiki29
Posté le 10-06-2008 à 09:15:34  profilanswer
 

Salut, c'est vrai je sous-entendais TextBox1.Text=Format (TextBox1.Text, "##,##0.00" )

Message cité 1 fois
Message édité par kiki29 le 10-06-2008 à 09:15:59
n°1743967
scaryfan
Apple Inside
Posté le 10-06-2008 à 09:27:54  profilanswer
 

kiki29 a écrit :

Salut, c'est vrai je sous-entendais TextBox1.Text=Format (TextBox1.Text, "##,##0.00" )


 
Salut kiki29 !
Ca marche nickel...  :bounce:  
Une dernière question !  :p  
Le code que tu m'as donné pour interdire la saisie alpha, je dois le dupliquer par autant de TextBox contenues dans ma Form ?
Il n'y a pas moyen de mettre 'Private Sub R001, R002, R003, R004..._KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)'
ou un truc du genre ? parce que j'ai 57 Textbox dans ma Form...  :whistle:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°1743972
kiki29
Posté le 10-06-2008 à 09:40:45  profilanswer
 

Si il faudrait passer par un module de classe car le VBA Excel ne possède pas comme VB6 la possibilté de créer un groupe de controles
Je crois avoir vu qqch de ce genre sur un autre forum, je le recherche pour le moment

mood
Publicité
Posté le 10-06-2008 à 09:40:45  profilanswer
 

n°1744061
scaryfan
Apple Inside
Posté le 10-06-2008 à 11:18:17  profilanswer
 

kiki29 a écrit :

Si il faudrait passer par un module de classe car le VBA Excel ne possède pas comme VB6 la possibilté de créer un groupe de controles
Je crois avoir vu qqch de ce genre sur un autre forum, je le recherche pour le moment


 
Merci pour ton aide kiki29 !!!  :hello:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°1744080
kiki29
Posté le 10-06-2008 à 11:36:05  profilanswer
 

Je n'ai pas retrouvé le post en question et ai "bricolé" qqch à améliorer
( pb de temps pour le moment )
 
Placer dans un module de classe que l'on baptisera par exemple clsTBox


Option Explicit
 
Public WithEvents GroupeTxtB As MSForms.TextBox
 
Const entrees_decimales_permises = ".,0123456789" & vbCr & vbBack
Const Point = "."
Const Virgule = ","
 
Private Sub GroupeTxtB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 
    If KeyAscii = Asc(Point) Then
        If InStr(GroupeTxtB.Text, Virgule) = 0 Then
            KeyAscii = Asc(Virgule)
        Else
            KeyAscii = 0
        End If
    ElseIf InStr(entrees_decimales_permises, Chr(KeyAscii)) = 0 Then
        KeyAscii = 0
    ElseIf InStr(GroupeTxtB.Text, Virgule) > 0 And KeyAscii = Asc(Virgule) Then
        KeyAscii = 0
    End If
     
    If KeyAscii = 13 Then SendKeys "{TAB}": KeyAscii = 0
End Sub


 
Placer dans une UserForm


Option Explicit
Dim TB() As New clsTBox
 
Private Sub UserForm_Initialize()
Dim TxtB As MSForms.TextBox
Dim i As Integer, iLeft As Integer, iTop As Integer
 
    iLeft = 10: iTop = 10
    For i = 1 To 5
        Set TxtB = Me.Controls.Add("Forms.Textbox.1", , True)
        With TxtB
            .Width = 150
            .Height = 25
            .Left = iLeft
            .Top = iTop
        End With
 
        iTop = iTop + 25
         
        ReDim Preserve TB(1 To i)
        Set TB(i).GroupeTxtB = TxtB
    Next i
End Sub


 
PS Evite de recopier le code dans ta réponse, cela encombre le paysage pour rien


Message édité par kiki29 le 10-06-2008 à 11:39:59

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Dans une TextBox, saisie uniquement numérique...

 

Sujets relatifs
Liaison choix dans combobox et texte dans textboxRécuperer une variable dans Textbox d'un formview
vba verification de données saisie dans excel[C#.NET][pas si resolu] Colorer un ou plusieurs mots dans une textbox
Souci avec javascript sur controles de saisie[Java/Jsp] Changer valeur d'une zone de saisie ?
masque de saisie js avec boucle phpCréer un cadre de saisie avec SDL ou autre ?
retourner un message dans le cas d'une saisie doubleComment afficher les résultats uniquement du membre connecté?
Plus de sujets relatifs à : Dans une TextBox, saisie uniquement numérique...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR