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

Macros et VBA Excel Discussion :

Appel dynamique de Fonction ou Procédure


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Appel dynamique de Fonction ou Procédure
    Bonjour à tous,

    Je suis actuellement sur un cas un peu particulier sur lequel j'ai trouvé une solution mais qui me semble pas forcément la meilleur... Je m'explique :

    Sous Excel 2003, je cherche à appeler dynamiquement une fonction ou une procédure en fonction de ce qui se trouve dans une listebox.
    Pour faire plus clair, j'ai un formulaire avec différents champs, choix et listes qui se remplissent automatiquement au fur et à mesure des choix de l'utilisateur. Avec à la fin un bouton Exécuter l'action (que l'utilisateur à demander).

    Dans un soucis de modularité, je ne souhaite pas mettre un select case qui serait trop contraignant pour certain de devoir allez dans le code en cas d'ajout de fonctionnalités. De plus ayant beaucoup de fonction, c'est un peu lourd à gérer.

    Existe t-il une possibilité d'avoir un bouton qui appel une procédure ou une fonction ou une macro enfin n'importe quoi mais dynamiquement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub LanceAction_Click(NomProcedure)
    Dim AppelProcedure As String
    AppelProcedure = NomProcedure
    Call AppelProcedure
    End Sub
    Avec NomProcedure une variable venant d'une listebox.

    J'ai trouvé une solution qui consiste en faite à appeler une fonction à un nom toujours identique mais dont le contenu change dynamiquement

    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
     
    Public Sub Temp(NomFonction)
    Dim debut As Integer
    Dim Lignes As Integer
     
    With ThisWorkbook.VBProject.VBComponents("PgmTest").CodeModule
        debut = .ProcStartLine("AppelProcedure", 0)
        Lignes = .ProcCountLines("AppelProcedure", 0)
        .DeleteLines debut, Lignes
    'End With
     
        sFonction = "Sub AppelProcedure" & vbCrLf
        sFonction = sFonction & vbTab & NomFonction & vbCrLf
        sFonction = sFonction & "End Sub"
     
    'création d'une procdure appelante
    With ActiveWorkbook.VBProject.VBComponents("PgmTest").CodeModule
        NextLine = .CountOfLines + 1
        .insertlines NextLine, sFonction
    End With
    End Sub
    Alors attention ça marche bien mais ne pas mettre le delete et la creation de la procédure dans le même module que l'appel à la fonction sous peine de plantage

    Merci d'avance

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 918
    Points
    55 918
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Exemple

    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
    Sub Appel()
        Dim Macro As String
     
        Macro = "Appel1"
        Run Macro
        Macro = "Appel2"
        Run Macro
     
    End Sub
     
    Sub Appel1()
        MsgBox "Appel 1"
    End Sub
     
    Sub Appel2()
        MsgBox "Appel2"
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Oula je suis vraiment parti dans des trucs compliqués moi...

    Merci bien ça marche impeccable comme cela.

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

Discussions similaires

  1. Appel dynamique de fonction par char*
    Par Scorpi0 dans le forum C
    Réponses: 8
    Dernier message: 11/06/2008, 21h08
  2. [JavaScript] [FAQ] Appeler dynamiquement une fonction et passer une fonction en argument
    Par SpaceFrog dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/05/2008, 14h48
  3. Appeler dynamiquement une fonction javascript
    Par BigDozer dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/05/2008, 14h41
  4. [Framework] Appel dynamique de fonctions
    Par hdd dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 21/12/2006, 17h35
  5. Appel dynamique de fonctions
    Par smyley dans le forum MFC
    Réponses: 4
    Dernier message: 27/10/2005, 12h53

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