Comment copier et déplacer une feuille en utilisant VBA ?
Vous pouvez copier et déplacer une feuille dans Excel à l’aide d’un code VBA, et dans ce didacticiel, nous apprendrons différentes façons de le faire.
Copier une feuille dans le même classeur
Si vous souhaitez copier une feuille dans le même classeur, vous pouvez utiliser le code suivant où vous avez utilisé la méthode de copie.
Sheets("Sheet5").Copy Before:=Sheets(1)
Dans ce code, feuille1 est la première feuille du classeur, et lorsque vous exécutez ce code, il copie la feuille avec le nom « Feuille5 » avant la première feuille du classeur.
Et si vous voulez le copier après la première feuille, le code serait le suivant.
Sheets("Sheet5").Copy After:=Sheets(1)
Et si vous voulez le copier après la première feuille, le code serait comme suit.
Sheets("Sheet5").Copy Before:=Sheets("Sheet3")
Sheets("Sheet5").Copy After:=Sheets("Sheet3")
Lorsque vous exécutez ce code VBA, il copie le « Sheet5 » avant et après le « Sheet3 ».
Avec la ligne de code suivante, vous pouvez copier une feuille après la dernière feuille du classeur. Il utilise le sheet.count pour obtenir le nombre de feuilles, puis utilise le nombre pour copier la feuille en dernier.
Sheets("myNewSheet").Move After:=Sheets(Sheets.Count)
Liens utiles : Exécuter une macro – Enregistreur de macros – Visual Basic Editor – Manuel de macros personnelles
Copier une feuille dans le même classeur avec un nouveau nom
Et si vous voulez copier une feuille et ensuite la renommer instantanément, vous devez utiliser la propriété name, tout comme le code suivant.
Sheets("Sheet5").Move Before:=Sheets(1)
ActiveSheet.Name = "myNewSheet"
Déplacer une feuille dans le même classeur
Pour déplacer une feuille dans le même classeur, vous devez utiliser la méthode de déplacement comme vous l’avez dans le code suivant.
Sheets("Sheet5").Move After:=Sheets(1)
Ce code déplacera « Sheet5 » avant « Sheet2 » comme vous pouvez le voir dans l’instantané ci-dessus.
Copier une feuille dans le nouveau classeur
Lorsque vous utilisez la méthode de copie sans définir de feuille dans le classeur en cours, VBA ouvre un nouveau classeur et copie cette feuille dans ce classeur.
Sheets("Sheet5").Copy
Et pour déplacer une feuille vers un nouveau classeur.
Sheets("Sheet5").Move
Copier plusieurs feuilles dans le nouveau classeur
Si vous souhaitez ajouter plusieurs feuilles au nouveau classeur en une seule fois, utilisez un code comme celui-ci.
Sheets(Array("Sheet2", "Sheet3", "Sheet4", "Sheet5")).Copy
Le code ci-dessus crée un tableau des feuilles, puis les copie toutes dans un nouveau classeur.
Copier une feuille dans un autre classeur
Si vous souhaitez copier une feuille dans un autre classeur déjà ouvert, vous pouvez mentionner le nom du classeur après ou avant l’argument.
Sheets("Sheet1").Copy Before:=Workbooks("Book1.xlsx").Sheets(1)
Le code ci-dessus copie Sheet1 à partir du classeur actif et l’ajoute avant la première feuille de Book1.xlsx qui est déjà ouverte.
Et si vous voulez le déplacer.
Sheets("Sheet1").Move Before:=Workbooks("Book1.xlsx").Sheets(1)
Copier une feuille dans un classeur fermé
Il existe un moyen de copier une feuille dans un classeur fermé et vous n’avez pas besoin de l’ouvrir. Regardez le code ci-dessous.
Sub vba_copy_sheet()
Dim mybook As Workbook
Application.ScreenUpdating = False
Set mybook = _
Workbooks.Open _
("C:UsersDellDesktopsamplefile.xlsx")
Workbooks("Book1.xlsx").Sheets("Sheet2").Copy Before:=mybook.Sheets(1)
mybook.Close SaveChanges:=True
Application.ScreenUpdating = True
End Sub
Dans ce code, vous avez la variable myBook puis un classeur qui lui est assigné. Nous avons désactivé la mise à jour de l’écran afin que le code puisse effectuer la tâche au niveau du backend.
Copier une feuille d’un autre classeur sans l’ouvrir
De la même manière, vous pouvez copier et déplacer une feuille d’un classeur fermé. Regardez le code ci-dessous.
Sub vba_copy_sheet()
Dim mybook As Workbook
Application.ScreenUpdating = False
Set mybook = _
Workbooks.Open _
("C:UsersDellDesktopsamplefile.xlsx")
mybook.Sheets("mySheet").Copy Before:=Workbooks("Book1.xlsx").Sheets(1)
mybook.Close SaveChanges:=True
Application.ScreenUpdating = True
End Sub