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 :

[VBA-E] Appel de fonction/procédure depuis une variable [Trucs & Astuces]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut [VBA-E] Appel de fonction/procédure depuis une variable
    Bonjour !

    J'ai un ensemble de fonctions de la forme NomAttribut_Next(). Je souhaiterai une solution pour pouvoir faire un truc du type (attention, je vais écrire des conneries mais au moins vous comprendrez de suite ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim nomatt as String
    Dim ret as String
    nomatt = "Operation"
    ret = nomatt & "_next"
    'Appel de la fonction Operation_next
    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    J'ai rien compris
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par illight
    J'ai rien compris
    Ca me paraît pourtant clair.

    truman veut "créer" le nom de la procédure appelée par concaténation d'une variable et d'une constante.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Essaye la fonction Evaluate, mais sans garantie.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Bon ok, je vais réessayer.

    Sans rentrer dans les détails, dans mon programme j'ai plusieurs 'attributs'.
    J'ai également plusieurs fonctions nommées sous la forme nomattribut_next (j'aurai sans doute plus tard des fonctions sous la forme nomattribut_load etc). J'aimerai lancer ces fonctions juste à partir du nom de l'attribut.

    Autre exemple, inventé à l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim NomAttrib(5) as String
    Dim ret as String
    Dim i as Integer
     
    For i = 0 To 4
       'Appel de la fonction
       ret = NomAttrib(i) & "_next"
       MsgBox ret
    Next i
    J'espère avoir été plus clair.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par AlainTech
    Essaye la fonction Evaluate, mais sans garantie.
    Salut !

    Ok j'essaierai... après la pause déjeuner

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    pour executer une autre macro à partir d'une variable , tu peux tester


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim sVar As String
    'http://support.microsoft.com/kb/q108519/
    sVar = "nomMacro"
    Application.ExecuteExcel4Macro "RUN(""" & sVar & """)"

    bon apres midi
    michel

  8. #8
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Deux autres solutions :
    1. CallByame
    2. Select ... Case

    1. Solution à base de CallByname :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CallByName(Me, strFunction, VbMethod)
    2. Solution à base de Select Case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Select Case strFunction
        Case "Fonction_1"
            Fonction_1
     
        Case "Fonction_2"
            Fonction_2
     
        Case "Fonction_3"
            Fonction_3
     
        Case Else
            MsgBox "Fonction non reconnue"
    End Select
    Brutale mais fonctionne

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Juste pour info: CallByName n'est pas reconnu par Excel 97.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 76
    Points : 24
    Points
    24
    Par défaut
    Re !
    J'ai utilisé la méthode CallByName. Voici, plus en détails, la façon dont j'ai procédé (on sait jamais ça peut peut-être servir...).

    J'ai créer un module de classe nommé CallNextForm qui contient ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function Operation_next() as String
    Operation_next = "Vive Developpez.com"
    End Function
    Puis dans ma form, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim func as String
    Dim ret as String
    Dim NextForm as CallNextForm
     
    Set NextForm = New CallNextForm
     
    'Nom de la fonction
    func = nomatt & "_next
    ret = CallByName(NextForm, func, VbMethod)
    MsgBox ret
    Citation Envoyé par MsgBox
    Vive Developpez.com
    Merci à tous.

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

Discussions similaires

  1. [XL-2003] Probleme sur appel de fonction auto depuis une cellule faisant une affectation
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/05/2011, 12h43
  2. appel fonction variadique depuis une liste
    Par _iri_ dans le forum C
    Réponses: 4
    Dernier message: 04/02/2011, 12h10
  3. Réponses: 2
    Dernier message: 15/05/2008, 10h45
  4. Appel d'une fonction A depuis une fonction B.
    Par LeFlou dans le forum C++
    Réponses: 9
    Dernier message: 22/05/2007, 17h36
  5. [WebForms]Comment appeler une fonction ASP depuis une JavaScript ?
    Par flagadda dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 11/08/2006, 14h24

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