IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur 1004 La methode copy de la classe Worksheet a echoué


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Points : 105
    Points
    105
    Par défaut Erreur 1004 La methode copy de la classe Worksheet a echoué
    Bonjour a toutes et tous.
    Je vous soumet un probleme que je n'arrive pas a resoudre concernant l'erreur 1004.
    Cette macro me cree des onglets dans le classeur a partir de 3 onglets orignes
    "source" 1
    "tc envoi" 2
    "exemple" 3
    Le probleme qui se pose c'est qu'elle me cree environ 130 onglets sur 300, puis plantage :
    "erreur d'execution 1004"
    La methode copy de la classe Worksheet a echoué"
    Avec cette ligne en erreur : Sheets(3).Copy After:=Sheets(3)

    Merci pour l'aide. Desole de ne pouvoir joindre de fichier car trop lourd.
    Cordialement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub decoupage()
    Dim Nbre_Pages As Integer
    
    Dim counter As Integer
    
    counter = 1
    
    Do While Sheets(1).Range("A" & counter + 1).Value <> ""
        
        Sheets(3).Select
    
        If (counter Mod 6) = 1 Then
        
                         
                Sheets(3).Copy After:=Sheets(3)
                ActiveSheet.Name = Sheets(1).Range("B" & counter + 1).Value & " - " & Sheets(1).Range("D" & counter + 1).Value
              
                'numero de Ref
                ActiveSheet.Range("C5").Value = Sheets(1).Range("B" & counter + 1).Value
            
                'nom de la Ref
                ActiveSheet.Range("C6").Value = Sheets(1).Range("C" & counter + 1).Value
                
                'departement de la Ref
                ActiveSheet.Range("E5").Value = Sheets(1).Range("D" & counter + 1).Value
            
                'value
                ActiveSheet.Range("B13:H13").Value = Sheets(1).Range("F" & counter + 1 & ":L" & counter + 1).Value
                ActiveSheet.Range("B14:H14").Value = Sheets(1).Range("F" & counter + 2 & ":L" & counter + 2).Value
                ActiveSheet.Range("B15:H15").Value = Sheets(1).Range("F" & counter + 3 & ":L" & counter + 3).Value
                ActiveSheet.Range("B16:H16").Value = Sheets(1).Range("F" & counter + 4 & ":L" & counter + 4).Value
                ActiveSheet.Range("B17:H17").Value = Sheets(1).Range("F" & counter + 5 & ":L" & counter + 5).Value
                ActiveSheet.Range("B18:H18").Value = Sheets(1).Range("F" & counter + 6 & ":L" & counter + 6).Value
        End If
        
        
        counter = counter + 1
        Loop
        
    End Sub

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ton code est correct. N'as-tu pas une protection quelque part ?

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Points : 105
    Points
    105
    Par défaut
    Je te remercie ouskel'n'or, mais je ne vois pas ou il pourrait y avoir une protection.
    Merci encore

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Tu dis que cela bug à 130 onglets, je pense que c'est peut-être un problème de mémoire, en effet il n y a pas de nombre limite d'onglet, ce nombre est limité par la mémoire de ton PC.

    As-tu le moyen d'essayer sur un PC plus performant ou moins performant, si cette limite change, cela peut-être une explication.

    Starec

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Supprime la ligne
    qui ne sert à rien. Si ça fonctionne, c'est que tu ne laisses pas le temps au système de sélectionner la feuille.
    Tu peux le vérifier en laissant cette ligne suivie de DoEvents. Si ça fonctionne, c'est ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Sheets(3).Select
        DoEvents
    Tu dis
    A+

  6. #6
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Points : 105
    Points
    105
    Par défaut
    J'ai fait les essais avec les modifs, mais c'est toujours le blocage a 130 onglets.
    Sur une autre machine plus puissante, le blocage se fait sur environ 200 onglets.
    Je pense que tu as raison et c'est au niveau de la memoire que cela Bug.
    Je te remercie de t'etre penche sur mon probleme.

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu peux peut-être résoudre le pb en enregistrant le fichier si erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Do While Sheets(1).Range("A" & counter + 1).Value <> ""
        If (counter Mod 6) = 1 Then
            Do
                err.clear
                On error resume next
                Sheets(3).Copy After:=Sheets(3)
                Activeworkbook.save 's'il existe déjà
                'ou
                'Activeworkbook.SaveAs Chemin & NomFich 's'il n'existe pas
                DoEvents
            loop while err <> 0
            On error goto 0
    Pas testé. Si tu testes, le résultat est intéressant.
    (Renseigne Chemin & NomFich)
    A+

  8. #8
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour tlm,

    Alors pour info, avec la macro originale, je bloque à 475 onglets
    Avec l'astuce de Ousk (c'est toi Mc Gyver ? ), j'ai ajouté une variable qui m'enregistre le fichier à chaque fois que 50 onglets ont été créé (à mon avis on pourrait le faire avec un pas de 100) et... j'ai stoppé la procédure moi même après 900 onglets...!

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    J'ai pensé à une amélioration si le fichier n'existe pas, tu mets, avant la boucle
    Activeworkbook.SaveAs Chemin & NomFich 's'il n'existe pas
    et dans la boucle tu laisses simplement
    Sinon, la méthode de fring me paraît bien, surtout qu'il n'est pas certain que "On error..." gère un problème de mémoire.
    Ce qui m'inquièterait c'est plutôt l'ouverture et la gestion du fichier, par la suite...

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Alors...juste pour voir jusqu'où cela pouvait aller, j'ai relancer une boucle sans fin et je l'ai laissé tourner, je bloque à 4000 onglets tout rond...
    Je sais que c'est une info qui ne sert à rien mais il y a donc moyen de se créer un onglet par jour pendant 10 ans

  11. #11
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Points : 105
    Points
    105
    Par défaut
    Le probleme est resolu.
    J'ai un 2eme TCD dans le classeur et celui ci se mettait à jour apres chaque enregistrement par la macro, d' ou pas assez de memoire sur le PC et plantage.
    J'ai supprimer ce TCD et maintenant cela fonctionne. Difficile a trouver et pourtant simple, mais bon cela fonctionne maintenant.

    Merci ouskel'n'or, fring de vous etre penche sur mon probleme.

    Bonne fin d'après midi.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur 1004 : la methode Paste de la classe Worksheet a échoué
    Par jambonland dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/08/2013, 11h29
  2. [XL-2007] Erreur 1004 : la methode Paste de la classe Worksheet a échoué
    Par bricko dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/06/2013, 02h53
  3. Erreur 1004 A la copie d'une feuille
    Par hitmax dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/08/2008, 10h59
  4. Réponses: 14
    Dernier message: 19/12/2007, 18h58
  5. Réponses: 13
    Dernier message: 29/06/2007, 19h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo