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 :

Executer une macro depuis un autre classeur [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut Executer une macro depuis un autre classeur
    Bonjour,

    Je m'excuse par avance si ma question a déjà été posée. J'ai fait une recherche sur le forum et sur google mais j'avoue je n'ai pas pu y passer trop de temps. En fait, je ne connais pas le VBA mais j'ai dit à une collègue que j'allais l'aider en regardant sur internet...

    Contexte:
    J'ai un fichier excel A contenant un tableau non mis en forme.
    Je souhaite créer un fichier excel B qui va agir sur la mise en forme de A.
    A ne doit pas contenir de macros. B contient des macros.

    Réalisation:
    Dans mon fichier B, j'ai créé 2 boutons:
    - bouton1 auquel j'ai associé la macro1
    - bouton2 auquel j'ai associé la macro2

    Macro1
    La macro1 ouvre le fichier A.
    ça marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub OuvrirClasseur()
        Dim MonClasseur As Workbook
        Set MonClasseur = Workbooks.Open("C:\Users\Debdev\Desktop\FichierA.xls")
    End Sub

    Macro2
    La macro2 doit mettre à jour le fichier B.
    ça ne marche pas. ça me met à jour le fichier A.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub MAJ()
        MonClasseur.Activate
        Columns("D:D").ColumnWidth = 4.43
    End Sub
    Comment dire à la macro2 d'agir sur le fichier A ?

    Merci de votre aide.

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour

    Citation Envoyé par debdev Voir le message
    La macro2 doit mettre à jour le fichier B.
    ça ne marche pas. ça me met à jour le fichier A.
    Comment dire à la macro2 d'agir sur le fichier A ?
    Alors, il faut mettre à jour A ou B?

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Oops je me suis emmelée les pinceaux. Merci de l'avoir remarqué.

    La macro, située dans le fichier B, doit agir sur le fichier A.
    Mon code ne marche pas car elle met à jour le fichier B.

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Tu peux rendre la variable MonClasseur public (elle semble actuellemnt limitée à la procédure OuvrirClasseur.

    Sinon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub MAJ()
        Application.workbooks("FichierA.xls").Columns("D:D").ColumnWidth = 4.43
    End Sub
    Cdlt,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  5. #5
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Merci de ton aide. Mais je n'arrive pas à faire fonctionner le code.

    Si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub MAJ()
        Application.workbooks("FichierA.xls").Columns("D:D").ColumnWidth = 4.43
    End Sub
    Alors quand je clique sur le bouton qui appelle cette macro, ça me met:
    Propriété ou méthode non gérée par cet objet

    Si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub MAJ()
        Application.workbooks("C:\Users\Debdev\Desktop\FichierA.xls").Columns("D:D").ColumnWidth = 4.43
    End Sub
    Alors quand je clique sur le bouton qui appelle cette macro, ça me met:
    L'indice n'appartient pas à la sélection

  6. #6
    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
    Bonsoir
    Alors il fallait spécifier la feuille
    Ici en exemple MonClasseur est déclarée de porté module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Dim MonClasseur As Workbook
     
    Sub OuvrirClasseur()
     
    Set MonClasseur = Workbooks.Open("C:\Users\User\Desktop\tst.xlsm")
    End Sub
     
    Sub MAJ()
     
    If Not MonClasseur Is Nothing Then MonClasseur.Worksheets(1).Columns("D:D").ColumnWidth = 40
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Oui
    Merci.
    En ajoutant l'onglet, ça fonctionne

    Merci pour votre aide.

    Bonne nuit !

  8. #8
    Membre habitué Avatar de doncamelo
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Décembre 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2007
    Messages : 129
    Points : 164
    Points
    164
    Par défaut
    Bonsoir debdev,

    J'ai essayé de reproduire ton code et voici le résultat après quelques modifs :

    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
    Sub MaJ()
        OuvrirClasseur
    End Sub
     
    Sub OuvrirClasseur()
     
        Dim MonClasseur As Workbook
        Set MonClasseur = Workbooks.Open("C:\ClasseurB.xlsx")
        Columns("D:D").ColumnWidth = 4.43
     
        MonClasseur.Save
        MonClasseur.Close
        Set MonClasseur = Nothing
     
     
    End Sub
    Peut être que ça pourra t'aider.

    Doncamelo

    Désolé,

    J'arrive un peu tard !!!

  9. #9
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    @doncamelo: merci pour ton aide . effectivement, une solution m'avait déjà été proposée mais merci à toi pour t'etre intéressé au problème.

    bon week end !

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

Discussions similaires

  1. Lancer un UserForm d'un classeur depuis une macro d'un autre classeur.
    Par bruno.bel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/03/2009, 22h38
  2. Executer une macro depuis une autre
    Par dureiken dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/01/2009, 00h34
  3. Executer une macro dans un autre classeur
    Par nautygirl dans le forum Général VBA
    Réponses: 2
    Dernier message: 30/07/2007, 15h34
  4. [VBA-E] Affecter une macro a un autre classeur
    Par Mac Twist dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/01/2007, 16h38
  5. Utilisation d'une macro d'un autre classeur
    Par madislak dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/07/2006, 14h00

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