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 SubJe 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.
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
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 SubLe 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
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 SubLe problème c'est qu'on ne conserve pas les tailles des cellules
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!!!