Bonsoir à tous,
Afin de m'éviter de fastidieuses recopies de code, et surtout afin d'éviter un éventuel oubli, je souhaite lancer une procédure au chargement de chaque formulaire.
Celle-ci a pour objectif de créer la procédure "OnKeyPress" de chacun de mes zones de textes numériques (sans source liée) afin d'y limiter la saisie.
Voici les codes utilisés :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub Form_Load() testnumerique (Me.Name) End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Public Sub testnumerique(FrmName As String) Dim ctl As Control For Each ctl In Forms(FrmName).Controls If Left(ctl.Name, 3) = "nxn" Then 'variante 1 : ctl.OnKeyPress = ctl.Name & "_KeyPress(KeyAscii As Integer)" & Chr(10) & "KeyAscii=verifnumerique(KeyAscii)" & Chr(10) & "End Sub" 'variante 2 : ctl.OnKeyPress = "KeyAscii=verifnumerique(KeyAscii)" 'variante 3 : verifnumerique(KeyAscii) End If Next ctl End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Public Function verifnumerique(i As Integer) As Integer If InStr("0123456789,.", Chr(i)) > 0 Or i = 8 Then verifnumerique = i Exit Function Else 'a revoir, ne renvoit pas la virgule malgré tests msgbox If i = 46 Then verifnumerique = 44 Exit Function Else verifnumerique = 0 End If End If End Function
La source du problème est la procédure "testnumerique" ; En essayant d'écrire dans la textbox, j'obtiens l'un des message suivant :
Variante 1 :Access ne peut pas trouver l'objet
Variante 2 : Idem ! (sans surprise...)
Variante 3 : L'objet ne contient pas d'objet automation "KeyAscii"
Je me demandais donc s'il était possible "d'écrire" le code au chargement du formulaire, plutôt que d'affecter une valeur à l'événement ?
Est-il possible de récupérer le KeyAscii d'une autre manière afin de ne pas y faire référence, ce qu'Access ne semble pas supporter, bien que son utilisation ai lieu juste après un KeyPress...
En vous remerciant d'avance,
Wulfram
Partager