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 :

VBE, Appel fonction depuis un autre classeur


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 25
    Points
    25
    Par défaut VBE, Appel fonction depuis un autre classeur
    yo

    Je cherche a executer une fonction presente dans un classeur qui n'est pas celui dans lequel je suis couramment. Je connais la fonction que je souhaite appeler, mais pas le classeur: le nom de celui-ci est transmis a travers une variable.

    J'utilise pour ce faire la methode Run:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim FileName As String
     
    Set WorkBk = Workbooks.Open(FileName)
    Application.Run (FileName & "'!returnImax'")
    Cela ne marche pas et j'obtiens comme message d'erreur: "FileName.xls" introuvable (où FileName apparait bien comme etant le nom de mon fichier).

    Auriez-vous des explications ? Je pense que cela est du aux guillemets qui, soit ne sont pas places au bon endroit, soit ne sont pas ceux qui conviennent.

    Merci.

  2. #2
    Membre actif Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Points : 209
    Points
    209
    Par défaut
    Salut !

    Quand tu ouvres le fichier, Excel se trouve sur CE fichier qui vient d'être ouvert.
    Il te suffit donc de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = Workbooks(ActiveWorkbook.name).name
    Et hop tu chope le nom du fichier excel ouvert.
    Ensuite, pour lancer la macro TOTO() qui se trouve dans ce fichier tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Windows(fichier).Activate
    Call TOTO
    Je pense que cette expression peut être simplifiée comme ça mais je suis pas certain:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(fichier).Call TOTO
    Pardon, je viens de voir, essaye comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run ("'" & FileName & "'!returnImax'")
    "Il est toujours plus facile de réaliser un travail que d'expliquer pourquoi on l'a fait." Martin Van Buren
    "Il y a ceux qui ont des résultats, et ceux qui ont des excuses." Moi

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Sinon en 1724 avant Jésus Christ, Absalodom inventa une méthode révolutionnaire qui était le copier coller d'une macro dans le classeur, ceci lui permit d'éviter le temps de chargement du classeur et d'alourdir uniquement de quelques octets (le classeur de référence)

  4. #4
    Invité
    Invité(e)
    Par défaut Bonjour, test ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set WorkBk = Workbooks.Open(FileName)
    WorkBk.Run "returnImax"

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'" & WorkBk.Name & "'!returnImax"
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 25
    Points
    25
    Par défaut
    Oui, je viens de trouver ca aussi. Merci a tous.

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Comme d'habitude mercatog calme les débats... testé et approuvé. Cependant j'estime qu'Absalodom avait raison.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 25
    Points
    25
    Par défaut
    Cependant j'estime qu'Absalodom avait raison.
    C'est surment du au ton...

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 25
    Points
    25
    Par défaut
    yo

    Je rouvre ce topic pour essayer de comprendre comment marche le formalisme d'enchassement de textes au sein d'une formule, si je peux l'appeler comme cela.
    J'ai affaire a un probleme de meme nature que ce que j'ai pu poser au debut de ce topic mais en plus complexe: je cherche a creer un lien hypertexte qui prenne son adresse par reference a une cellule situee dans un autre onglet. Pour expliciter, je veux que figure dans le champ Address ci-dessous a la place de "http://www.developpez.net/" le contenu de la case C3 de ma feuille "Accueil" concatene a un "\" et au contenu de la case D6 de ma feuille courante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Worksheets("TIC")
         .Hyperlinks.Add
              Anchor:=.Range(Split(Columns(j).Address(ColumnAbsolute:=False), ":")(1) & i), _
              Address:="http://www.developpez.net/", _
              ScreenTip:="www.developpez.net", _
              TextToDisplay:="Cliquer ici"
    End With
    J'avais dans un premier temps utiliser Excel pour realiser cette operation comme le montre la ligne ci-dessous, mais je souhaite a present utiliser du code vba.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =LIEN_HYPERTEXTE(CONCATENER(Accueil!$C$3; "\"; D6; "\"; D6; "_monNomDeFichier.pdf"); "cliquer ici")
    Quelqu'un pourrait-il m'expliquer comment cela marche ?

  10. #10
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    le contenu de la case C3 de ma feuille "Accueil" concatene a un "\" et au contenu de la case D6 de ma feuille courante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    with activeworksheet
         .Hyperlinks.Add
              Address:=.range("C3") & "\" & .range("D6"), _
              TextToDisplay:="Cliquer ici"
    End With

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 25
    Points
    25
    Par défaut
    yo

    Merci pour la reponse, je ne pensais pas qu'il s'agissait d'une concatenation.

    En revanche, je ne comprends pas le role des " ' " (simple quote) et a quel moment ils interviennent dans le cas d'un enchassement comme j'en parlais dans mon precedent message.
    Je suis par ailleurs confronte a un probleme de ce type avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBoxAMoua.RowSource = "'Base'!e8:e9"
    , qui fonctione et ou je cherche a remplacer "Base" par "Worksheets("Base")". Vous comprenez le rapport avec mon probleme.

    Dois-je ouvrir un nouveau topic pour traiter ce probleme ?

    Merci.

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    les simples quotes sont absolument nécessaires quand il y a un espace dans le nom de la feuille (ou classeur dans d'autres cas)

    Sinon tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Ws As Worksheet
     
    Set Ws = Worksheets("Base")
    ComboBoxAMoua.RowSource = "'" & Ws.Name & "'!E8:E9"
    Set Ws = Nothing
    Mais je ne vois pas l'intérêt.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

Discussions similaires

  1. Appeler une fonction depuis un autre module
    Par willyol3 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/06/2011, 08h51
  2. [PHP 5.2] appeler une fonction depuis une autre en POO
    Par Haxor668 dans le forum Langage
    Réponses: 2
    Dernier message: 23/09/2009, 10h02
  3. appel d'une fonction depuis un autre fichier?
    Par cortex59 dans le forum C++
    Réponses: 1
    Dernier message: 13/03/2009, 15h19
  4. Appeller une fonction depuis un autre site
    Par ProgVal dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2008, 18h01
  5. Appel d'un Formulaire depuis un autre classeur
    Par philmonnery dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/07/2006, 11h03

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