Comment copier des feuilles dans un autre classeur en utilisant vba?

Donc, ce que je veux faire, en général, est de faire une copie d'un classeur. Cependant, le classeur source exécute mes macros, et je veux qu'il fasse une copie identique de lui-même, mais sans les macros. Je pense qu'il devrait y avoir un moyen simple de faire ça avec VBA, mais je dois encore le trouver. J'envisage de copier les feuilles une par une dans le nouveau classeur, que je vais créer. Comment puis-je faire? Est-il un meilleur moyen?

19
demandé sur Community 2011-07-28 22:34:58

8 réponses

Quelqu'un Ozgrid répondu à une question similaire. En gros, vous n'avez qu'à copier chaque feuille une à la fois de Workbook1 à Workbook2.

Sub CopyWorkbook()

    Dim currentSheet as Worksheet
    Dim sheetIndex as Integer
    sheetIndex = 1

    For Each currentSheet in Worksheets

        Windows("SOURCE WORKBOOK").Activate 
        currentSheet.Select
        currentSheet.Copy Before:=Workbooks("TARGET WORKBOOK").Sheets(sheetIndex) 

        sheetIndex = sheetIndex + 1

    Next currentSheet

End Sub

Disclaimer: Je n'ai pas essayé ce code et au lieu de cela j'ai juste adopté l'exemple lié à votre problème. Si rien d'autre, il devrait vous conduire à votre solution.

27
répondu Chris Flynn 2013-03-10 15:48:02
Sub CopyWorkbook()

Dim sh as Worksheet,  wb as workbook

Set wb = workbooks("Target workbook")
For Each sh in workbooks("source workbook").Worksheets
   sh.Copy After:=wb.Sheets(wb.sheets.count) 
Next sh

End Sub

Edit: vous pouvez aussi construire un tableau de noms de feuilles et les copier immédiatement.

Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _
         After:=wb.Sheets(wb.sheets.count)
45
répondu Patrick Honorez 2018-08-02 08:29:14

vous pourriez sauver xlsx. Ensuite, vous perdrez les macros et de générer un nouveau classeur avec un peu moins de travail.

ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
10
répondu Brad 2011-07-28 20:55:54

j'ai pu copier toutes les feuilles dans un classeur qui avait une application vba en cours d'exécution, vers un nouveau classeur avec les macros de l'application, avec:

ActiveWorkbook.Sheets.Copy
4
répondu George Ziniewicz 2014-02-28 18:10:50

en supposant que toutes vos macros sont en modules, peut-être ce lien de l'aide. Après avoir copié le classeur, il suffit d'itérer sur chaque module et de le supprimer

2
répondu raven 2018-05-08 21:48:18

Essayez ceci à la place.

Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    ws.Copy
Next
2
répondu Ch3knraz3 2015-12-08 00:22:59

Vous pouvez simplement écrire

Worksheets.Copy

au lieu de lancer un cycle. Par défaut, la feuille de travail est reproduite dans un nouveau cahier.

il est prouvé qu'il fonctionne dans la version 2010 de XL.

2
répondu Hors2force 2017-06-05 09:41:43
    Workbooks.Open Filename:="Path(Ex: C:\Reports\ClientWiseReport.xls)"ReadOnly:=True


    For Each Sheet In ActiveWorkbook.Sheets

        Sheet.Copy After:=ThisWorkbook.Sheets(1)

    Next Sheet
0
répondu Sainath J 2013-02-22 11:39:34