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 :

Copier feuille entre deux fichiers dans feuille prédéfinie [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut Copier feuille entre deux fichiers dans feuille prédéfinie
    Bonjour à tous,

    Une nouvelle fois je sollicite votre aide.

    Voici ma problématique : je dispose de deux fichiers excel XLSM A et B.

    Depuis le fichier A, je souhaiterais récupérer des feuilles (12 au total) du fichier B. Je connais leur nom donc ce n'est pas un problème, pas besoin de parcourir les feuilles.
    Il faut par contre que la copie soit ISO car les feuilles du fichier B contiennent des tableaux nommés que je dois retrouver dans mon fichier A.

    Bref, j'ai aujourd'hui ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim wkbSource As Workbook
     
    Dim shtToCopy As Worksheet
     
    Set wkbSource = Workbooks.Open("fichier_B.xlsm")
    Set shtToCopy = wkbSource.Sheets("LMS 01")
     
    shtToCopy.Copy ThisWorkbook.Sheets(18)
    wkbSource.Close savechanges:=False

    Ca fait le job, mais pas de la manière dont je le souhaite exactement.
    Je précise que la feuille LMS 01 est bien copiée dans mon fichier A, mais je lui demande de la copier dans la feuille 18 et pourtant il me crée un feuille portant le nom LMS 01 avec toutes les données dedans.
    J'ai trifouillé dans tous les sens sans succès, quelqu'un aurait une idée afin que le contenu de la feuille LMS 01 du fichier A soit copié dans la feuille 18 du fichier B ?

    Vous remerciant par avance pour votre aide,

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Essais ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     Workbook("Fichier_A").Sheets("LMS 01").Range("A1:S1").Copy Destination:=Workbook("Fichier_B").Sheets("Feuille18").Range("A1:S1")
    Normalement tu peux supprimer le Range.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut
    Hey,

    Merci pour ta réponse,

    J'avais déja essayé ça, je viens de retenter mais il me met ça :

    erreur de compilation
    sub ou function non définie (en pointant sur le 2eme workbook)

    Il ne manque pas de end sub ou autre je te rassure =)

  4. #4
    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,
    Citation Envoyé par had4789 Voir le message
    Essais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Workbook("Fichier_A").Sheets("LMS 01").Range("A1:S1").Copy Destination:=Workbook("Fichier_B").Sheets("Feuille18").Range("A1:S1")
    Normalement tu peux supprimer le Range.
    Attention que c'est Workbooks et pas Workbook
    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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut
    Exact !
    Merci j'ai corrigé maintenant, mais là je me retrouve avec la même erreur que j'ai pu avoir :
    Erreur d'exécution 9
    L'indice n'appartient pas à la sélection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks("path_to\fichier_B.xlsm").Sheets("LMS 01").Copy Destination:=Workbooks("path_to\fichier_A.xlsm").Sheets("Feuil18")
    Comme s'il ne connaissait pas ma 'feuil18' ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Pardon pour l'oublie des S,

    Tu as essayer en appelant ta feuille autrement par exemple au lieu de Feuil18 tu écris A?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut
    Oui la feuille s'appelle "TMP" du coup que j'utilise Feuil18 ou TMP c'est le même comportement. C'est comme s'il cherchait cette feuille dans mon fichier B alors que je lui dis clairement de copier dans le workbook(fichier_A).
    C'est à cause de ça que j'étais parti sur une autre solution (le code copié dans le premier post)

  8. #8
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Essais avec sheets(x) en remplaçant le x par le numéro de ta feuille dans ton fichier b

  9. #9
    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,
    Es-tu certain que le classeur cible est ouvert, parce-que l'erreur 9 est l'erreur renvoyée dans ce cas là et de plus, il n'y a pas d'argument nommé Destination pour la copie de feuille mais seulement pour la copie de plage de cellules.
    La syntaxe est (à condition que les deux classeurs soient ouverts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Toto").Worksheets("DataBase").Copy Workbooks("classeur2").Worksheets("Feuil2")
    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

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut
    Alors pour sheets je viens d'essayer c'est toujours pareil

    Concernant ta réponse Philippe :
    Oui les fichiers excel sont ouverts, je fais bien un Workbooks.Open du fichier source, et le cible est le fichier excel depuis lequel j'exécute ce code (via bouton du ruban) de fait il est également ouvert.
    j'ai tenté sans le "destination", en indiquant soit le numéro de la feuille, soit son nom, et rien à faire toujours la même erreur :/

    J'ai bien repris ton code en l'adaptant à mon cas et ça me donne le même résultat.. en bloquant bien sur cette ligne avec l'erreur indiquée..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks("d:\Users\mattlovelara\Desktop\test suivis penalités\test suivis pénalité par site par mois.xlsm").Worksheets("LMS 01").Copy Workbooks("d:\Users\mattlovelara\Desktop\test suivis penalités\Fichier pour évolution suivi pénalités synthese.xlsm").Worksheets("TMP")

  11. #11
    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,
    Quand un classeur est ouvert, c'est le nom du classeur suivi de son suffixe et pas le FullName (pas le Path)
    [EDIT]
    Exécute cette petite procédure et tu auras la liste de tous les classeurs ouverts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub WkbList()
     Dim wkb As Workbook
     For Each wkb In Workbooks
      MsgBox wkb.Name
     Next
    End Sub
    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

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut
    Super ! belle avancée en effet ça ne plante plus !

    Néanmoins, j'obtiens le même comportement qu'avec le premier code copié à l'origine, c'est à dire que la feuille LMS 01 est copiée et rajoutée dans le fichier excel de destination, et non pas dans la feuille TMP du fichier excel de destination.

    Voici le code exécuté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks("test suivis pénalité par site par mois.xlsm").Worksheets("LMS 01").Copy Workbooks("Fichier pour évolution suivi pénalités synthese.xlsm").Worksheets("TMP")
    Je lui précise pourtant bien le worksheets("TMP") .. ?

  13. #13
    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,
    Néanmoins, j'obtiens le même comportement qu'avec le premier code copié à l'origine, c'est à dire que la feuille LMS 01 est copiée et rajoutée dans le fichier excel de destination, et non pas dans la feuille TMP du fichier excel de destination.
    C'est tout à fait normal, tu copies une feuille donc une feuille s'insère dans un classeur. Si tu veux copier une plage de cellules dans une feuille alors c'est
    Exemple pour une copie de la plage A2:F10 de la feuille DataBase du classeur où se trouve le code VBA vers la cellule A2 de la feuille Feuil2 du classeur classeur2 et là effectivement il y a bien un argument nommé Destination qu'il n'est pas obligatoire de préciser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub copyRange()
     ThisWorkbook.Worksheets("DataBase").Range("A2:F10").Copy Workbooks("classeur2").Worksheets("Feuil2").Range("A2")
    End Sub
    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

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut
    Effectivement !
    Merci beaucoup pour l'aide, ça fonctionne très bien ainsi et répond tout à fait à ma demande.

    J'ai une petite question légèrement différente, peut-être saura tu m'aider avant de créer un nouveau post, j'ai du code pour ajouter une ligne à la fin d'un tableau existant, ça fonctionne néanmoins la ligne est inclus en AVANT DERNIERE et non pas dernière dans le tableau :

    j'utilise pourtant ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Feuil1.Range("TabAccFam").Rows.End(xlDown).Insert
    A tout hasard, as-tu une explication ?

  15. #15
    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,
    Merci beaucoup pour l'aide, ça fonctionne très bien ainsi et répond tout à fait à ma demande.
    A tout hasard, tu as une fonction toute faites pour copier une plage vers une autre dans cette contribution Regrouper plusieurs feuilles sur une autre. (2003-2010) .

    J'ai une petite question légèrement différente, peut-être saura tu m'aider avant de créer un nouveau post, j'ai du code pour ajouter une ligne à la fin d'un tableau existant, ça fonctionne néanmoins la ligne est inclus en AVANT DERNIERE et non pas dernière dans le tableau :
    Il faudrait d'abord savoir quelle est l'adresse de la plage ou cellule nommée TabAccFam mais quand tu insères une ligne, excel insère toujours une ligne au-dessus donc tu devrais ajouter 1
    Que veux tu faire exactement ?
    Insérer une ligne parce-que tu as un autre tableaux en-dessous
    Pour connaître la ligne qu'il va insérée modifie ta ligne de code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Feuil1.Range("TabAccFam").Rows.End(xlDown).Row
    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

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut
    Merci pour ta réponse

    Pour être plus précis, TabAccFam est un tableau dans une feuille qui contient X tableau les uns après les autres donc la dernière ligne d'un tableau se trouve au dessus de la première ligne d'un autre.
    De fait j'ai un bouton me permettant de rajouter une ligne dans chacun des tableaux, et j'aimerais qu'il ajoute cette ligne toujours à la fin du tableau.
    Mon bouton actuel insert la ligne, mais toujours en avant dernière.

    Tu pense qu'il faut donc que je lui demande d'insérer la ligne précisément à la valeur <nombre total de lignes dans mon tableau + 1> ?

  17. #17
    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,
    Tu pense qu'il faut donc que je lui demande d'insérer la ligne précisément à la valeur <nombre total de lignes dans mon tableau + 1> ?
    A ton avis ?
    Je crois t'avoir tout expliqué dans ma réponse
    Si tu sélectionnes manuellement un ligne ayant des données à la ligne précédente et suivante et que tu fais un clic droit et sélectionnes Insérer que constates-tu ?
    Faire le test est répondre à ta question
    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

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut
    Bon test, en effet l'insertion a toujours lieu au dessus.

    Et afficher le msgbox que tu m'a indiqué me donne bien la derniere ligne du tableau concerné, donc + 1 celle d'après.
    L'idée est donc maintenant d'insérer une ligne en précisant ce numéro de ligne là. Je cherche comment préciser à quelle numéro de ligne on veut insérer une ligne ()
    Une nouvelle fois merci Philippe

  19. #19
    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 tu sais comment calculer la dernière ligne d'un tableau, j'imagine que ce ne doit être difficile de faire une addition ou alors c'est à désespérer.
    Un peu de lecture sur la FAQ (spécialement le chapitre consacré aux cellules) http://excel.developpez.com/faq/?page=Cellule
    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

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Par défaut
    Mon soucis n'est plus de trouver la derniere ligne + 1 mais de le spécifier en paramètre du "insert" =) , c'est plutot de syntaxe dont il s'agit maintenant.

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

Discussions similaires

  1. [XL-2010] Boucle d'identification + copier-coller entre deux feuilles
    Par scratos dans le forum Excel
    Réponses: 4
    Dernier message: 25/02/2015, 11h29
  2. [XL-2007] Copier plusieurs feuilles de plusieurs fichier dans une seule feuille
    Par QcSylvanio dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/10/2012, 22h02
  3. Copier coller entre deux feuilles
    Par charlesveillet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/08/2012, 10h59
  4. Copier coller entre deux fichiers excel par macro
    Par miss-o-21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2009, 14h45
  5. enregistrer certaines feuilles d'un fichier dans un nouveau
    Par nouha_79 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 17/08/2007, 11h54

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