web-dev-qa-db-fra.com

Copier une feuille de calcul entière dans une nouvelle feuille de calcul dans Excel 2010

J'ai trouvé des questions similaires sur la copie d'une feuille de calcul entière dans un classeur et son collage dans un autre, mais je souhaite simplement copier une feuille de calcul entière et la coller dans une nouvelle feuille de travail, dans le même classeur. 

Je suis en train de convertir un fichier .xls 2003 en 2010 .xlsm et l'ancienne méthode utilisée pour copier et coller entre des feuilles de calcul ne se colle pas avec les hauteurs de ligne correctes. Ma première solution consistait à parcourir chaque ligne et à saisir les hauteurs de ligne de la feuille de calcul à partir de laquelle je copie, puis à insérer et insérer les valeurs correspondant aux hauteurs de ligne dans la feuille de calcul à laquelle je colle, feuille contient des boutons qui génèrent de nouvelles lignes, ce qui modifie la numérotation des lignes et le format de la feuille est tel que toutes les lignes ne peuvent pas avoir une seule largeur. 

Ce que j'aimerais vraiment pouvoir faire, c'est simplement copier la feuille de calcul entière et la coller. Voici le code de la version 2003:

ThisWorkbook.Worksheets("Master").Cells.Copy
newWorksheet.Paste

Je suis surpris que la conversion au format .xlsm provoque cette interruption. Toute suggestion ou idée serait géniale.

21
winnicki

Il est plus simple de lancer une copie exacte comme ci-dessous pour la placer comme dernière feuille

Sub Test()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Master")
ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
End Sub
35
brettdj
ThisWorkbook.Worksheets("Master").Sheet1.Cells.Copy _
    Destination:=newWorksheet.Cells

Ce qui précède va copier les cellules. Si vous voulez vraiment dupliquer la feuille entière, alors j'utiliserais la réponse de @ brettdj .

17
' Assume that the code name the worksheet is Sheet1

' Copy the sheet using code name and put in the end.
' Note: Using the code name lets the user rename the worksheet without breaking the VBA code
Sheet1.Copy After:=Sheets(Sheets.Count)

' Rename the copied sheet keeping the same name and appending a string " copied"
ActiveSheet.Name = Sheet1.Name & " copied"
7
thanos.a

J'ai vraiment aimé le code de @ brettdj, mais j'ai ensuite constaté que lorsque j'ajoutais du code supplémentaire pour modifier la copie, il remplaçait ma feuille d'origine. J'ai peaufiné sa réponse pour qu'un code supplémentaire pointé sur ws1 affecte la nouvelle feuille plutôt que l'original.

Sub Test()
    Dim ws1 as Worksheet
    ThisWorkbook.Worksheets("Master").Copy
    Set ws1 = ThisWorkbook.Worksheets("Master (2)")
End Sub
2
S M Perron
'Make the Excel file that runs the software the active workbook
ThisWorkbook.Activate

'The first sheet used as a temporary place to hold the data 
ThisWorkbook.Worksheets(1).Cells.Copy

'Create a new Excel workbook
Dim NewCaseFile As Workbook
Dim strFileName As String

Set NewCaseFile = Workbooks.Add
With NewCaseFile
    Sheets(1).Select
    Cells(1, 1).Select
End With

ActiveSheet.Paste
1
shanxiang shen

Si vous avez, comme moi, un classeur d’estimation avec un nombre par défaut de feuilles de tarification visibles, un récapitulatif et un plus grand nombre de feuilles de calcul masquées et "protégées" contenant des données sensibles, mais pouvant avoir besoin de créer des feuilles de calcul visibles supplémentaires pour obtenir un résultat correct. prix, j’ai une variante des réponses ci-dessus qui crée lesdites feuilles de travail visibles sur la base d’un "maître" caché protégé. J'ai utilisé le code fourni par @/jean-fran% c3% a7ois-corbett et @ thanos-a en combinaison avec VBA simple, comme indiqué ci-dessous.

Sous sbInsertWorksheetAfter ()

    'This adds a new visible worksheet after the last visible worksheet

    ThisWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)

    'This copies the content of the HIDDEN "Master" worksheet to the new VISIBLE ActiveSheet just created

    ThisWorkbook.Sheets("Master").Cells.Copy _
        Destination:=ActiveSheet.Cells

    'This gives the the new ActiveSheet a default name

    With ActiveSheet
        .Name = Sheet12.Name & " copied"
    End With

    'This changes the name of the ActiveSheet to the user's preference

    Dim sheetname As String

    With ActiveSheet
        sheetname = InputBox("Enter name of this Worksheet")
        .Name = sheetname
    End With

End Sub

0
Maccus