Saisie textbox par Keypress

Bonsoir

le but recherché étant de ne saisir que des chiffres,......

lorsque je lance cette procédure ;

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

End Sub

l'inscription de tous les caractères saisis au clavier ne se fera dans la cellule C5 que si une touche supplémentaire ( barre d'espace) est appuyée....logique, compte tenu de l'action de Keypress...

le nombre de chiffres saisis étant limité par "Maxlenght" dans les propriétés, n'y a t-il pas un moyen de réaliser cet affichage au fur et à mesure de la saisie pour éviter cette pression et ainsi, en 3 touches seulement, le nombre 456 serait dans la touche C5 ?

merci

Bonjour,

Est-ce que ceci peut convenir : [c5] = TextBox2.Value & Chr(KeyAscii)

ric

Bonsoir,

Tu utilises une méthode sophistiquée...

Je me contenterais de tester sur l'évènement Change (donc à chaque frappe) si la valeur est numérique, sinon effacement, et affectation sur AfterUpdate.

Mais KeyPress te garantissant la saisie de chiffres ne pouvant former qu'un entier. Tu peux fort bien le conserver mais basculer l'affectation sur AfterUpdate.

Cordialement.

merci pour la réponse..

...ça le fait... mais bizarrement si je saisie 1,2,3,4, dans la txtbx, j'ai effectivement 123 mais C5 a récupéré 1234...comment donc limiter la saisie à 3 chiffres uniquement puisque Maxlenght n'est valable que pour la box...?

Pas avec AfterUpdate ! Et pas si tu n'affectes que le contenu de la Textbox !

..bjr

...oui, mais je veux que cette saisie s'inscrive sur une feuille de calcul...

avec "change" et avec "AfterUpdate", chr(keyascii) n'est pas reconnu...

...faut que je trouve un autre moyen pour limiter cette saisie aux seuls chiffres et limité à la centaine..

Je crois que tu ne comprends pas !

Tu utilises KeyPress et AfterUpdate !

La dimension maximale de la saisie est fixée dans les propriétés de la TextBox (qui n'accueillera pas un caractère de plus).

KeyPress contrôle la saisie : uniquement chiffres (et tu ne lui fais pas faire autre chose).

AfterUpdate, qui intervient à la validation (appui sur touche Entrée ou déplacement du focus sur un autre contrôle), assure l'affectation du contenu de la TextBox à la cellule !

Et si tu avais d'autres vérifications à réaliser avant d'affecter, tu remplaces AfterUpdate par BeforeUpdate qui te permet après vérification de conformité d'annuler la validation (par le paramètre Cancel), en empêchant la sortie du contrôle tant que cela ne correspond pas aux conditions voulues...

Cordialement.

...merci de forcer ma réflexion..

après de multiples relectures de ta réponse pour m'imprégner, je crois que je commence à comprendre...

Les événements Keypress et AfterUpdate ont chacun une fonction particulière que je n'entrevoyais pas ainsi, d'où le mélange...

Mon bouquin (Excel VBA 2003 ) les décrit en ne donnant qu'un seul exemple avec BeforeUpdate en disant que l'on ne les utilisera que très rarement, voire jamais..

je vais donc continuer mes explorations.

cordialement

Bonjour,

Testé sous Excel 2016 :

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Sheets("essai").Select

TextBox2.MaxLength = 3
If Len(TextBox2) < 3 Then
    If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    [c5] = TextBox2.Value & Chr(KeyAscii)
End If
End Sub

ric

A l'intérieur d'un Userform, ton code repose essentiellement sur les évènements des contrôles. Il est utile d'en avoir une vue d'ensemble, de savoir ce qui les produit et dans quel ordre. Aussi ceux qui te fournissent en arguments des éléments de contrôle ou d'action en rapport avec les objectifs visés.

Après selon les cas et ce qui est à faire, certains peuvent être interchangeables.

Bonne continuation.

Bonjour

et comme ca

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(TextBox2) = 3 Then KeyAscii = 0: Exit Sub
    If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    Sheets("essai").[C5] = TextBox2.Value & Chr(KeyAscii)
End Sub

A+

Maurice

bonsoir

Les solutions de ric et de archer répondent parfaitement à ma demande....et en plus, elles sont simples.....

j'avais bien pensé à len(textbox2) mais ne savais pas trop comment l'appliquer.... encore beaucoup à apprendre

merci à tous

Rechercher des sujets similaires à "saisie textbox keypress"