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 :

Utiliser une même macro dans des classeurs différents


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Par défaut Utiliser une même macro dans des classeurs différents
    Bonjour
    J'ai une macro qui fonctionne dans un classeur. Elle consiste à copier les valeurs d'une feuille d'un classeur de base, et de les coller dans le classeur de destination.
    J'aimerai pouvoir utiliser cette macro sur beaucoup d'autres classeurs de destinations (qui ne portent pas le même nom évidement).
    Comment dois-je faire pour lancer cette macro sans qu'elle ne soit attacher à un seul classeur destination?

    Voici le code que j'ai mis pour un classeur, mais je ne peux pas l'utiliser pour les autres.

    Je voulais utiliser quelque chose comme Theseworkbooks ou autres, mais je ne trouve pas.

    D'avance Merci

    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
    Sub CopierCollerBaseMP()
    '
    ' CopierCollerBaseMP Macro
    '
     
        Windows("Base.xlsx").Activate
        Sheets("Base MP").Select
        Cells.Select
        Range("A1152").Activate
        Selection.Copy
        Windows("Destination1.xlsm").Activate
        Cells.Select
        ActiveSheet.Paste
        Range("A1").Select
    End Sub

  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,
    Si l'on souhaite utiliser des procédures (Function ou Sub) quelque soit le classeur ouvert, deux possibilités
    • Créer un classeur Personnal.xlsb (Automatiquement créé si l'on choisi cette option lors de l'enregistrement d'une macro)
    • Sauver le classeur contenant une macro comme Macro complémentaire (fichier suffixé xlam)


    Maintenant, s'il s'agit d'écrire ou de lire dans un classeur qui est autre que le classeur où se trouve le code VBA (ThisWorkbook), il faut simplement donner le bon nom du classeur (Workbooks("Toto.xlsx")) par exemple
    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 confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Par défaut
    Bonjour

    Si j'ai bien compris, il faudrait que je change le nom de mon classeur de destination à chaque fois ?

    "Maintenant, s'il s'agit d'écrire ou de lire dans un classeur qui est autre que le classeur où se trouve le code VBA (ThisWorkbook), il faut simplement donner le bon nom du classeur (Workbooks("Toto.xlsx")) par exemple"

    C'est justement ce que je cherche à éviter.
    J'ai environ 200 classeurs excel à ouvrir et dans lequel je lancerai la même macro.
    Je voulais donc éviter de devoir modifier le nom du classeur dans la macro pour chacun d'eux... (en bleu dans le code ci-dessous)

    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
    ' Copier la base MP 2020
    '
        Windows("Cotation Budget 2020 Test.xlsx").Activate
        Sheets("Base MP").Select
        Cells.Select
        Selection.Copy
        Windows("PF-GE0053-1230_LACT.REF B2B15G_EG_20181119_modif_MSCV.xlsm").Activate
        Sheets("Base MP").Select
        Range("A1").Select
        ActiveSheet.Paste
        Range("J10:J177").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("F10").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("A1").Select

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut l'abc ...

  5. #5
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Citation Envoyé par aweb Voir le message
    Bonjour
    J'ai une macro qui fonctionne dans un classeur. Elle consiste à copier les valeurs d'une feuille d'un classeur de base, et de les coller dans le classeur de destination.
    J'aimerai pouvoir utiliser cette macro sur beaucoup d'autres classeurs de destinations (qui ne portent pas le même nom évidement).
    Il suffit de mettre la macro dans le classeur de base.
    Quelques conseils :
    - Éviter d'utiliser .Select, dans ce cas c'est inutile.
    - Une fenêtre n'est pas un classeur, utiliser le bon objet pour éviter les erreurs.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Par défaut
    Bonjour Patrice740

    Je comprends, mais comment va s’exécuter la macro dans le fichier de destination sans lui donner le nom d'un ancien fichier de destination ?

  7. #7
    Expert éminent 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
    Par défaut
    Bonjour

    Exemple à adapter

    L'utilisateur choisit le fichier...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Test()
    Dim Wbk As Workbook
    Dim Fichier
     
    Fichier = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")
    If Fichier <> False Then
        Set Wbk = Workbooks.Open(Fichier)
        Wbk.Worksheets("Source").Range("A1:D25").Copy ThisWorkbook.Worksheets("Destination").Range("X3")
        Wbk.Close False
        Set Wbk = Nothing
    End If
    End Sub

  8. #8
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Comme te l'a dis Philippe Tulliez

    Si tu crées un classeur .xlam (classeur spécifique de macros complémentaires) tu dois l'installer dans les compléments et pour cela rien de plus simple.
    - Developpeur - Compléments - Compléments
    - Clic sur bouton "Parcourir ..."
    - Sélectionner le classeur .xlam
    - Clic sur bouton "Oui"


    Une fois fait les macros contenus dans ce classeur sont disponibles pour tous tes classeurs que tu ouvrirais, même des nouveaux, même des classeurs sans macro (.xlsx)

    Tu appelles la macro et c'est tout

    c'est la meilleure solution.
    Maintenance facile et disponible en réseau à plusieurs en même temps sans soucis

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Par défaut
    Bonjour

    OK, j'ai réussi à utiliser la macro depuis un autre classeur (ma base par exemple) ou encore mieux depuis les compléments en macro complémentaires.

    Mais je n'arrive toujours pas à adapter la proposition de Mercatog

    Il me propose bien de choisir et d'ouvrir le classeur excel destination.
    Mais après, il ne copie pas les valeurs de la feuille "Base MP" du classeur source, dans la feuille "Base MP" du classeur destination.
    Voici le code que j'ai rentré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub MAJOutilCotation2020pourPilejeV2()
    '
    ' Copier la base MP 2020
    '
        Dim Wbk As Workbook
        Dim Fichier
     
        Fichier = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")
        If Fichier <> False Then
        Set Wbk = Workbooks.Open(Fichier)
        Wbk.Worksheets("Base MP").Range("A1:BZ50000").Copy ThisWorkbook.Worksheets("Base MP").Range("A1:BZ50000")
    End If
    End Sub

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Par défaut
    Désolé d'insister

    Il n'existe pas de code qui remplacerait (dans mon code initial)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("destination25.xls").Activate
    par quelque chose comme "le classeur ouvert en-cours" ?

    Car dans ma macro, j'ai d'autres fonctions à exécuter, et l'idée que j'avais était que j'ouvre en premier le classeur destination et qu'ensuite j'exécute toutes les macros.

    Après, il est vrai que je peux commencer par ouvrir le fichier destination par l'invitation de la macro, et que j'exécute ensuite toutes les macros.
    Dans ce cas, il manquerait juste de réussir à copier, ce que je n'ai pas réussi à faire dans mon post précédent.

    Merci encore

  11. #11
    Expert éminent 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
    Par défaut
    Wbk est le classeur de destination
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Base MP").Range("A1:BZ50000").Copy Wbk.Worksheets("Base MP").Range("A1")

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

Discussions similaires

  1. Réponses: 25
    Dernier message: 05/02/2016, 20h37
  2. [XL-2010] en vba copier coller avec une condition dans des classeurs différents
    Par will83177 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2014, 17h38
  3. Réponses: 5
    Dernier message: 06/03/2010, 14h47
  4. Réponses: 4
    Dernier message: 11/09/2008, 08h24
  5. Réponses: 3
    Dernier message: 06/02/2007, 11h04

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