web-dev-qa-db-fra.com

Comment copier les feuilles dans un autre classeur à l'aide de vba?

Donc, ce que je veux faire, en général, est de copier un cahier de travail. Toutefois, le classeur source exécute mes macros et je souhaite qu'il en fasse une copie identique, mais sans les macros. Je pense qu'il devrait exister un moyen simple de faire cela avec VBA, mais je ne l'ai pas encore trouvé. J'envisage de copier les feuilles une à une dans le nouveau cahier que je vais créer. Comment je ferais ça? Y a-t-il un meilleur moyen?

20
Brian

Quelqu'un de Ozgrid a répondu à une question similaire. En gros, vous copiez simplement chaque feuille 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

Clause de non-responsabilité: je n'ai pas encore essayé ce code et j'ai simplement adopté l'exemple lié à votre problème. Si rien d'autre, cela devrait vous conduire vers la solution souhaitée.

29
Chris Flynn

Je voudrais réécrire légèrement la réponse de keytarhero:

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

Modifier: Vous pouvez également créer un tableau de noms de feuilles et le copier en une fois.

Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _
         After:=wb.Sheets(wb.sheets.count)

Remarque : copier une feuille à partir d'un fichier XLS? à un XLS entraînera une erreur. Le contraire fonctionne très bien (XLS à XLSX)

47
Patrick Honorez

Vous pouvez enregistrer As xlsx. Ensuite, vous perdrez les macros et générerez un nouveau classeur avec un peu moins de travail.

ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
12
Brad

J'ai pu copier toutes les feuilles d'un classeur dans lequel une application vba était en cours d'exécution, dans un nouveau classeur sans les macros de l'application, avec:

ActiveWorkbook.Sheets.Copy
5
George Ziniewicz

En supposant que toutes vos macros soient dans des modules, peut-être ce lien aidera Après avoir copié le classeur, il suffit de parcourir chaque module et de le supprimer.

2
raven

Vous pouvez simplement écrire

Worksheets.Copy

au lieu d'exécuter un cycle . Par défaut, la collection de feuilles de calcul est reproduite dans un nouveau classeur.

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

2
Hors2force

Essayez ceci à la place.

Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    ws.Copy
Next
2
Ch3knraz3
    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
Sainath J