Impossible de copier des feuilles en VBA

Bonjour,

J'ai un problème qui m'a fait perdre pas mal de temps et je ne sais pas comment le résoudre.

Déjà je n'y connais pas grand chose en VBA donc je fais certainement n'importe quoi.

J'essaie, à partir d'un workbook que l'on va nommer wb1, de copier 5 feuilles du workbooks numéro 2 et de remplacer 5 feuilles du workbook 3 par les 5 feuilles du workbooks numéro 2.

Le workbook 1 contient juste des boutons, et l'un de ses boutons contiendra la macro qui devra donc effectuer cette action de copie et de remplacement du workbook 2 vers le workbook 3.

Sub maj()
Workbooks.Open "C:\Users\test\Desktop\Documents\malade\wb3.xlsm"
Workbooks.Open "C:\Users\test\Desktop\Documents\malade\wb2.xlsm"
Workbooks("wb3.xlsm").Activate

Application.DisplayAlerts = False

'ActiveWorkbook.Sheets("GDp").Delete
'ActiveWorkbook.Sheets("FDI").Delete
'ActiveWorkbook.Sheets("STr").Delete
'ActiveWorkbook.Sheets("CBl").Delete
'ActiveWorkbook.Sheets("OHb").Delete

Application.DisplayAlerts = True

Workbooks("wb2.xlsm").Activate

ActiveWorkbook.Sheets("OHb").Copy Before:=Workbooks("wb3.xlsm").Sheets(1)

Workbooks("wb3.xlsm").Close SaveChanges:=True
Workbooks.Open "C:\Users\test\Desktop\Documents\malade\wb3.xlsm"
ActiveWorkbook.Sheets("GDp").Copy Before:=Workbooks("wb3.xlsm").Sheets(1)
ActiveWorkbook.Sheets("FDI").Copy Before:=Workbooks("wb3.xlsm").Sheets(1)
ActiveWorkbook.Sheets("STr").Copy Before:=Workbooks("wb3.xlsm").Sheets(1)
ActiveWorkbook.Sheets("CBl").Copy Before:=Workbooks("wb3.xlsm").Sheets(1)

Workbooks("wb3.xlsm").Close SaveChanges:=True

End Sub

En général seule une feuille est copiée puis j'ai

Run-time error '1004': 
Copy Method of Worksheet Class failed

Et parfois Excel se ferme tout seul sans qu'il y ait un message d'erreur ou une fenêtre pour indiquer que l'application a crashé.

Merci de votre aide

Bonjour,

Essayer ce code

Sub maj()
    Dim wb2 As Workbook, wb3 As Workbook
    Dim noms_feuille()

    Set wb2 = Workbooks.Open("C:\Users\test\Desktop\Documents\malade\wb2.xlsm")
    Set wb3 = Workbooks.Open("C:\Users\test\Desktop\Documents\malade\wb3.xlsm")
    noms_feuille = Array("Gdp", "FDI", "STr", "CBl", "OHb")

    Application.DisplayAlerts = False
    wb3.Sheets(noms_feuille).Delete
    wb2.Sheets(noms_feuille).Copy Before:=wb3.Sheets(1)

    wb2.Close savechanges:=False
    wb3.Close savechanges:=True

End Sub

Merci de votre réponse.

En testant votre code je suis donc parvenu à copier les feuilles ( en commentant la ligne de suppression). Néanmoins je ne parviens à supprimer les feuilles, il y a une erreur sur la ligne de suppression comme quoi la méthode a échoué.

Néanmoins je ne parviens à supprimer les feuilles, il y a une erreur sur la ligne de suppression comme quoi la méthode a échoué.

Si la méthode échoue, c'est qu'au mois une de ces 5 feuilles : "Gdp", "FDI", "STr", "CBl", "OHb" n'est pas présente dans le fichier wb3.

Bonjour, salut thev,

Une adaptation pour vérifier la présence de la feuille :

Sub maj()
    Dim wb2 As Workbook, wb3 As Workbook
    Dim noms_feuille(), F

    Set wb2 = Workbooks.Open("C:\Users\test\Desktop\Documents\malade\wb2.xlsm")
    Set wb3 = Workbooks.Open("C:\Users\test\Desktop\Documents\malade\wb3.xlsm")
    noms_feuille = Array("Gdp", "FDI", "STr", "CBl", "OHb")

    Application.DisplayAlerts = False
    For Each F in noms_feuille
        If ExisteF(wb3, F) Then wb3.Sheets(F).Delete
        wb2.Sheets(F).Copy Before:=wb3.Sheets(1)
    Next F
    wb2.Close savechanges:=False
    wb3.Close savechanges:=True

End Sub
Private Function ExisteF(Optional WB As Workbook = ActiveWorkbook, Feuille As String) As Boolean

    Dim F As Sheet

    For Each F In WB.Sheets
        If F.Name = Feuille Then ExisteF = True
    Next F

End Sub

PS : je ne l'ai pas testé

C'est ce que je me suis aussi dit mais j'ai bien vérifié et les feuilles sont bien présentes. Elles étaient masquées au début et je les ai réaffichées par la suite mais ça n'a rien changé par la suite.

J'ai essayé de les supprimer une à une sans utiliser l'array mais rien n'y fait j'ai une erreur pour chaque feuille.

Je ne sais pas trop quoi faire

Et pour pedro il y a un erreur au niveau de "Private Function..." . Le message d'erreur est : Expected : Optional à la place de " Feuille as String"

Bonjour,

Si dans votre fichier, vous pouvez copier des feuilles et non les supprimer, c'est que vous avez une procédure événementielle qui active temporairement la protection de votre fichier.

Soit cette procédure est rattachée à chaque feuille, soit une seule fois à ThisWorkBook.

Bonjour,

Si dans votre fichier, vous pouvez copier des feuilles et non les supprimer, c'est que vous avez une procédure événementielle qui active temporairement la protection de votre fichier en cas de suppression.

Soit cette procédure est rattachée à chaque feuille :"Private Sub Worksheet_BeforeDelete()"

Soit une seule fois à ThisWorkBook : "Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)"

bonjour

salut thev

de nos jours, on fait menu Données Obtetnir pour récupérer des données d'un autre onglet ou classeur, ou de plusieurs

simple, fiable, gratuit, sans aucun code à saisir

c'est Power Query

amitiés

Rechercher des sujets similaires à "impossible copier feuilles vba"