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 Function ou SUB contenue dans une variable [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2007
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2007
    Messages : 272
    Par défaut Appel Function ou SUB contenue dans une variable
    Bonjour à tous,
    Question simple, je connais le nom d'une SUB contenue dans un modèle au travers d'un champ nommé Excel, comment faire en VBA pour l'appeler ?

    Voilà, l'exposé de ma question de façon plus exhaustive :

    Exemple : champ nommé en A1 NomProcédure, et en A1 j'écris "Ma_Sub"

    Dans un module de ce modèle j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Explicit
    Private Sub Ma_Sub()
    MsgBox "Procédure exécutée en fin de mise en forme du modèle"
    End Sub
    Dans le déroulé d'une macro, je veux faire appel à cette SUB, comme suit par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim MaProc as variant
    MaProc = range("NomProcédure).Value
    Call MaProc      ' ce Call ne fonctionne qu'avec un nom explicite, d'où erreur VBA 438
    End Sub
    Par avance merci
    Bertrand

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tel que vous l'exposé, ce n'est pas possible sauf en utilisant la bibliothèque Microsoft Visual Basic for Applications Extensibility 5.3. en tous les cas dans les limites de mes connaissances actuelles.
    Personnellement, je déconseille l'usage de cette dernière qui permet entre-autres de créer des procédures dynamiquement ou d'en supprimer et demande également de changer des options dans l'éditeur VBE. Une application bien écrite ne devrait pas avoir recours à ce genre de pratique.

    En revanche, si vous voulez appeler une procédure ou plusieurs procédures en fonction de mots placés dans une ou plusieurs cellules nommées c'est possible. J'ai déjà pratiqué de cette façon pour créer en quelques sortes des macros-commandes.
    Dans une table de procédures, je place dans une colonne nommée "Process", un mot clé comme "Sort" ou "Filter" ou encore "Export" et dans une colonne nommée "Parameter", les différents arguments à passer à la procédure qui effectuera soit un tri, un filtre ou un export.
    La lecture de cette table est chargée dans une procédure qui effectuera le dispatching (Select Case) vers les procédures concernées en passant les arguments.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2007
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2007
    Messages : 272
    Par défaut
    Je vous remercie beaucoup de votre réponse.
    L'option 1 vous déconseillez, j'en prends bonne note.
    L'option 2 est limitée à des actions connues à l'avance, cela reviendrait en quelque sorte à automatiser des actions de style Macrocommandes, tel qu'on le connaissait en Excel 4, avant le VBA, cela ne nous rajeunit pas !!!
    Finalement, je vais opter pour une solution 3, où je vais imposer à la création du modèle un nom de SUB, par exemple Sub Finaliser_Mise_en_forme.

    Encore une fois grand merci.
    Bertrand

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'option 2 est limitée à des actions connues à l'avance,
    Pas nécessairement, rien ne vous empêche et c'est ce que je fais dans mes procédures automatisées, de prévoir des procédures particulières pour une application dédiée ce qui nous rapproche de l'option 3
    Cette approche, facilite la maintenance de l'application

    Si vous voulez en savoir plus sur les manipulations de l'éditeur VBA (Option 1), je vous conseille la lecture de ce tutoriel Visual Basic Editor
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2007
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2007
    Messages : 272
    Par défaut
    Au final mon problème se résout bien avec l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    '   Call MaProc  '<== ne fonctionne pas
    Run Monfichier & "!" & Module1.MaProc   ' <=== Fonctionne

    Grand Merci Philippe

    Bertrand

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour Bertrand,
    Merci pour ton retour.
    Effectivement, je n'ai pas pensé à cette solution que l'on peut utiliser notamment en appelant une procédure présente dans les macros complémentaires ou dans un autre classeur xlsm
    Cette discussion m'aura permis de faire remonter dans ma mémoire une information bien enfouie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test_t()
      Dim p As String
      p = "t"
      Run p
    End Sub
     
    Sub t()
      MsgBox "Oui"
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Appel d'une procédure PL/SQL contenue dans une variable
    Par daniel.lemuet dans le forum PL/SQL
    Réponses: 2
    Dernier message: 21/01/2010, 17h48
  2. Réponses: 3
    Dernier message: 07/01/2010, 16h54
  3. Comment afficher une valeur contenue dans une variable ?
    Par manubrard dans le forum Langage
    Réponses: 5
    Dernier message: 20/02/2006, 15h56
  4. Condition contenu dans une variable string
    Par tomo0013 dans le forum Access
    Réponses: 6
    Dernier message: 01/12/2005, 14h15
  5. Réponses: 7
    Dernier message: 25/10/2005, 15h19

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