IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Appel procédure générique [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 224
    Points : 544
    Points
    544
    Par défaut Appel procédure générique
    Bonjour,

    Dans un form j'ai +- 20 boutons bascules pour appeler des forms ou des états.
    Certains boutons affichent un messages avec 3 choix.
    J'aimerais quand je tape Enter qu'il appelle la procédure du bouton bascule activé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
       On Error GoTo Form_KeyDown_Error
     
    If KeyCode = 13 Then
        Dim Bouton_Procedure As String
        Bouton_Procedure = Me.ActiveControl.Name & "_Click"
        Call Bouton_Procedure
    End If
    End Sub
    Donc, ici il y a une erreur car la variable Bouton_Procedure n'est pas une procédure.

    Comment faire?

    J'essaye avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CallByName  Me, Bouton_Procedure, VbMethod
    Mais ça renvoie une erreur 2465

    Je pourrais écrire 20 fois le code pour chaque boutons, mais ça serait plus facile avec ça.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Si la procédure ou fonction que tu veux appeler est publique, alors tu peux te servir de la fonction Eval() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function Test()
    MsgBox "Hello world"
    End Function
    Et dans la fenêtre d'exécution :

    Afficher bien :

    "Hello world"

    Si c'est une procédure alors essaie :

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 224
    Points : 544
    Points
    544
    Par défaut
    Salut,

    C avec une procédure, le code ne marche pas, erreur 2517, ça me dit que ca ne peut pas trouver la procédure

    Merci pour ton aide

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Oui, malheureusement, il faut que la procédure appelée dans Run soit publique

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Si la solution avec "run" ne marche pas il te reste la méthode brutale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select case Me.ActiveControl.Name 
        case me.TonBouton01.Name
           call TonBouton01_CLick
       case else
           'Ne rien faire
    end select
    Ce n'est pas élégant ni très souple car il faut penser à modifier le code si on ajoute ou retranche un bouton mais cela va marcher.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 224
    Points : 544
    Points
    544
    Par défaut
    Salut,

    Merci, mais c'est justement pour éviter tout cela que je voulais passer par une variable.

    A+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 224
    Points : 544
    Points
    544
    Par défaut
    Bonjour à tous et Bonne fête Nationale à tous les Belges,

    Bon, après qq essais j'ai réussi à appeler la procédure de la façon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CallByName Forms("F_Editions"), Bouton_Procedure, VbMethod
    Déclarer la procédure en Public

    Le problème : ça marche une fois car la deuxième fois, le bouton actif n'est plus le bouton bascule que j'ai cliqué
    Je pense que lorsque je fais Enter, c'est le bouton suivant qui devient actif, mais c'est bien le bouton bascule que j'ai cliqué qui reste cliqué.

    C'est peut-être pas trop clair, si!

    Donc, comment savoir en vba quel bouton bascule est toujours 'Basculé' ?

    Merci

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Merci pour CallByName() je ne connaissais pas.

    Pour ta question à propos du bouton qui est basculé.
    Cela ne déclenche pas d'événement sur le bouton lui-même (ou sur son groupe) ?
    J'ai du mal à comprendre pourquoi tu dois intercepter le clavier.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 224
    Points : 544
    Points
    544
    Par défaut
    Quand je clic sur certain bouton bascule, bascule car je met le bouton en couleur pour voir celui qui est actif, j'ai un choix pour un tri à l'ouverture de l'Etat.
    Quand je ferme l'Etat, je reviens dans le menu et comme le bouton est en couleur je vois sur lequel je viens de cliquer, et je peux avec l’appui sur Enter réouvrir le choix pour un tri d'Etat différent.

    Je c pas si c clair ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 224
    Points : 544
    Points
    544
    Par défaut
    Voici le code

    au début du form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Bouton_Bascule_Actif As String
    Public Bouton_Procedure As String
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
       On Error GoTo Form_KeyDown_Error
     
        'Appuis touche Enter pour nre pas recliquer quand un bouton est déja actif
        If KeyCode = 13 Then 'Touche Enter
            Bouton_Procedure = Bouton_Bascule_Actif & "_Click"  'Donne à la variable le nom du bouton actif
            CallByName Forms("F_Editions"), Bouton_Procedure, VbMethod 'Va à la procédure
        End If
     
        Select Case KeyCode
            '**********************************************************************
            'Touche F2,F4 et F10 - Autorisées
            '**********************************************************************
             Case vbKeyF2, vbKeyF4 And Shift = 0, vbKeyF10
                Exit Sub
     
            Case vbKeyF1 To vbKeyF16 And Shift >= 0
                'On annule l'effet normal de la touche
                'sinon, on peut utiliser les autres touches de fonction
                KeyCode = 0
                Shift = 0
                Exit Sub
        End Select
     
        Exit Sub
     
       On Error GoTo 0
        KeyCode = 0
        Shift = 0
       Exit Sub
     
    Form_KeyDown_Error:
     
        MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Form_KeyDown of Document VBA Form_F_Général"
    End Sub
    Procédure

    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
    17
    18
    Public Sub CmdBascule_ArmoireDosA_Click()
        On Error GoTo Err_CmdBascule_ArmoireDosA_Click
     
        Dim stDocName As String
        Dim message, Title, Default, MyValue
        Dim GStrWhere As String
     
        Me.CmdBascule_ArmoireDosA.Value = -1
        Bouton_Bascule_Actif = "CmdBascule_ArmoireDosA"
     
        Call Réinit_Bouton_Bascule 'Va à la procédure de réinitialisation des Boutons Bascules
        Me.CmdBascule_ArmoireDosA.Tag = "Actif" 'Donne Actif en remarque au bouton cliqué
     
        stDocName = "E_ArmoireDosA"
     
    ...Code
     
    End sub
    Procédure de réinitialisation Bouton Bascule
    Cette procédure à pour effet de remttre le bouton à son état initial (non activé)
    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
     
    Private Sub Réinit_Bouton_Bascule()
        Dim ctl As control
        Dim Bouton_Bascule As String
     
        For Each ctl In Forms.F_Editions 'Fait le tour des boutons Bascules
            If ctl.Tag = "Actif" And Bouton_Bascule_Actif <> ctl.Name Then 'Si il y a Actif en remarque et que le Bouton actif est <> que le bouton activé alors on met value à 0 pour le désélectionner
                Bouton_Bascule = ctl.Name
                ctl.Value = 0
                ctl.Tag = ""
                Exit Sub
            End If
        Next ctl
     
    End Sub
    Voilà, si ça peut aider d'autre

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/04/2006, 13h04
  2. Réponses: 2
    Dernier message: 20/03/2006, 09h39
  3. Appeler procédure d'un autre formulaire
    Par tonysky dans le forum Access
    Réponses: 7
    Dernier message: 30/01/2006, 14h37
  4. Appeler Procédure stockée depuis ACCESS
    Par Sunny dans le forum Access
    Réponses: 2
    Dernier message: 13/09/2005, 22h07
  5. [PL/SQL] Appel procédure stockée dans trigger
    Par Félia dans le forum Oracle
    Réponses: 3
    Dernier message: 24/01/2005, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo