ACCESS : Code sur tous les champs d'un form

Résolu/Fermé
talrashha Messages postés 7 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 27 août 2008 - 25 juil. 2008 à 10:17
talrashha Messages postés 7 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 27 août 2008 - 29 juil. 2008 à 13:46
Bonjour,

Je voulais savoir s'il était possible d'appliquer un code à tous les champs d'un formulaire dans Access 2003. En fait je suis en train de faire un formulaire de recherche, et lorsque j'appuie sur le bouton "rechercher", il traite la demande. Jusque là tout va bien... mais je voudrais en plus que si l'on appuie (de n'importe où) sur la touche "Entrée", la recherche soit effectuée.
J'ai fait un code valable pour tous les champs, mais maintenant, il faut que je passe derrière chacun pour copier-coller ce morceau de code sur l'evenement "Sur touche appuyée".
N'y a t-il pas un moyen de le faire automatiquement?

Merci d'avance

7 réponses

blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024 3 287
25 juil. 2008 à 10:25
Salut,

il faut que tu fasses de ton code une fonction, que tu appeleras dans chaque champ, comme ça, tu n'as qu'une seule fois ton code de recherche et la fonction est appelée partout de la même manière.

De plus, l'évènement 'sur touche appuyée', n'est pas spécifique à la touche 'entrée', mais se produit dès qu'une touche est apppuyée, ça peut te valoir des désagréments futurs...
-1
talrashha Messages postés 7 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 27 août 2008
25 juil. 2008 à 10:58
Salut,

En fait, le code est très simple :
Private sub recherche()
If KeyCode = vbKeyReturn Then
Commande0.SetFocus
Commande0_Click
End If
End sub

En gros, j'appelle juste ce qui est executé lors du clique sur mon bouton. Le truc, c'est que mon formulaire de recherche est composé d'environ 90 champs, et ce que je cherche, c'est une solution pour ne pas appeler ce code derrière chacun de mes champs, je cherche un truc du genre :
For i = 0 to me.[nb_champ]
me![champ_i].OnKeyPressed = recherche
Next

Merci
-1
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
25 juil. 2008 à 12:13
Bonjour,

Il me semble que cette syntaxe, une fois adaptée, comblera votre besoin.

Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[NUM_CLIENT] = " & Str(Me![NOM_A_CHERCHER])
Me.Bookmark = rs.Bookmark

Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
-1
talrashha Messages postés 7 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 27 août 2008
25 juil. 2008 à 16:32
Bonjour,

Je n'ai pas vraiment saisie le rapport. Je ne travaille actuellement pas sur une requête, je veut seulement executer un code VB sur un evenement bien déterminé (OnKeyDown) de chaque champ de ma page. Rien à voir avec ma base de donnée.
Je n'ai pas de très grandes connaissances en VBA, mais si je devais le faire en C, je créerais un pointeur void* sur une fonction, mais je ne sais pas s'il on peut faire une telle chose avec Access...
-1
blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024 3 287
25 juil. 2008 à 16:45
je te rejoins, je crois que jean-jacques n'a pas saisi le fond du problème :

mettre à jour par programmation le contenu de l'évènement 'sur click' de plusieurs contrôles d'un form...

je ne sais pas si c'est possible, j'ai cherché dans l'aide (merdique), mais rien trouvé.

peut-être qu'une question chez nos amis de developpez.net ?
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
25 juil. 2008 à 18:03
Bonsoir,

Dont acte, je me suis pris les pieds dans le tapis ....

Je verrais bien une fonction, comme le préconise Blux, mais ... je sèche ...
Je continue à chercher ...

A+
-1
talrashha Messages postés 7 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 27 août 2008
28 juil. 2008 à 10:06
Bonjour,

Bon, et bien, je n'ai rien trouvé et je ne pense pas que cela soit possible, je vais prendre 1h pour faire tous mes copier-coller, et le problème sera réglé. Mais ce serait une fonctionnalité interessante tout de même.

Merci à tous
-1
blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024 3 287
28 juil. 2008 à 11:26
j'ai une piste sérieuse...
-1
blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024 3 287 > blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024
28 juil. 2008 à 13:01
ayèèè !!!

Voilà du code à coller sur un bouton du formulaire dans lequel sont les contrôles qu'on veut mettre à jour, c'est pour l'évènement 'surclic', mais ça se modifie aisément :
Private Sub Commande0_Click()
Dim ctl As Control
Dim mdl As Module
Dim Ret As Integer
Dim Nom As String
' Parcours des contrôles du formulaire courant
For Each ctl In Me.Controls
    'MsgBox ctl.Properties("Name")
    ' Si le contrôle m'intéresse
    If ctl.Properties("Name") = "bout1" Then
        Nom = ctl.Properties("Name").Value
        ' Recherche s'il n'y a pas déjà du code à l'évènement onclick
        If Controls(Nom).OnClick = "" Then
            Set mdl = Me.Module
            ' On crée la proc 'surclic'
            Ret = mdl.CreateEventProc("Click", Nom)
            ' On insère le code
            mdl.InsertLines Ret + 1, vbTab & "' ceci est une procédure" & vbCrLf & vbTab & "MsgBox ""coucou"""
            ' On met la propriété 'surclic' à 'procédure évènementielle
            Me.Controls(Nom).OnClick = "[Event Procedure]"
        End If
    End If
Next ctl
End Sub
Ca devrait répondre à ton souci (s'il n'est pas déjà réglé !)
-1
talrashha Messages postés 7 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 27 août 2008
29 juil. 2008 à 13:46
Oula, magnifique solution, c'est complexe, mais cela permet de répondre à pas mal de besoin. Bien joué. Je viens de tomber sur un autre solution, qui est plus simple mais plus spécifique à ce que je cherchais :

Voir https://access.developpez.com/faq/?page=IHM#EvnmtClavier

En fait, dans les formulaire l'attribut "Aperçu des touches" permet de faire remonter les évenements concernant les touche jusqu'au formulaire, et ainsi, une procédure uniquement sur le formulaire suffit.

Par contre, ta solution offre la possibilité de créer dynamiquement des fonctions, ce qui peut être très puissant :)

Merci pour ces recherches, et à bientôt.
-1