Copier la feuille VBA / Copier la feuille dans un autre classeur

Ce didacticiel expliquera comment copier une feuille ou une feuille de calcul à l'aide de VBA.

Copier la feuille de calcul dans le nouveau classeur

Pour copier une feuille de calcul dans un nouveau classeur :

1 Feuilles("Feuille1").Copier

Copier ActiveSheet dans un nouveau classeur

Pour copier l'ActiveSheet dans un nouveau classeur :

1 ActiveSheet.Copy

Copier plusieurs feuilles dans un nouveau classeur

Pour copier plusieurs feuilles dans un nouveau classeur :

1 ActiveWindow.SelectedSheets.Copy

Copier la feuille dans le même classeur

Nous avons commencé par vous montrer l'exemple de copie de feuilles le plus simple : copier des feuilles dans un nouveau classeur. Ces exemples ci-dessous vous montreront comment copier une feuille dans le même classeur. Lors de la copie d'une feuille dans un classeur, vous devez spécifier un emplacement. Pour spécifier un emplacement, vous direz à VBA de déplacer la feuille de travail AVANT ou APRÈS une autre feuille de travail.

Copier la feuille avant une autre feuille

Ici, nous allons spécifier de copier et coller la feuille avant Sheet2

1 Sheets("Sheet1").Copier avant :=Sheets("Sheet2")

Copier la feuille avant la première feuille

Au lieu de spécifier le nom de la feuille, vous pouvez également spécifier la position de la feuille. Ici, nous copions et collons une feuille avant la première feuille du classeur.

1 Feuilles("Feuille1").Copier avant :=Feuilles(1)

La feuille nouvellement créée sera désormais la première feuille du classeur.

Copier la feuille après la dernière feuille

Utilisez la propriété After pour dire à VBA de coller la feuille APRÈS une autre feuille. Ici, nous allons copier et coller une feuille après la dernière feuille du classeur :

1 Sheets("Sheet1").Copier après :=Sheets(Sheets.Count)

Notez que nous avons utilisé Sheets.Count pour compter le nombre de feuilles dans le classeur.

Déplacer la feuille

Vous pouvez également déplacer une feuille dans un classeur en utilisant une syntaxe similaire. Ce code déplacera Sheet1 à la fin du classeur :

1 Sheets("Sheet1").Déplacer après :=Sheets(Sheets.Count)

Copie et feuille de nom

Après avoir copié et collé une feuille, la feuille nouvellement créée devient la feuille active. Donc, pour renommer notre nouvelle feuille, utilisez simplement ActiveSheet.Name :

123456 Sub CopySheetRename1()Sheets("Sheet1").Copier après :=Sheets(Sheets.Count)ActiveSheet.Name = "LastSheet"Fin du sous-marin

Si le nom de la feuille existe déjà, le code ci-dessus générera une erreur. Au lieu de cela, nous pouvons utiliser « On Error Resume Next » pour dire à VBA d'ignorer le nom de la feuille et de poursuivre le reste de la procédure :

12345678 Sub CopySheetRename2()Sheets("Sheet1").Copier après :=Sheets(Sheets.Count)En cas d'erreur Reprendre ensuiteActiveSheet.Name = "LastSheet"En cas d'erreur GoTo 0Fin du sous-marin

Ou utilisez notre fonction RangeExists pour tester si le nom de la feuille existe déjà avant d'essayer de copier la feuille :

123456789101112131415161718 Sub CopySheetRename3()Si RangeExists("LastSheet") AlorsMsgBox "La feuille existe déjà."AutreSheets("Sheet1").Copier après :=Sheets(Sheets.Count)ActiveSheet.Name = "LastSheet"Fin siFin du sous-marinFunction RangeExists (WhatSheet As String, Facultatif ByVal WhatRange As String = "A1") As BooleanTest de gradation en tant que plageEn cas d'erreur Reprendre ensuiteDéfinir le test = ActiveWorkbook.Sheets(WhatSheet).Range(WhatRange)RangeExists = Err.Number = 0En cas d'erreur GoTo 0Fonction de fin

Copie et feuille de nom en fonction de la valeur de la cellule

Vous pouvez également vouloir copier et nommer une feuille en fonction d'une valeur de cellule. Ce code nommera la feuille de calcul en fonction de la valeur de la cellule en A1

12345678 Sub CopySheetRenameFromCell()Sheets("Sheet1").Copier après :=Sheets(Sheets.Count)En cas d'erreur Reprendre ensuiteActiveSheet.Name = Range("A1").ValeurEn cas d'erreur GoTo 0Fin du sous-marin

Copier la feuille de calcul dans un autre classeur

Jusqu'à présent, nous avons travaillé avec la copie de feuilles dans un classeur. Nous allons maintenant couvrir des exemples pour copier et coller des feuilles dans d'autres classeurs. Ce code copiera une feuille au début d'un autre classeur :

1 Sheets("Sheet1").Copier avant :=Workbooks("Example.xlsm").Sheets(1)

Cela copiera une feuille de calcul à la fin d'un autre classeur.

1 Sheets("Sheet1").Copier après :=Workbooks("Example.xlsm").Sheets(Workbooks("Example.xlsm").Sheets.Count)

Remarquez que nous avons remplacé 1 avec Classeurs ("Example.xlsm").Sheets.Count pour obtenir la dernière feuille de travail.

Copier la feuille de calcul dans un classeur fermé

Vous pouvez également vouloir copier une feuille de calcul dans un classeur fermé. Ce code ouvrira un classeur fermé afin que vous puissiez y copier une feuille.

123456789 Sous CopySheetToClosedWB()Application.ScreenUpdating = FauxDéfinir closedBook = Workbooks.Open("D:\Dropbox\excel\articles\example.xlsm")Feuilles("Feuille1").Copier avant :=Livre fermé.Feuilles(1)closedBook.Close SaveChanges:=TrueApplication.ScreenUpdating = TrueFin du sous-marin

Copier la feuille d'un autre classeur sans l'ouvrir

Inversement, ce code copiera une feuille de calcul À PARTIR d'un classeur fermé sans que vous ayez besoin d'ouvrir manuellement le classeur.

123456789 Sous CopySheetFromClosedWB()Application.ScreenUpdating = FauxDéfinir closedBook = Workbooks.Open("D:\Dropbox\excel\articles\example.xlsm")CloseBook.Sheets("Sheet1").Copy Before:=ThisWorkbook.Sheets(1)CloseBook.Close SaveChanges:=FalseApplication.ScreenUpdating = TrueFin du sous-marin

Notez que dans ces deux exemples, nous avons désactivé ScreenUpdating afin que le processus s'exécute en arrière-plan.

Dupliquer une feuille Excel plusieurs fois

Vous pouvez également dupliquer une feuille Excel plusieurs fois en utilisant une boucle.

1234567891011121314 Sous CopySheetMultipleTimes()Dim n en tant qu'entierDiminuer en tant qu'entierEn cas d'erreur Reprendre ensuiten = InputBox("Combien de copies voulez-vous faire ?")Si n > 0 AlorsPour i = 1 à nActiveSheet.Copy After :=ActiveWorkbook.Sheets(Worksheets.Count)ProchainFin siFin du sous-marin

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave