Re jopont,
A quoi correspond byval, et cancel ?
Contrairement à la fontion personnalisée AutoriseFrappe() créée entièrement, l'évènement txtHeure_Exit() est, comme je te le précisais plus haut, une procédure '
standard' prédéterminée et liée au contrôle TextBox. Cette procédure comprend un argument '
Cancel', lui aussi prédéterminé (valeur False par défaut). L'intérêt de cet argument pointant sur l'objet lui-même, c'est qu'il permet d'annuler l'effet de l'évènement correspondant si tu lui affectes la valeur True.
Autrement dit, lorsque ton TextBox est sur le point de perdre le focus et avant même que ce focus ne passe au contrôle suivant, l'évènement Exit() entre en jeu. Le code de cette procédure est donc exécuté. Si dans ce code, tu donnes la valeur VRAI à cet argument 'Cancel' (en faisant : Cancel = True), alors tu annules l'effet de l'évènement et le TextBox ne perdra pas le focus. Tu retrouveras ce 'Cancel' souvent dans les procédures évènementielles (par exemple dans l'évènement DblClick() des TextBox ou des CommandButton).
En ce qui concerne l'expression '
ByVal', bien que pour les procédures évènementielles la signification soit un peu différente (s'agissant en fait d'un pointeur sur l'objet), il faut savoir que les arguments peuvent être passés à une procédure par valeur (
ByVal) ou par référence (
ByRef). Par défaut (sans précision
By...), un argument est passé à une procédure par référence. Si on souhaite passer l'argument par valeur, il faut le préciser de façon explicite en mettant
ByVal devant.
Oui, mais c'est quoi la différence ?
Lorsqu'on passe un argument
ByVal,la variable d'origine est copiée dans la procédure. Les modifications apportées ensuite à l'argument au sein de la procédure ne sont pas répercutées sur la variable d'origine. Tu en déduiras donc facilement la différence avec
ByRef qui, à contrario, répercutera les modifications de l'argument sur la variable d'origine.
Je te conseille de lire l'aide VBA sur ce sujet en faisant une recherche sur l'expression 'argument'...
Public Function AutoriseFrappe(ByVal K As Integer) As Integer
je comprend pas la fonction, pourquoi 48 et 57...?
Les valeurs 48 à 57 correspondent aux codes ANSI des caractères numériques ('0' = 48, '1' = 49, '2' = 50, etc... jusqu'à '9' = 57).
Je te conseille là aussi une recherche dans l'aide VBA avec l'expression 'Jeu de caractères' pour avoir la correspondance des codes caractères utilisables sous Windows.
Dans l'évènement KeyPress() du TextBox, l'argument 'KeyAscii' contient le code caractère qui vient d'être frappé par l'utilisateur. Je passe ensuite ce code à la Function AutoriseFrappe() qui va contrôler si ce caractère est donc autorisé ou non. Dans la négative, il retourne un code caractère '0' qui annule donc la frappe de l'utilisateur.
J'espère que ces quelques explications auront pu t'éclairer un peu...
Cordialement,