ACCESS : Code sur tous les champs d'un form

Résolu
talrashha Messages postés 7 Date d'inscription   Statut Membre -  
talrashha Messages postés 7 Date d'inscription   Statut Membre -
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
Configuration: Windows XP
Internet Explorer 7.0

7 réponses

  1. blux Messages postés 2049 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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
  2. talrashha Messages postés 7 Date d'inscription   Statut Membre
     
    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
  3. Jean_Jacques Messages postés 1045 Date d'inscription   Statut Membre Dernière intervention   112
     
    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
  4. talrashha Messages postés 7 Date d'inscription   Statut Membre
     
    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
    1. blux Messages postés 2049 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Jean_Jacques Messages postés 1045 Date d'inscription   Statut Membre Dernière intervention   112
     
    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
  7. talrashha Messages postés 7 Date d'inscription   Statut Membre
     
    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
    1. blux Messages postés 2049 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      j'ai une piste sérieuse...
      -1
      1. blux Messages postés 2049 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > blux Messages postés 2049 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
  8. talrashha Messages postés 7 Date d'inscription   Statut Membre
     
    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