[VBA] Appel dynamique à une procédure

Jef -  
 Utilisateur anonyme -
Bonjour tout le monde,

Voici le contexte:

Sous Access 2003, j'ai une 30aine de modules(pas de modules de classe), contenant chacun une procédure appelée "stat()".
Chaque module porte un nom différent et la procédure "stat()" est différente pour chaque module.

J'ai fait ceci pour ne pas avoir 30 procédures différentes dans un meme module. C'est + facile pour retrouver une procédure et la commenter, vu que 1 module = 1 procédure = 1 description de module.

Sur un formulaire, j'affiche les noms de mes modules dans une liste grace a:

Code:

Code :
Private Sub Form_Load() Dim db As DAO.Database, mddoc As DAO.Document, strDesc As String Set db = CurrentDb For Each mddoc In db.Containers("Modules" ).Documents     ZoneListe1.AddItem (mddoc.Name) Next End Sub  


Une fois le module selectionné dans la liste, je voudrais pouvoir le lancer grace à un bouton
(donc en gros lancer: ZoneListe1.value + ".stat()"

En dur, il suffit de faire: nomDuModule.nomDeLaProcedure

Mais en dynamique, comment faire?

Merci beaucoup de votre aide, pcq la je suis vraiment coincé.

Rem: ceci:

Code :
Application.Run(ZoneListe1.value & ".stat()" )  


donne L'erreur d'exécution n° 2517:
MSAccess ne peut trouver la préocédure essai.stat()
Configuration: Access 2003

7 réponses

  1. Utilisateur anonyme
     
    Salut!

    As-tu essayer d'appeler ta procédure sans les parenthèses?

    HackTrack
    0
  2. Jef
     
    Oui bien sur, ca engendre la meme erreur.. :(
    0
  3. Utilisateur anonyme
     
    Bonjour,

    Voici la syntaxe type d'un bouton appellant :

    Private Sub ExecuterSub_Click()
    
    On Error GoTo Err_ExecuterSub_Click
    
        Dim stDocName As String
    
        stDocName = "Macro1"
        DoCmd.RunMacro stDocName
    
    Exit_ExecuterSub_Click:
        Exit Sub
    
    Err_ExecuterSub_Click:
        MsgBox Err.Description
        Resume Exit_ExecuterSub_Click
        
    End Sub
    


    Ici, c'est bien le nom d'une macro et non le nom d'une procédure. Vous pouvez contourner de deux façon, soit en chargeant les références nécessaires pour manipuler les objets VBA, l'ayant fait sous excel je puis vous dire que c'est lourd et autre soluce un peu moins élégante, vous allez créer une macro pour chaque "procédure" que vous transformé en fonction en modifiant le label "Sub" par "Function".

    Dans les propriétés de la macro, choisissé l'option "ExécuterCode" et dans le Nom de la fonction, utiliser l'assistant [ ... ] pour pointer votre fonction, vous verrez tous vos modules et toute fonction s'y ratachant.

    ainsi le code du haut fonctionnera puisque pour chaque "procédure" devenu "fonction", il y aura une macro d'appel.

    Lupin
    0
  4. Jef
     
    Merci mais cela alors reviens au meme de faire un :
    Private Sub Commande4_Click()
    
     Select Case ZoneListe1.Value  
     
      Case "1ereProcedure"
            1ereProcedure.Stat
     
      Case "2emeProcedure"
            2emeProcedure.Stat
    
      end select
    
    end sub    
    
    


    Donc de faire une opération pour chaque module, et c'est ce que je voudrais éviter :(
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. naziha
     
    bonjour ,désoler,je n'ai pas un reponse
    0
  7. Utilisateur anonyme
     
    re :

    pas tout a fait :
    Private Sub Commande4_Click()
    
        Dim stDocName As String
    
        stDocName = ZoneListe1.Value  
        DoCmd.RunMacro stDocName
    
    End sub    
    

    si vous charger les noms de macro dans votre liste !

    Lupin
    0
    1. Jef
       
      oui mais si je comprend bien.
      Chaque fois que je créerai une nouvelle fonction (donc un nouveau module qui contient la fonction) , je devrai créer une nouvelle marco qui ouvre cette fonction ?
      0
  8. Utilisateur anonyme
     
    re :

    oui, c'est cela ! j'ai testé et ça fonctionne bien :-)

    Lupin
    0