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 :

Boucle : copier des feuilles à partir de plusieurs classeurs / coller dans un classeur unique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut Boucle : copier des feuilles à partir de plusieurs classeurs / coller dans un classeur unique
    Bonjour !

    Je travaille à partir de 40 fichiers : tous ont la même organisation, le même nombre de feuilles, dans le même ordre, avec les mêmes noms, etc.
    Pour l'exemple je dirais que cela correspond aux rapports financiers de plusieurs boutiques d'une même chaîne.

    Dans chaque classeur boutique, je souhaite extraire la feuille qui correspond au budget de communication. Cette feuille s'appelle "COM".

    Je souhaite ensuite consolider toutes les feuilles "COM" de chaque boutique dans un classeur unique qui s'appelle "Rapport COM".
    Chaque feuille du classeur correspondra donc au budget communication d'une boutique.

    Dans mon classeur de destination (qui est le classeur sur lequel se trouve la macro que j'ai écrite), j'ai créé une première feuille sur laquelle je trouve :
    en cellule B3 : le chemin d'accès de mon dossier dans lequel se trouvent les 40 fichiers source, classés par zone
    en cellules B7 à B19 : les noms des fichiers source classés par "importance" (il est crucial que cet ordre soit respecté lors du copié/collé afin que les feuilles/budgets se suivent dans l'ordre désiré)

    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
    18
    19
    20
    21
    22
    Sub CopyCOM()
     
    WS_Count = ThisWorkbook.Worksheets.Count 'Compte le nombre de feuilles du classeur de destination
     
    ThisWorkbook.Sheets(1).Select 'Feuille de paramètrage du classeur de destination
     
    For i = 7 To 19 'Lignes dans lesquelles sont écrits les noms des fichiers source
     For j = 1 To WS_Count 'Dans le but de trouver la dernière feuille du classeur de destination
     
    PathName = ThisWorkbook.Sheets(1).Range("B3").Value 'Chemin d'accès des fichiers source type 'C:\Local\Budgets\2018\Zone1\
    Filename = ThisWorkbook.Sheets(1).Range("B" & i).Value 'Lignes dans lesquelles sont écrits les noms des fichiers source
     
    Workbooks.Open Filename:=PathName & Filename, UpdateLinks:=False 'J'ouvre les fichiers sources tour à tour
     
    Workbooks(Filename).Sheets("COM").Copy After:=ThisWorkbook.Sheets(j) 'Je copie la feuille COM dans le fichier source et je la colle à la suite de la dernière feuille du classeur de destination
     
    Workbooks(Filename).Close False 'Je ferme le fichier source en cours
     
     Next j 'Ma "nouvelle" dernière feuille du classeur de destination puisque je viens d'en coller une à la suite de la précédente
    Next i 'Je passe au fichier source suivant
     
    End Sub
    Il y a un problème dans cette macro : certaines boutiques sont collées en double voir triple alors que d'autres ne sont même pas récupérées et l'ordre établi dans les lignes 7 à 19 n'est pas respecté. Je pense que j'ai mal utilisé le WS_Count mais je n'arrive pas à trouver mon erreur (j'ai fais mes premiers pas dans VBA il y a quelques mois seulement et j'apprends totalement en autodidate à partir de forums, je ne suis donc pas du tout une pro... )

    N'hésitez pas à me poser des questions si je n'ai pas été claire dans mes explications...

    Merci d'avance !

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    pour commencer aussi débutant et autodidacte donc méfiez de mes propositions et à tester sur une copie de ton travail
    je crois que c'est nécessaire de compter les onglets donc la variable j est unitule
    Copy After:=Sheets(Sheets.Count) va copier automatiquement après la dernière feuille
    ce qui donne :

    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
    18
    19
    20
    Sub CopyCOM()
     
     
     
    ThisWorkbook.Sheets(1).Select 'Feuille de paramètrage du classeur de destination
     
    For i = 7 To 19 'Lignes dans lesquelles sont écrits les noms des fichiers source
     
    PathName = ThisWorkbook.Sheets(1).Range("B3").Value 'Chemin d'accès des fichiers source type 'C:\Local\Budgets\2018\Zone1\
    Filename = ThisWorkbook.Sheets(1).Range("B" & i).Value 'Lignes dans lesquelles sont écrits les noms des fichiers source
     
    Workbooks.Open Filename:=PathName & Filename, UpdateLinks:=False 'J'ouvre les fichiers sources tour à tour
     
    Workbooks(Filename).Sheets("COM").Copy After:=ThisWorkbook.=Sheets(Sheets.Count) 'Je copie la feuille COM dans le fichier source et je la colle à la suite de la dernière feuille du classeur de destination
     
    Workbooks(Filename).Close False 'Je ferme le fichier source en cours
     
    Next i 'Je passe au fichier source suivant
     
    End Sub

  3. #3
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut
    Bonjour BENNASR,

    Merci pour ton aide !

    Je pense que la clé se trouve dans ta suggestion mais cela ne fonctionnait pas, donc j'ai essayé ça :

    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
    18
    Sub CopyCOM()
     
    ThisWorkbook.Sheets(1).Select
     
    For i = 7 To 19
     
    PathName = ThisWorkbook.Sheets(1).Range("B3").Value
    Filename = ThisWorkbook.Sheets(1).Range("B" & i).Value
     
    Workbooks.Open Filename:=PathName & Filename, UpdateLinks:=False
     
    Workbooks(Filename).Sheets("COM").Copy After:=ThisWorkbook.Worksheets.Count
     
    Workbooks(Filename).Close False
     
    Next i
     
    End Sub
    Cela ne fonctionne toujours pas mais à mon avis c'est juste un problème d'écriture ou de syntaxe, car "ThisWorkbook.Worksheets.Count" revoie "2".

    Si tu as une autre idée de combinaison, n'hésite pas !

  4. #4
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut
    J'ai essayé un mix des deux et ça "fonctionne", le seul soucis est que la macro ne colle pas la dernière feuille... :'(

    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
    18
    Sub CopyCOM()
     
    ThisWorkbook.Sheets(1).Select
     
    For i = 7 To 19
     
    PathName = ThisWorkbook.Sheets(1).Range("B3").Value
    Filename = ThisWorkbook.Sheets(1).Range("B" & i).Value
     
    Workbooks.Open Filename:=PathName & Filename, UpdateLinks:=False
     
    Workbooks(Filename).Sheets("COM").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Worksheets.Count)
     
    Workbooks(Filename).Close False
     
    Next i
     
    End Sub

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    il se peux que les adresse sont de 7 à 20 et non pas de 7 à 19 !!
    essayer avec

  6. #6
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut
    BENNASR,

    Merci encore une fois !

    En fait j'ai trouvé l'erreur : il se trouve que la feuille à copier était masquée dans le dernier fichier... Ce n'est donc pas un soucis de la macro !

    Je passe le post en "Résolu".

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

Discussions similaires

  1. Copier - coller des feuilles excel entre plusieurs classeurs
    Par DodoCanada dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/04/2014, 20h58
  2. [XL-2003] copier des feuilles dans nouveau classeur
    Par JohnNC115 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2011, 08h25
  3. Copier des données d'un xls et coller dans le workbook
    Par baleiney dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/08/2009, 17h11
  4. copier des plages variables de plusieurs feuilles vers une seule
    Par irene15 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 22/06/2007, 13h44
  5. Réponses: 2
    Dernier message: 26/01/2007, 14h58

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