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 d'une sub d'un autre fichier xls (avec sorties)


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 76
    Points : 49
    Points
    49
    Par défaut appel d'une sub d'un autre fichier xls (avec sorties)
    Bonjour
    J'ai bien trouvé dans le forum comment on pouvait lancer une macro d'une autre feuille excel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.run("nomfichier.xls!nom_sub", arg1,arg2)
    mais chez moi ça ne va pas car les arguments sont modifiés dans la procédure et je souhaite les récupérer...
    en testant la formule ci-dessus, ça n'est pas le cas (problème de mémoire sans doute ...)

    Merci beaucoup

  2. #2
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 76
    Points : 49
    Points
    49
    Par défaut
    aïe aïe
    l'aide indique:

    Notes
    Vous ne pouvez pas utiliser d'arguments nommés avec cette méthode. Ils doivent être transmis par position.

    La méthode Run renvoie ce que la macro exécutée renvoie. Les objets qui sont transmis à la macro en tant qu'arguments sont convertis en valeurs (en appliquant la propriété Value à l'objet). Cela signifie que vous ne pouvez pas passer d'objets aux macros à l'aide de la méthode Run.



    Comment faire alors????
    Merci

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Tu peux transformer ta sub en function qui retourne un tableau.
    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
     
    Sub test()
        Dim arg1 As Long, arg2 As Long, v As Variant
        arg1 = 10
        arg2 = 20
        v = Application.Run("nomfichier.xls!nom_function", arg1, arg2)
        arg1 = v(0)
        arg2 = v(1)    
        Debug.Print arg1
        Debug.Print arg2
    End Sub
     
    Function nom_function(val1 As Long, val2 As Long) As Variant
        val1 = val1 * 2
        val2 = val2 * 2
        nom_function = Array(val1, val2)
    End Function
    Une autre approche consiste à référencer le classeur contenant nom_sub dans le classeur qui l'appelle via outils>références>nom du projet.
    Tu peux alors lancer la procédure sans passer par Application.Run et donc passer les arguments par référence.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub test()
        Dim arg1 As Long, arg2 As Long
        arg1 = 10
        arg2 = 20
        nomprojet.nom_sub, arg1, arg2
        Debug.Print arg1
        Debug.Print arg2
    End Sub
     
    Sub nom_sub(val1 As Long, val2 As Long)
        val1 = val1 * 2
        val2 = val2 * 2
    End Sub
    Inconvénient de cette méthode, le classeur référencé est automatiquement ouvert quand on ouvre le classeur qui le référence, et il est impossible de le fermer tant que le classeur qui le référence est ouvert.

    Cordialement,

    Tirex28/

  4. #4
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 76
    Points : 49
    Points
    49
    Par défaut
    Un grand grand merci.
    j'ai choisi l'option "référencer un projet"
    petite question: quand j'exécuterai ma macro non plus à partir de mon IDE mais via un bouton excel, le projet sera toujour référencé?
    Merci

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Re,

    Citation Envoyé par hector2
    petite question: quand j'exécuterai ma macro non plus à partir de mon IDE mais via un bouton excel, le projet sera toujour référencé?
    En enregistrant ton classeur il conserve les références aux autres projets, donc a priori pas de souci.

    Par contre si le classeur référencé est déplacé ou renommé tu auras une référence manquante, il faudrait donc prévoir ce cas à l'ouverture du classeur.


    Cordialement,

    Tirex28/

  6. #6
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 76
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup!

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

Discussions similaires

  1. appel d'une fonction dans un autre fichier jss
    Par Davee dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/06/2008, 20h12
  2. appel d'une fonction dans un autre fichier
    Par funboard dans le forum Langage
    Réponses: 2
    Dernier message: 08/02/2008, 09h26
  3. appel d'une classe d'un autre fichier.
    Par overider dans le forum Tkinter
    Réponses: 7
    Dernier message: 27/09/2007, 11h11
  4. [POO] appel d'une méthode d'un autre fichier, le tout objet
    Par aaaaaaaa dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/07/2007, 18h43
  5. appel d'une variable d'un autre fichier
    Par jmbonnaz dans le forum MATLAB
    Réponses: 1
    Dernier message: 18/04/2007, 11h08

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