VBA Copier une Feuille de Calcul

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

David Gagnon

Last updated on août 22, 2022

Ce tutoriel explique comment copier une feuille ou une feuille de calcul à l’aide de VBA.

Copier une Feuille de Calcul dans un Nouveau Classeur

Pour copier une feuille de calcul dans un nouveau classeur:

Sheets("Feuil1").Copy

Copie de la Feuille Active dans un Nouveau Classeur

Pour copier la feuille active dans un nouveau classeur :

ActiveSheet.Copy

Copie de Plusieurs Feuilles dans un Nouveau Classeur

Pour copier plusieurs feuilles dans un nouveau classeur :

ActiveWindow.SelectedSheets.Copy

Copier une Feuille dans un Même Classeur

Nous avons commencé par vous montrer l’exemple le plus simple de copie de feuilles : copier une ou plusieurs feuilles dans un nouveau classeur. Les exemples ci-dessous vous montrent comment copier une feuille au sein d’un même classeur. Lorsque vous copiez une feuille dans un classeur, vous devez spécifier un emplacement. Pour spécifier un emplacement, vous indiquerez à VBA de déplacer la feuille de calcul AVANT ou APRÈS une autre feuille de calcul.

Copier la feuille avant une autre feuille

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

Sheets("Feuil1").Copy Before:=Sheets("Feuil2")

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.

Sheets("Feuil1").Copy Before:=Sheets(1)

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

Copie de la Feuille après la Dernière Feuille

Utilisez la propriété After pour indiquer à 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 :

Sheets("Feuil1").Copy After:=Sheets(Sheets.Count)

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

Déplacer une Feuille

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

Sheets("Feuil1").Move After:=Sheets(Sheets.Count)

Copier et Nommer une Feuille

Après avoir copié et collé une feuille, la nouvelle feuille créée devient la feuille active. Ainsi, pour renommer notre nouvelle feuille, il suffit d’utiliser ActiveSheet.Name :

Sub CopierFeuilleRenommer1()

Sheets("Feuil1").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "DernièreFeuille"

End Sub

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 l’instruction « On Error Resume Next » pour indiquer à VBA d’ignorer le nom de la feuille et de poursuivre le reste de la procédure :

Sub CopierFeuilleRenommer2()

    Sheets("Feuil1").Copy After:=Sheets(Sheets.Count)
    On Error Resume Next
    ActiveSheet.Name = "DernièreFeuille"
    On Error GoTo 0

End Sub

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

Sub CopierFeuilleRenommer3()

    If PlageExiste("DernièreFeuille") Then
        MsgBox "La feuille existe déjà."
    Else
        Sheets("Feuil1").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "DernièreFeuille"
    End If

End Sub

Function PlageExiste(QuelleFeuille As String, Optional ByVal QuellePlage As String = "A1") As Boolean
    Dim test As Range
    On Error Resume Next
    Set test = ActiveWorkbook.Sheets(QuelleFeuille ).Range(QuellePlage)
    PlageExiste = Err.Number = 0
    On Error GoTo 0
End Function

Copier et Nommer une Feuille en Fonction de la Valeur d’une Cellule

Vous pouvez également vouloir copier et nommer une feuille en fonction de la valeur d’une cellule. Ce code va nommer la feuille de travail en fonction de la valeur de la cellule A1

Sub CopierFeuilleRenommerParCellule()

    Sheets("Feuil1").Copy After:=Sheets(Sheets.Count)
    On Error Resume Next
    ActiveSheet.Name = Range("A1").Value
    On Error GoTo 0

End Sub

Copier une Feuille de Calcul dans un Autre Classeur

Jusqu’à présent, nous avons travaillé sur la copie de feuilles de calcul dans un classeur. Nous allons maintenant aborder des exemples de copie et de collage de feuilles dans d’autres classeurs. Ce code permet de copier une feuille au début d’un autre classeur :

Sheets("Feuil1").Copy Before:=Workbooks("Exemple.xlsm").Sheets(1)

Ceci copiera une feuille de calcul à la fin d’un autre classeur.

Sheets("Feuil1").Copy After:=Workbooks("Exemple.xlsm").Sheets(Workbooks("Exemple.xlsm").Sheets.Count)

Remarquez que nous avons remplacé 1 par Workbooks(« Exemple.xlsm »).Sheets.Count pour obtenir la dernière feuille de calcul.

Copie d’une Feuille de Calcul dans un Classeur Fermé

Vous pouvez également souhaiter copier une feuille de travail dans un classeur fermé. Ce code ouvre un classeur fermé afin que vous puissiez y copier une feuille.

Sub CopierFeuilleDansClasseurFermé()
Application.ScreenUpdating = False

    Set classeurFermé = Workbooks.Open("D:\Dropbox\excel\articles\exemple.xlsm")
    Sheets("Feuil1").Copy Before:=classeurFermé.Sheets(1)
    classeurFermé.Close SaveChanges:=True

Application.ScreenUpdating = True
End Sub

Copier la Feuille d’un Autre Classeur sans l’Ouvrir

À l’inverse, ce code permet de copier une feuille de calcul À PARTIR d’un classeur fermé sans que vous ayez besoin d’ouvrir manuellement le classeur.

Sub CopierFeuilleDuClasseurFermé()
Application.ScreenUpdating = False

    Set classeurFermé = Workbooks.Open("D:\Dropbox\excel\articles\exemple.xlsm")
    classeurFermé.Sheets("Feuil1").Copy Before:=ThisWorkbook.Sheets(1)
    classeurFermé.Close SaveChanges:=False

Application.ScreenUpdating = True
End Sub

Remarquez que dans ces deux exemples, nous avons désactivé le paramètre ScreenUpdating pour que le processus s’exécute en arrière-plan sans que les actions soient visibles par l’utilisateur.

Dupliquer une Feuille Excel Plusieurs Fois

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

Sub CopierFeuilleMultiple()
Dim n As Integer
Dim i As Integer
On Error Resume Next

    n = InputBox("Combien de copies voulez-vous créer?")

    If n > 0 Then
        For i = 1 To n
            ActiveSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count)
        Next
    End If

End Sub

vba-free-addin

Module Complémentaire d'Exemples de Code VBA

Accédez facilement à tous les exemples disponibles sur le site.

Naviguez simplement dans le menu, cliquez, et le code sera inséré directement dans votre module. Module complémentaire .xlam.

(Aucune installation requise!)

Téléchargement gratuit

Retour aux exemples de code VBA