Probleme " erreur 1004"

Signaler
Messages postés
5
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
30 novembre 2006
-
Messages postés
15
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
10 mai 2007
-
Bonjour
A partir d'une feuille excel, où un nombre " x "de colonnes servent de base de données, j'ai une macro qui  cree un meme nombre " x "de feuilles. Cette macro copie une feuille "réference" et la renomme selon un parametre de la colonne "A", "feuille A" et remplie cette meme feuille "A", de renseignements pris dans la colonne A, ensuite elle recopie la feuille "reference" et fait de meme avec les autres colonnes. J'arrive a faire environs 80 feuilles, en 1 ou plusieurs activations de la macros,  ensuite suivient un probleme" Erreur 1004 la methode copie de la classe worksheet à echouée".  Il faut que je supprime les feuilles crées, que je ferme excel, et cela remarche.
Est ce un probleme de memoire? comment pourrai je eviter ce problème.
merci

17 réponses

Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
9
Salut! Non c'est pas un problème de mémoire, il ne trouve plus la feuille que tu veux sélectionner! Avant de sélectionner cette feuille tu fait un worbook("nom").Activate. En tout quand j'ai cette erreur si je fais ça je ne l'ai plus. Mais ça peux venir d'autre part aussi!

 Drikce 06
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
9
Si cela peut t'aider:

Public Function CopierFeuilleExcel(ByVal sMonBookDeCopie As String, ByVal sMonBookDeDestination As String, _
                            ByVal sNomFeuilleACopier As String, ByVal sNomFeuilleCopier As String)


If Dir(sMonBookDeCopie) <> "" And Dir(sMonBookDeDestination) <> "" Then


    Dim xlApp As Excel.Application
    Dim xlBookDeCopie As Workbook
    Dim xlBookDeDestination As Workbook
    Dim i As Integer
    Dim j As Integer


  If sMonBookDeCopie <> sMonBookDeDestination Then


    Set xlApp = CreateObject("Excel.Application")
    Set xlBookDeCopie = xlApp.Workbooks.Open(sMonBookDeCopie)
    Set xlBookDeDestination = xlApp.Workbooks.Open(sMonBookDeDestination)


    For i = 1 To xlBookDeCopie.Sheets.Count
   
        If xlBookDeCopie.Sheets(i).Name = sNomFeuilleACopier Then
  
           xlBookDeCopie.Activate
           xlBookDeCopie.Sheets(sNomFeuilleACopier).Select
           xlBookDeCopie.Sheets(sNomFeuilleACopier).Copy After:=xlBookDeDestination. _
           Sheets(xlBookDeDestination.Sheets.Count)
          
           For j = 1 To xlBookDeDestination.Sheets.Count
          
              If xlBookDeDestination.Sheets(j).Name = sNomFeuilleCopier Then
          
                 MsgBox "La feuille copiée n'a pas pu être renommée, ce nom existe déjà!", vbCritical
             
           Exit For
          
              ElseIf j = xlBookDeDestination.Sheets.Count Then
          
                 xlBookDeDestination.Sheets(j).Name = sNomFeuilleCopier
          
              End If
             
           Next j
          
        Exit For
       
        ElseIf i = xlBookDeCopie.Sheets.Count Then
       
        MsgBox "La feuille à copier n'existe pas!", vbCritical
       
        End If
         
    Next i
   
    xlBookDeCopie.Close True
    xlBookDeDestination.Close True
    xlApp.Quit
   
    Set xlBookDeCopie = Nothing
    Set xlBookDeDestination = Nothing
    Set xlApp = Nothing


  ElseIf sMonBookDeCopie = sMonBookDeDestination Then


    Set xlApp = CreateObject("Excel.Application")
    Set xlBookDeCopie = xlApp.Workbooks.Open(sMonBookDeCopie)


    For i = 1 To xlBookDeCopie.Sheets.Count
   
        If xlBookDeCopie.Sheets(i).Name = sNomFeuilleACopier Then
       
           xlBookDeCopie.Activate
           xlBookDeCopie.Sheets(sNomFeuilleACopier).Select
           xlBookDeCopie.Sheets(sNomFeuilleACopier).Copy After:=xlBookDeCopie. _
           Sheets(xlBookDeCopie.Sheets.Count)


           For j = 1 To xlBookDeCopie.Sheets.Count
          
              If xlBookDeCopie.Sheets(j).Name = sNomFeuilleCopier Then
          
                 MsgBox "La feuille copiée n'a pas pu être renommée, ce nom existe déjà!", vbCritical
             
           Exit For
          
              ElseIf j = xlBookDeCopie.Sheets.Count Then
          
                 xlBookDeCopie.Sheets(j).Name = sNomFeuilleCopier
          
              End If
             
           Next j
        
        Exit For
       
        ElseIf i = xlBookDeCopie.Sheets.Count Then
       
        MsgBox "La feuille à copier n'existe pas!", vbCritical
       
        End If
         
    Next i
   
    xlBookDeCopie.Close True
    xlApp.Quit
   
    Set xlBookDeCopie = Nothing
    Set xlApp = Nothing


  End If
 
Else


    MsgBox "Le fichier n'existe pas, vérifier le chemin !", vbCritical
   
End If


End Function


'Exemple d'utilisation
Private Sub CommandButton1_Click()


Call CopierFeuilleExcel("C:\Classeur3.xls", "C:\Classeur3.xls", "Feuil2", "CopieDeFeuil2")


Call CopierFeuilleExcel("C:\Classeur3.xls", "C:\Classeur3.xls", "Feuil2", "CopieDeFeuil2")


End Sub

 Drikce 06
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
9
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
Drikce06
-> pense à faire la différence entre sub (fait une action) et function (renvoie un résultat)

pour ce snippet (et un ou 2 autres il me semble) j'ai corrigé...
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
9
Ok merci

 Drikce 06
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

il faut faire attention, lors des copies de feuilles, aux noms données (excel ne peut accepter de doublons dans les noms des Sheets).
De plus, il faut être vigilent sur le paramètre before et after de la procédure Copy.
(ex. si tu dis after une feuille non existante, cela provoque une erreur)

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Messages postés
5
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
30 novembre 2006

bonjour,
Merci pour ta réponse, j'ai essayé une modif en rajoutant un ".Activate", mais c'est pareil.

 Sheets("Feuille propokola").Copy Before:=Sheets(1) <--Ligne où s'arretele programme

        Sheets("Feuille propokola (2)").Name = nomfeuillcc
        Sheets(nomfeuillcc).Activate     'ligne rajoutée
        Sheets(nomfeuillcc).Visible = True
        Sheets(nomfeuillcc).Select
        Sheets(nomfeuillcc).Tab.ColorIndex = 2

Ce programme fonctionne sur environ 80 feuilles, et s'arrete sur l'erreur 1004.

Merci de ta réponse
Robert
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
9
Salut mortalino, pour ton commentaire, donc si la feuille à copier n'existe pas, il ne fait pas la copie, si le nom de la feuille copiée existe déjà, il ne la renomme pas et pour after, il ajoute la feuille après le dernière feuille (dernier index). Mais sinon j'ai pas réussi à mettre after ou before en paramètre, si tu as une idée!

 Drikce 06
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

Sheets("Feuil3").Copy After:=Sheets(3)
Sheets("Feuil1").Copy Before:=Sheets(3)

C'est testé et ça fonctionne, peut-être que l'antivirus vous bloquera cette manip mais pour le mien, il me prévient mais laisse l'opportunité d'exécuter la ligne de code.

Après quand je disais de faire attention au before et after, c'est si par exemple :

Sheets("Feuil3").Copy After:=Sheets(6)
Et si t'as que 3 feuilles, t'auras une erreur d'ecécution, indice n'appartient pas à la selection.
@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
1
Date d'inscription
vendredi 24 novembre 2006
Statut
Membre
Dernière intervention
24 novembre 2006

bonjour,
j'ai le même problème, en recopiant des feuilles (1 par jour) de chaque mois, j'ai un blocage le 26 du mois..
au debut du developpement de mon appli, la macro fonctionnait sans problème jusqu'en fin de mois. j'ai ensuite rajouté des feuilles supplémentaires et depuis apparition du problème (pas de modif du code de la macro)
j'avais trouvé un post ou il étatit question d'une limitation d'Excel en nombre d'objets pouvant être manipulés lors d'une instance VB. je n'ai pas retrouvé ce post ni de doc s'y rapportant.
2 questions :
ton pb est-il resolu et si oui, comment ?
avez vous entendu parler ce ces limitations ?

pour info je met le code qui bloque lors de la 27ème iterations :-((
Worksheets("Semaine").Copy before:=Worksheets("Semaine")

merci
A+
Messages postés
5
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
30 novembre 2006

bonjour,
merci de la réponse, mon problème est toujours le meme, la macro en vba fonctionne pour environ 80 feuilles, et plante. Il faut que je supprime les feuilles qu'elle vient de rajouter, sauve le fichier, et sorte d'excel. Je reouvre excel et le fichier et je recommence, et c'est reparti pour 80 feuilles. C'est ce qui me fait croire à un probleme de capacité. La macro fait aussi pas mal de calculs pour chaque feuille, je vais essayer de faire une macro toute simple, en dupliquant une feuille x, sans calcul. Je verrai si elle en fait plus. Je te tiens au courant
a+
robert
Messages postés
5
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
30 novembre 2006

Bonjour,
qui peut essayer cette macro ci  dessous en la reactivant 3 fois de suit  . A la troisieme, elle va copier 28 feuilles et s"arreter sur ce message: Erreur "1004 " la methode copy de la classe worksheet à echoué.
Comment resoudre ce problème?
merci
Robert

Sub copyfeuille()
'
' copyfeuille Macro
' Macro enregistrée le 29/11/2006
'nom de la feuille a copier: acopier
'nom de la feuille copiée: copiée et le N° incrementé par la variable "a"


a = 1


For i = 1 To 60


    Sheets("acopier").Select
    Sheets("acopier").Copy before:=Sheets(1)
    Sheets("acopier (2)").Select
    Sheets("acopier (2)").Name = "copiée" & a
    Range("C25").Select
    a = a + 1
 Next i
   
End Sub
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
9
Salut j'ai pas eu d'erreur il a fait les 60 copies!
Et j'ai utilisé exactement ce code! 3 fois de suite en supprimant toutes les feuilles déjà copier avant de relancer la macro!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
9
Sinon petite remarque pas besoin de i, le a suffit

For a= 1 To 60


    Sheets("acopier").Select
    Sheets("acopier").Copy before:=Sheets(1)
    Sheets("acopier (2)").Select
    Sheets("acopier (2)").Name = "copiée" & a
    Range("C25").Select

 Next a

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
5
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
30 novembre 2006

bonjour,
merci d'avoir essayé la macro (et aussi pour le conseil). Que pensez vous donc de l'erreur qui se produit? Cela vient du PC?
Robert
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
9
Ben franchement je sais pas d'où cela peut venir, essaye sur un autre poste pour voir! En tout cas chez moi ça a fonctionné nickel! (J'ai excel 2003 avec office11) Désolé je ne peux pas plus pour toi!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
15
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
10 mai 2007

Salut,

[quote=Drike]

Salut j'ai pas eu d'erreur il a fait les 60 copies!
Et j'ai utilisé exactement ce code! 3 fois de suite en supprimant toutes les feuilles déjà copier avant de relancer la macro!/quote
C'est parce que tu supprimes les feuilles déjà copiées que ça marche, si tu fais le même test en laissant les feuilles copiées, tu auras le message d'erreur comme quoi il ne peut plus copier.

C'est un bug d'Excel qui est limite le nombre de feuilles copiées. Je cherche aussi des informations sur internet pour voir si on peut passer outre ce bug mais la seule chose que je trouve est de créer une nouvelle feuille vierge et copier/coller le contenu de la première feuille.

Ce qui n'arrange pas tout le temps le problème car ce n'est pas exactement une copie de feuilles, les propriétés de la seconde feuille ne sont pas les mêmes.