Format de saisie dans un textbox

blord

XLDnaute Impliqué
Bonjour à tous,

J'aimerais savoir s'il est possible de forcer la saisie dans un textbox selon les critères suivants :

  • que des chiffres
  • un seul symbole décimal
  • obligatoirement deux chiffres après le séparateur décimal et pas plus
  • seules les valeurs 00 - 25 - 50 - 75 seraient permises après le symbole décimal

En fait, le textbox servira à saisir des heures de travail.... donc 1.25 pour 1H15 de travail etc...

J'utilise déjà ces codes pour certaines validtions (merci au forum...) mais je bloque pour l'adpater à mes boins spécifiques...

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub


ou

Option Explicit

Const entrees_decimales_permises = ".,0123456789" & vbCr & vbBack
Const entrees_entieres_permises = "0123456789" & vbCr & vbBack
Const Point = "."
Const Virgule = ","

Puis, pour chaque champ à vailder :

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Empêche la saisie autre que du numérique ainsi que plus qu'un séparateur décimal
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


Merci à tous pour votre précieuses aide !
 

jp14

XLDnaute Barbatruc
Re : Format de saisie dans un textbox

Bonjour

Ci dessous une macro à tester

Code:
Option Explicit
Dim valeur1 As String
Dim virgule As Byte
Private Sub TextBox1_Change()
Dim val1 As String
val1 = Right(TextBox1.Value, 1)

If virgule = 3 Then
    TextBox1.Value = valeur1
End If

If virgule = 2 Then
    Select Case val1
        Case "5", "0"
        virgule = 3
        Case Else
        TextBox1.Value = valeur1
        Exit Sub
    End Select
    valeur1 = TextBox1.Value
End If


If virgule = 1 Then
    Select Case val1
        Case "2", "5", "7", "0"
        virgule = 2
        Case Else
        TextBox1.Value = valeur1
        Exit Sub
    End Select
    valeur1 = TextBox1.Value
End If

If virgule = 0 Then
    Select Case val1
        Case "."
            virgule = 1
        Case ","
            virgule = 1
        Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"
        Case Else
        TextBox1.Value = valeur1
        Exit Sub
    End Select
    valeur1 = TextBox1.Value
End If



End Sub

JP
 

blord

XLDnaute Impliqué
Re : Format de saisie dans un textbox

Bonjour JP,

Je viens de tester ton code, deux petits problèmes :

1- On ne peut pas utiliser la touche "backspace" pour modifier la saisie
2- On ne peut sélectionner tout le contenu du textbox avec la souris et l'effacer...

Merci pour tes efforts !

Blord
 

jp14

XLDnaute Barbatruc
Re : Format de saisie dans un textbox

Bonsoir

Ci joint un fichier avec la gestion du retour arrière.

A tester

JP
 

Pièces jointes

  • saisie.zip
    12.3 KB · Affichages: 54
  • saisie.zip
    12.3 KB · Affichages: 54
  • saisie.zip
    12.3 KB · Affichages: 55

jp14

XLDnaute Barbatruc
Re : Format de saisie dans un textbox

Bonjour

Code à rajouter pour
"On ne peut sélectionner tout le contenu du textbox avec la souris et l'effacer..."
Code:
Dim pos1 As Integer ' ligne existante

If Len(TextBox1.Value) = 0 Then
    virgule = 0
    valeur1 = TextBox1.Value
    Label1.Caption = virgule ' ligne pour faciliter le contrôle de la procédure a supprimer en fin des tests

    Exit Sub
End If

If Len(TextBox1.Value) < long1 Then ' ligne existante

A tester


JP
 

Discussions similaires

Réponses
20
Affichages
1 K
Réponses
15
Affichages
480

Statistiques des forums

Discussions
312 078
Messages
2 085 112
Membres
102 783
dernier inscrit
Basoje