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] utiliser une macro contenue dans un autre classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 485
    Points : 875
    Points
    875
    Par défaut [VBA] utiliser une macro contenue dans un autre classeur
    Bonjour à tous,

    voilà ma problématique : j'ai 30 fichiers excel sur lesquels je voudrais executer une macro (la même sur les 30 fichiers) à l'ouverture. Comme il est totalement stupide et chronophage de recopier betement la macro sur les 30 fichiers, je souhaiterais centraliser la macro et l'appeler dans chaque classeur (pour la maintenance c'est mieux ) Et il faudrait que ce soit totalement transparent pour l'utilisateur, i.e. qu'il n'ait rien à installer.

    je crois qu'il faut que j'utilise un fichier xla ou quelque chose d'approchant. Comment puis-je trouver un moyen pour faire ca

    Merci pour votre aide

    laloune

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut Re: [VBA] utiliser une macro contenue dans un autre classeur
    Citation Envoyé par laloune
    Bonjour à tous,

    voilà ma problématique : j'ai 30 fichiers excel sur lesquels je voudrais executer une macro (la même sur les 30 fichiers) à l'ouverture. Comme il est totalement stupide et chronophage de recopier betement la macro sur les 30 fichiers, je souhaiterais centraliser la macro et l'appeler dans chaque classeur (pour la maintenance c'est mieux ) Et il faudrait que ce soit totalement transparent pour l'utilisateur, i.e. qu'il n'ait rien à installer.

    je crois qu'il faut que j'utilise un fichier xla ou quelque chose d'approchant. Comment puis-je trouver un moyen pour faire ca

    Merci pour votre aide

    laloune
    Plusieurs solution ta macro peu par exemple agir sur le classeur courant ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      ActiveWorkbook.....
    tu peu nommer ton classeur contenant la macro en .Xla et le placer sous le répertoire... ...office\startup.. (je crois que c'est la qu'on place les fichier chargé automatiquement à l'ouverture d'excel...)

    tu charge un à un les 30 fichiers et tu lance la macro...



    ou alors tu fais une boucle qui ouvre un à un chacun des 30 classeurs et exécute la macro désirée... ( voir ..dans le forum exemples : mot clefs pour recherche avancé : Dir,Open..)


  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'NomFich.xls'!NomMacro"
    Testé et qui fonctionne.
    Dans ton cas, tu le mets dans une boucle dans laquelle tu ouvres le classeur, lance la macro et referme le classeur
    Tu ne précises pas si tu disposes de la liste des classeurs ou si tu souhaites aussi qu'on te conseille là-dessus.

    A+

  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 Re: [VBA] utiliser une macro contenue dans un autre classeur
    Citation Envoyé par laloune
    j'ai 30 fichiers excel sur lesquels je voudrais executer une macro (la même sur les 30 fichiers) à l'ouverture.
    Ce que veut laloune c'est que la macro s'exécute à l'ouverture de n'importe quel fichier mais sans copier la macro dans chacun des fichiers.

  5. #5
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    et si on place l'instruction de ouskel'n'or dans Workbook_Open() ?

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    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 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Personnellement, j'opterais pour une xla, mais l'utilisateur devra au moins charger la xla une fois. Pour ce faire, dans Excel, Outils/Macros complémentaires, puis éventuellement parcourir pour trouver la XLA, et la charger (cocher la case en regard)

    Après, la xla peut intervenir lors d'un évènement workbook.open par exemple.

    Dans le code VBA de la XLA, on trouvera ceci, placé dans le module du classeur, généralement Thisworkbook...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public WithEvents app As Excel.Application
     
    Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
        MsgBox "Ouverture d'un classeur"
    End Sub
     
    Private Sub Workbook_Open()
        Set app = Excel.Application
    End Sub
    L'objet app est déclaré avec ses évènements, ce qui nous permet de les gérer...

    A l'ouverture de la xla, soit au chargement d'Excel, l'évènement Open du classeur XLA initialise l'objet App... On peut alors gérer l'évènement app_WorbookOpen, survenant à chaque ouverture de classeur tant que la xla est chargée...

    Dans l'éditeur VBA, il est évidemment possible de choisir d'autres évènements d'application...

    Notes:

    1. Lorsque tu vas enregistrer ton classeur sous format XLA, note le chemin emprunté par Excel, car il sauve les XLA par défaut dans un dossier spécial. La localisation de la XLA n'a aucune influence sur son fonctionnement.

    2. Un fichier sauvé en XLA "disparait" d'Excel car il n'est pas accessible à l'utilisateur. Il faut donc faire attention à ne pas utiliser des SELECT sur les feuilles d'un XLA car cela conduirait à une erreur. Il est par contre parfaitement envisageable d'utiliser les feuilles d'un XLa pour y stocker des données, y effectuer des calculs...




    Est-ce cela qui était souhaité?

    Pierre Fauconnier

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    laloune a écrit:
    j'ai 30 fichiers excel sur lesquels je voudrais executer une macro (la même sur les 30 fichiers) à l'ouverture.
    AlainTech a écrit
    Ce que veut laloune c'est que la macro s'exécute à l'ouverture de n'importe quel fichier mais sans copier la macro dans chacun des fichiers.
    Il faut bien la placer quelque part, cette macro...
    Je voyais un fichier "maître" contenant la macro, dont les feuilles auraient été masquées.
    laloune n'aurait ainsi rien à installer. Un form avec les instructions et un bouton pour lancer les procédures, un autre pour quitter.
    Mais en l'absence de précision, on patine nécessairement.

    A toi laloune ! on attend !

  8. #8
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 485
    Points : 875
    Points
    875
    Par défaut
    eh bien merci pour toutes ces réponses !!! ca fait au moins une bonne nouvelle après cette dure journée de boulot...

    AlainTech avait vu juste : dans un souci de maintenance (et surtout parce que je suis feignant ), je souhaite utiliser le même module pour tous les fichiers, sans avoir à recopier la macro dans chacun des classeurs. La "centraliser", en quelque sorte.

    la solution de bbil, qui consiste à placer le fichier dans le répertoire de démarrage est super (plus besoin de la charger après si j'ai bien compris), mais je ne peux la mettre en oeuvre car : je ne serai pas le seul à utiliser les macros en question, et je travaille dans une grosse entreprise (j'aurai terminé mon stage avant d'avoir eu l'administrateur réseau hi hi)

    et c'est finalement ouskel'n'or qui remporte la victoire : la macro sera effectivement lancée depuis un bouton, placé dans chaque classeur excel. je vais donc tester tout ca et je vous tiens au courant !

    merci pour votre gentillesse
    laloune

  9. #9
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 485
    Points : 875
    Points
    875
    Par défaut
    bon ca marche super avec ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'D:\Dev\Fichier.xls'!Executer"
    cependant, (eh oui, je suis un peu exigeant ), le fichier "fichier.xls" s'ouvre lorsque j'execute la macro qu'il contient...

    est-il possible d'effectuer cette même opération avec une totale transparence pour l'utilisateur ?

    Merci pour votre aide en tous cas, je vais bien dormir cette nuit

    laloune

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    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 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Tu dis

    cependant, (eh oui, je suis un peu exigeant ), le fichier "fichier.xls" s'ouvre lorsque j'execute la macro qu'il contient...
    C'est pourquoi je reviens à mon xla, dont le bouton sur une feuille de ton classeur peut lancer une macro.

    En clair, tu créées ta macro dans le XLA, tu places le bouton dans tes fichiers, lequel bouton appelle une macro du XLA. Le XLA sera ouvert au démarrage d'Excel, mais totalement transparent pour l'utilisateur car invisible...

    Ok?

    Pierre Fauconnier

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    L'inconvénient du xla étant qu'il doit être installé sur tous les postes...
    C'est toi qui vois.

    Edit
    Autant pour moi. La macro auto_open du fichier Perso prend le dessus si elle contredit celle du fichier à ouvrir.
    Syntaxe utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Workbook_open()
        Application.WindowState = xlMinimized
        ActiveWorkbook.RunAutoMacros Which:=xlAutoOpen
    End Sub
    Sub Auto_open()
        For i = 1 To Worksheets.Count - 1
            Windows(i).Visible = False
        Next
        OpenTheForm
    End Sub
    Là je masque les feuilles, pas le classeur

    Tu dis

    A+

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    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 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    La XLA peut être placée sur un disque réseau. Il n'est pas obligatoire qu'elle soit physiquement sur chaque poste...

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Hello Pierre Fauconnier,

    Tu as sans doute raison. Juste une question, puisque je n'ai jamais fait ça : Comment fais-tu pour indiquer l'adresse du xla à Excel sur tous les postes si Excel est installé en local, non en réseau. Ta réponse m'intéresse et pourrait me simplifier la vie.

    A+

    NB - A savoir que le perso est également en local et qu'il peut avoir été "bricolé" par certains utilisateurs.

  14. #14
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    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 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Salut Ouskel'n'or...

    Outils/Macros complémentaires, puis Parcourir...

    Ok?

    Pierre Fauconnier

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Oui, ça je connaissais, et je comprends mieux, tu n'as pas 500 postes à distribuer...

    Merci quand même de ta réponse

    A+

  16. #16
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    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 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Tu peux faire en sorte que ce soit le fichier qui a besoin de la XLA qui la renseigne et qui l'ouvre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Connexion_XLA()
        Dim Mon_xla As AddIn
     
        AddIns.Add "\\serveur\Fichier.xla"
     
        For Each Mon_xla In AddIns
            If Mon_xla.Name = "Fichier.xla" Then
                Mon_xla.Installed = True
                Exit For
            End If
        Next
    End Sub
    en adpatant évidemment les noms et chemins... et en appelant cette procédure lors de l'évènement open du classeur...

    Idéalement, il faudrait désactiver la XLA à la fermeture du classeur, en vérifiant, via un compteur, qu'un autre classeur n'en a pas besoin.

    Ok?

    Pierre Fauconnier

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Comme il est totalement stupide et chronophage de recopier betement la macro sur les 30 fichiers, je souhaiterais centraliser la macro et l'appeler dans chaque classeur
    Qu'entends-tu par "l'appeler dans chaque classeur" ?
    On peut comprendre de deux manières :

    1 - Depuis chaque classeur on appelle la macro 'nécessite une macro par classeur lançant la fameuse macro que tu souhaites ne pas dupliquer (xla ou autre)
    2 - La macro est lancée d'un "point fixe" pour chaque nouveau classeur créé : Peut se résoudre à une seule macro lancée depuis un classeur unique

    On aurait peut-être dû commencer par là...

    Tu peux nous dire...

    A+

  18. #18
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 485
    Points : 875
    Points
    875
    Par défaut
    autant pour moi, la première proposition est la bonne...

    je pense qu'avec le code de Pierre Fauconnier, je peux réussir à faire exactement ce que je veux... tout en utilisant au mieux les ressources que m'offrent le réseau sur lequel je suis (façon pompeuse de dire que je mets la xla sur le serveur et que je l'appelle depuis mes modules )

    Merci beaucoup, je vous tiens au courant
    laloune

  19. #19
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 485
    Points : 875
    Points
    875
    Par défaut
    j'ai testé cette instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddIns.Add "D:\Mes documents\Dev\batchfonctions.xla"
    ca ne fonctionne bizarrement pas... il me renvoie l'erreur : "la méthode add de la classe AddIns a échoué"

    que faire ? dois-je activer une référence ou quelque chose dans ce style ?

    merci

    laloune

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Moi, j'ai cette syntaxe (VBA97) (qui est celle de l'aide) et qui ne pose pas de pb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddIns("D:\Mes documents\Dev\batchfonctions.xla").Installed = True
    Par contre, je n'ai pas de déclaration "Dim Mon_xla As AddIn"
    Enfin tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.AddIns("D:\Mes documents\Dev\batchfonctions.xla").Installed = True
    Tu dis

    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/07/2015, 12h25
  2. Réponses: 1
    Dernier message: 29/01/2013, 10h42
  3. [VBA] Menu qui pointe sur une macro contenue dans un fichier xla protégé
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/08/2007, 14h34
  4. [VBA-E] Lancement d'une macro située dans un autre fichier
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/09/2006, 16h48
  5. [VBA-E] copier une fiche active dans un autre classeur.
    Par Little-Freud dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 15/03/2006, 10h51

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