USF: Textbox numerique KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) : MARCHE PAS

iStarOSX

XLDnaute Junior
Bonjour à tous,

Voila je me casse la tête sur mon problème de TextBox dans un USF au format numérique qui renseigne des cellules d'une feuille.

Voici le code que :
Code:
Option Explicit
 
Const entrees_decimales_permises = ".,0123456789" & vbCr & vbBack
Const entrees_entieres_permises = "0123456789" & vbCr & vbBack
Const Point = "."
Const Virgule = ","
Code:
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = Asc(Point) Then
        If InStr(TextBox2, Virgule) = 0 Then
            KeyAscii = Asc(Virgule) & KeyAscii = 32
        Else
            KeyAscii = 0
        End If
    ElseIf InStr(entrees_decimales_permises, Chr(KeyAscii)) = 0 Then
        KeyAscii = 0 & KeyAscii = 32
    ElseIf InStr(TextBox2, Virgule) > 0 And KeyAscii = Asc(Virgule) Then
        KeyAscii = 0 & KeyAscii = 32
    End If
     
    If KeyAscii = 13 Then SendKeys "{TAB}": KeyAscii = 0
    
    If ComboBox9.Value = "l/s & bar" Or ComboBox9.Value = "l/s & kPa" Then
Sheets("Unité").Range("B1").Value = TextBox2.Text
Sheets("Unité").Range("B2").Value = Sheets("Unité").Range("B1").Value / 1000 * 3600
End If
If ComboBox9.Value = "m3/h & bar" Or ComboBox9.Value = "m3/h & kPa" Then
Sheets("Unité").Range("B2").Value = TextBox2.Text
Sheets("Unité").Range("B1").Value = Sheets("Unité").Range("B2").Value * 1000 / 3600
End If

End Sub

Ce code fonctionne "presque" bien, sauf que pour que soit pris en compte la dernière touche tapée dans le TextBox et avoir toute la valeur saisie dans la cellule de ma feuille, je suis obligé de taper une touche comme "espace". Sans cela le dernier chiffre saisi n'est pas pris en compte.

Exemple : si je tape "40", dans ma cellule la valeur sera "4" si je n’appuie pas sur une touche supplémentaire.

Malgré toutes mes recherches je ne trouve pas de solution.

Si quelqu’un pouvait m'aider, je l'en remercie d'avance.

PS : Je ne peux pas utiliser "Private Sub TextBox2_Change()" car j'ai un combobox qui peut faire changer la valeur du TextBox.
 

mécano41

XLDnaute Accro
Re : USF: Textbox numerique KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) : MARCH

Bonjour à tous,

Je viens d'avoir le même problème (mais c'était dans un module de classe) et je l'ai résolu, avec l'aide d'autres intervenants, de la manière indiquée dans le fichier joint.

- le _Keypress traite les touches autorisées et le changement point en virgule
- le _Change traite le reste

Regarde si cela correspond à ce que tu veux obtenir.

EDIT : je n'avais pas vu "PS : Je ne peux pas utiliser "Private Sub TextBox2_Change()" car j'ai un combobox qui peut faire changer la valeur du TextBox. ". Pourrais-tu expliquer les conditions souhaitées?


Cordialement
 

Pièces jointes

  • Essai IstarOSx .xlsm
    29.8 KB · Affichages: 69
Dernière édition:

iStarOSX

XLDnaute Junior
Re : USF: Textbox numerique KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) : MARCH

Bonjour Pierrot93 et mécano41

merci pour votre aide.

J'ai utilisé la solution de Pierrot93, "Afterupdate" car je ne pouvais pas utiliser "Change" car j'ai un combobox qui agit également sur les cellules de données et du coup mon textBox change !!!


merci pour le coup de mains et a bientôt.
 

Discussions similaires

Réponses
20
Affichages
2 K

Statistiques des forums

Discussions
314 651
Messages
2 111 549
Membres
111 199
dernier inscrit
mavoungou regis