Copier worksheet, erreur 1004

Bonjour à tous,

Je rencontre actuellement un problème avec la macro qui suit:

Private Sub CopierCatalogue(wkbCatalogue As Workbook, wkbDestination As Workbook)
    Dim feuille As Worksheet

    For Each feuille In wkbDestination.Sheets
        If feuille.Name = "CATALOGUE" Then
            wkbDestination.Sheets("CATALOGUE").Delete
            Exit For
        End If
    Next feuille

    wkbCatalogue.Sheets(1).Copy After:=wkbDestination.Sheets(wkbDestination.Sheets.Count)
    wkbDestination.Sheets(wkbDestination.Sheets.Count).Name = "CATALOGUE"

End Sub

Je cherche à copier une feuille nommée "CATALOGUE" dans un autre classeur.

Or, la macro plante sur la méthode copy avec une erreur du type:

Erreur 1004, la méthode copy de la classe WorkSheet a échoué.

Je me suis pourtant inspiré du code généré par l'enregistreur de macro.

Je précise que les deux workbook passés en paramètre sont ouvert (contrôlé avec MsgBox wkb.Name qui me renvoit bien les deux noms des classeurs)

La boucle en début de macro ne sert qu'a supprimer la feuille si "CATALOGUE" si celle-ci est déjà existante dans le classeur de destination.

Quelqu'un a t-il la solution à mon problème?

Merci d'avance.

Bonjour,

Essaie plutôt ceci :

wkbCatalogue.Sheets(1).Copy After:=wkbDestination.Sheets(Sheets.Count)

Amicalement

Dan

Bonjour Dan, merci pour une fois de plus suivre mon thread.

J'ai essayé avec ta correction mais sans succès, toujours la même erreur

Le code me parait bon... j'avais essayé également avec la méthode "Move" de WorkSheet ou workBook (je ne sais plus trop) qui me renvoie une erreur similaire mais incriminant cette fois ci la méthode "Move".

Any Idea?

re,

Une chose m'interpèle dans ton code :

Private Sub CopierCatalogue(wkbCatalogue As Workbook, wkbDestination As Workbook)

La macro est située où dans ton fichier ?

A te relire

Dan

la macro est située dans un module nommé "GestionCatalogue"

Cette macro est déclarée en private car pour le moment, elle n'est appelée que par une macro, public elle, nommée "ChargementCatalogue" et située dans le même module.

5suivi-v3.xlsm (54.87 Ko)

re,

essaie ceci

Remplace :

Private Sub CopierCatalogue(wkbCatalogue As Workbook, wkbDestination As Workbook) 

Par

Private Sub CopierCatalogue() 
Dim wkbCatalogue As Workbook, wkbDestination As Workbook
...

Verifie aussi que "After" soit sur la même ligne que "Copy".

Dan

5semaine-07.xlsm (168.58 Ko)

Re, j'ai bien essayer ta manipulation mais la même erreur persiste...

Voilà ma macro modifée!

Private Sub CopierCatalogue()
Dim wkbDestination As Workbook, wkbCatalogue As Workbook
Set wkbDestination = ActiveWorkbook
Set wkbCatalogue = oAppliCatalogue.Workbooks(NOM_CATALOGUE)

    MsgBox wkbCatalogue.Name & " --> " & wkbDestination.Name

    Dim feuille As Worksheet

    For Each feuille In wkbDestination.Sheets
        If feuille.Name = "CATALOGUE" Then
            Application.DisplayAlerts = False
            wkbDestination.Sheets("CATALOGUE").Delete
            Application.DisplayAlerts = True
            Exit For
        End If
    Next feuille
    wkbCatalogue.Activate
    wkbCatalogue.Sheets(1).Select
    wkbCatalogue.Sheets(1).Copy After:=wkbDestination.Sheets(wkbDestination.Sheets.Count)
    wkbDestination.Activate
    wkbDestination.Sheets(wkbDestination.Sheets.Count).Name = "CATALOGUE"

End Sub

Le MsgBox me confirme que les deux instances de workbook sont corrects.

Quant aux activate et select inutiles, il s'agit d'autres pistes avancées par google qui ne sont pas non plus fructueuses...

Je suis tombé sur ce lien:

http://support.microsoft.com/kb/177634/fr

Cela semble correspondre à mon problème si ce n'est que Microsoft affirme que le problème a été corrigé depuis Excel 2000

Il propose pour CONTOURNER le problème (spécialité VBA de contourner les problèmes ) de faire une copie par plage de cellule et non pas par feuille.

Voilà mon nouveau code:

Private Sub CopierCatalogue()
Dim wkbDestination As Workbook, wkbCatalogue As Workbook
Set wkbDestination = ActiveWorkbook
Set wkbCatalogue = oAppliCatalogue.Workbooks(NOM_CATALOGUE)

    MsgBox wkbCatalogue.Name & " --> " & wkbDestination.Name

    Dim feuille As Worksheet

    For Each feuille In wkbDestination.Sheets
        If feuille.Name = "CATALOGUE" Then
            Application.DisplayAlerts = False
            wkbDestination.Sheets("CATALOGUE").Delete
            Application.DisplayAlerts = True
            Exit For
        End If
    Next feuille

    Sheets.Add.Move After:=wkbDestination.Sheets(wkbDestination.Sheets.Count)
    wkbCatalogue.Sheets(1).Cells.Copy
    ActiveSheet.Paste

    wkbDestination.Sheets(wkbDestination.Sheets.Count).Name = "CATALOGUE"
    wkbDestination.Sheets(1).Select

    CreerListe
End Sub

Le problème c'est qu'on ne conserve pas les tailles des cellules , un paste spécial doit rectifier le tire...

Dans mon cas ça ne pose pas de problème car la feuille n'est pas sensée être visible.

Merci pour tes réponses Dan et si toi ou d'autres avez d'autres suggestions plus "propres" ou connaissances de la cause de l'erreur, n'hésitez pas!!!

Rechercher des sujets similaires à "copier worksheet erreur 1004"