[VBA] conserver la valeur d'un textbox avant modification

pilote301152

XLDnaute Occasionnel
Bonjour à tous,

Pour éviter la saisie de caractère non numérique (et notamment le - ou _) j'utilise une procédure évènement mais ne sais revenir à la valeur antérieure. Comment puis-je conserver celle-ci dans une variable?
Aucune des procédures évènements (beforeupdate, keypress ...) ne permet d'obtenir la valeur précédente!
J'ajouterais que j'ai surtout besoin de procéder ainsi pour identifier la saisie de caractère non numérique à l'intérieur d'une donnée numérique (ex: si 1 243,56 était la donnée antérieure, l'utilisateur a ajouté - pour obtenir un chiffre non valide tel que 1 24-3,56)

Merci de votre aide et bon dimanche
 

gilbert_RGI

XLDnaute Barbatruc
Re : [VBA] conserver la valeur d'un textbox avant modification

Bonjour

si la saisie est dans un textbox par exemple

Code:
Private Sub TextBox1_Change()
On Error Resume Next
    Select Case Asc(Right(TextBox1.Value, 1))
    Case 48 To 57
     Exit Sub
    Case Else
    MsgBox "erreur de saisie : " & Right(TextBox1.Value, 1)
    lg = Len(TextBox1.Value)
    TextBox1.Value = Left(TextBox1.Value, lg - 1)
    End Select
End Sub

48 à 57 sont les "caractères ansi" de 0 à 9
possibilité de mettre 65 To 90, 97 To 122

pour A à Z et a à z

:D
 
G

Guest

Guest
Re : [VBA] conserver la valeur d'un textbox avant modification

Bonjour,

Essaie ceci:
1- pour conserver la valeur du textbox à l'entrée de celul-ci
Code:
[COLOR=blue]Private[/COLOR] [COLOR=blue]Sub[/COLOR] TextBox1_Enter()
    TextBox1.Tag = TextBox1.Value
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]

2- pour contrôler la saisie utilisateur:
Code:
[COLOR=blue]Private[/COLOR] [COLOR=blue]Sub[/COLOR] TextBox1_KeyPress([COLOR=blue]ByVal[/COLOR] KeyAscii [COLOR=blue]As[/COLOR] MSForms.ReturnInteger)
        [COLOR=blue]Select[/COLOR] [COLOR=blue]Case[/COLOR] KeyAscii
            [COLOR=blue]Case[/COLOR] 32, 48 To 57 [COLOR=green]' espace  et Chiffres,:[COLOR=blue]on[/COLOR] ne fait rien[/COLOR]
            [COLOR=blue]Case[/COLOR] 46: KeyAscii = 44 [COLOR=green]'remplacer le point par la virgule[/COLOR]
            [COLOR=blue]Case[/COLOR] 43, 45
                [COLOR=green]' si le + ou l - n'est pas entré en première postion (0)annuler la touche[/COLOR]
                [COLOR=blue]If[/COLOR] TextBox1.SelStart > 0 [COLOR=blue]Then[/COLOR] KeyAscii = 0
 
            [COLOR=blue]Case[/COLOR] [COLOR=blue]Else[/COLOR]: KeyAscii = 0 [COLOR=green]'annuler la touche[/COLOR]
        [COLOR=blue]End[/COLOR] [COLOR=blue]Select[/COLOR]
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]

Bonne journée
 

youky(BJ)

XLDnaute Barbatruc
Re : [VBA] conserver la valeur d'un textbox avant modification

Salut pilote,
Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
*If InStr("0123456789,", Chr(KeyAscii)) = 0 Then KeyAscii=0
End Sub
et au moment de valider pour changer le point en virgule
Code:
TextBox1.Value=Replace(TextBox1, ".", ",")
Ou encore mieux
Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 Select Case KeyAscii
    Case 46                 'Change le point en virgule
        KeyAscii = 44
    Case 44, 48 To 57       'Autorise les touches 0 à 9
    Case Else
        KeyAscii = 0
    End Select
End Sub

Bruno
 

pilote301152

XLDnaute Occasionnel
Re : [VBA] conserver la valeur d'un textbox avant modification

Merci à vous pour toutes ces réponses.
Gilbert: mon pb persiste si l'entrée se fait au milieu du chiffre déjà saisi
Hasco et Bruno: vos deux suggestions sont exactes et répondent parfaitement à mon pb.
En tout cas je vous remercie tous car avec chacune de vos réponses j'ai finalement appris qq chose .... et trouvé MA réponse.

Bonne fin de WE à vous.:)
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87