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

Access Discussion :

Lancer procedure dynamiquement.


Sujet :

Access

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut Lancer procedure dynamiquement.
    Bonjour tout le monde,

    Apres avoir cherché dans la FAQ et sur le forum, je me décide enfin à poster la question que voici:

    Mon application contient une 20aine de modules
    Dans chaque module, il y a une procedure Stat()

    A partir d'un formulaire, je voudrais pouvoir choisir une procédure, et l'exécuter.

    Pour cela, j'affiche les noms des modules dans une liste modifiable:
    Dim db As DAO.Database, mddoc As DAO.Document, strDesc As String
    Set db = CurrentDb
    For Each mddoc In db.Containers("Modules").Documents

    Me.Liste1.AddItem (mddoc.Name)

    Next
    Jusque la tout fonctionne: j'ai donc un formulaire avec une liste qui contient les noms des modules contenu dans mon application.

    Mais comment faire, pour qu'en cliquant sur un bouton, la procedure "stat()" du modules selectionné soit lancée?


    J'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Commande2_Click()
     
    Call Me.Liste1.Value & ".Stat()"
     
    End Sub

    Merci beaucoup pour votre aide

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande2_Click()
       dim oMod as Module
     
       set oMod = Application.Modules(Me.Liste1.Value)
       Call oMod.Stat
     
    End Sub
    C'est à tester. Stat doit être défini comme étant Public. Il serait sage aussi d'activer une gestion d'erreur au cas où Stat n'était pas défini dans le module
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  3. #3
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    slt,

    Mon application contient une 20aine de modules
    Dans chaque module, il y a une procedure Stat()
    20 fois la même procédure c'est possible ça?
    c'est des modules de classe?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Arkham46
    slt,
    20 fois la même procédure c'est possible ça?
    c'est des modules de classe?
    Oui. J'ai quelque chose de semblable, avec une procédure "Francais" et "Anglais" dans chaque module de classe et module standard ayant une sortie à l'écran (des msgbox en gros).

    Je boucle sur la collection Forms et Modules pour appeler chaque procédure. Évidemment, il faut toujours indiqué le nom "au long". Aucun appel "Francais" tout court sinon une erreur de "nom ambigu" survient ou au mieux, on appelle la procédure la plus proche.

    Un peu comme DAO et ADODB au final, avec leur objet ayant le même nom.
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Citation Envoyé par Caroline1
    Oui. J'ai quelque chose de semblable, avec une procédure "Francais" et "Anglais" dans chaque module de classe et module standard ayant une sortie à l'écran (des msgbox en gros).

    Je boucle sur la collection Forms et Modules pour appeler chaque procédure. Évidemment, il faut toujours indiqué le nom "au long". Aucun appel "Francais" tout court sinon une erreur de "nom ambigu" survient ou au mieux, on appelle la procédure la plus proche.

    Un peu comme DAO et ADODB au final, avec leur objet ayant le même nom.
    ah ben oui ça marche
    merci

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Après test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'Fonctionne:
    basMonModuleStandard.MaFonctionPublique
     
    'Génère une erreur à la compilation sur oMod.MaFonctionPublique (membre de méthode ou données introuvable)
    Dim oMod As Module
    Set oMod = Application.Modules("basMonModuleStandard")
    oMod.MaFonctionPublique
    Bizarrement aussi :
    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
     
    dim basModules as Modules
    dim i as Integer
    dim bas as Module
     
    'Fonctionne. On entre Application.Modules.Count fois dans la boucle.
    Set basModules = Application.Modules
    For i = 0 To Application.Modules.Count - 1
         If basModules(i).Type = acStandardModule Then _
                'quelque chose
    Next
     
    'Fonctionne aussi mais, même si Application.Modules.Count est > 0, on entre jamais dans la boucle.
    For Each bas In Application.Modules
         'quelque chose
    Next
    Si quelqu'un a une idée d'explication, je suis preneure aussi!
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  7. #7
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Et en déclarant bas en variant ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Tofalu
    Et en déclarant bas en variant ?
    Ça en déclare plus d'erreur à la compilation. Mais la même erreur (438: Membre introuvable) ressort à l'exécution. On n'entre pas plus dans la boucle.
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  9. #9
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    je vais tester ca de suite! merci beaucoup en tout cas!

    Heu oui, en effet, ca génère une erreur

  10. #10
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Arkham46
    slt,



    20 fois la même procédure c'est possible ça?
    c'est des modules de classe?
    heu non, de simples modules. Avec un noms différents pour chacun (normal). Mais chacun possède une procédure "Stat".

  11. #11
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    J'ai fait une tentative avec la fonction Eval():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <div style="text-align: left;">Private Sub Commande2_Click()
       dim oMod as Module
     
       set oMod = Application.Modules(Me.Liste1.Value)
       Eval (oMod.Name & ".Stat()") 
    End Sub</div>
    Et cela ne fonctionne pas: erreur 2482: Impossible pr Microsoft Office de trouverle nom 'nomDeMaProcedure' entré dans l'expression


    Pourtant si je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print oMod.Name & ".Stat()"
    cela me donne bien: nomDeMaFonction.stat()

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Continue à chercher :-). La question m'intéresse aussi mais là, je dois passer à autre chose mais.

    Perso, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    basMonModuleStandard1.MaFonctionPublique
    basMonModuleStandard2.MaFonctionPublique
    basMonModuleStandard3.MaFonctionPublique
    ...
    Je préférerais vraiment pouvoir passer par une variable et une boucle sur tous les modules. Ça m'éviterait de devoir aller modifier à la mitaine quand un nouveau module s'ajoute.

    Sinon pour ton problème, tu peux peut-être passer un Select case, avec un
    Case "NomModule"
    NomModule.Stat

    Pour chaque module. Ça devrait fonctionner il me semble.

    Caroline
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

Discussions similaires

  1. Declaration procedure dynamique
    Par petitcoucou31 dans le forum Langage
    Réponses: 6
    Dernier message: 09/11/2011, 11h38
  2. [ASE 15.0.2] Procedure dynamique introuvable
    Par MartyMacFly dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 25/02/2009, 16h44
  3. lancer une procedure toutes les minutes precisemment
    Par Alextk dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 06/06/2006, 15h10
  4. champ dynamiques dans une procedure stockée
    Par augereau dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/11/2005, 07h52
  5. Réponses: 6
    Dernier message: 24/09/2004, 13h10

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