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 a la 51em feuille [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut Erreur 1004 a la 51em feuille
    Bonjour,

    Indication : seul les 78 premières lignes du code sont je pense utiles, mais j'ai tout mis au cas où.

    J'ai créer une macro qui, à partir d'un classeur rempli de données :
    - extrait les données des feuilles jaunes dans des tableaux pour impression
    - trouve les dates
    - créer des fichier au format csv
    - gère les noms des préparations

    Mon code fonctionne et est assez rapide (28 secondes pour 50 onglets de 23*22 cases).
    Malheureusement, dès que le fichier d'input dépasse les 51 onglets jaunes. La macro me donne l'erreur 1004 : la méthode copy de l'objet worksheet a échoué. Ligne 68.

    J'ai essayé de copier/coller 52 fois le même onglet (appartenant au 51 premiers, qui ne pose donc pas de soucis) et de tenter avec ça. Même soucis, la boucle se déroule bien 51 fois mais pas 52 fois.

    Quel problème cela peut-il être ? Problème de mémoire peut-être ?

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    Sub upd_flexi_fr_fr()
    'Cette macro exporte tous les tarifs sous format exploitable par GW
    'definitions
    Dim wb As Workbook
    Dim ws As Worksheet, wsprepa As Worksheet, wsoutput As Worksheet, wsto As Worksheet
    Dim tbl(14, 2)
    Dim plage As Range, resdate As Range
    Dim indice As String, choix As String, chemin As String
    Dim i As Integer, n As Integer
    Dim T As Double
    'attributions
    tbl(0, 0) = "Z1 "
    tbl(1, 0) = "Z2 "
    tbl(2, 0) = "Z3 "
    tbl(3, 0) = "Z4 "
    tbl(4, 0) = "Z6 "
    tbl(5, 0) = "Z8 "
    tbl(6, 0) = "Z9 "
    tbl(7, 0) = "Z10"
    tbl(8, 0) = "Z11"
    tbl(9, 0) = "Z12"
    tbl(10, 0) = "Z13"
    tbl(11, 0) = "Z14"
    tbl(12, 0) = "Z15"
    tbl(13, 0) = "Z16"
    tbl(14, 0) = "Z17"
        For i = 0 To 14
            tbl(i, 1) = 0
        Next i
    tbl(0, 2) = "PE"
    tbl(1, 2) = "AM"
    tbl(2, 2) = "PI"
    tbl(3, 2) = "RM"
    tbl(4, 2) = "RA"
    tbl(5, 2) = "WS"
    tbl(6, 2) = "RP"
    tbl(7, 2) = "RG"
    tbl(8, 2) = "OR"
    tbl(9, 2) = "PP"
    tbl(10, 2) = "CD"
    tbl(11, 2) = "PG"
    tbl(12, 2) = "BO"
    tbl(13, 2) = "TL"
    tbl(14, 2) = "LR"
    Set wb = Workbooks("macrofr_fr")
    Set wsprepa = wb.Sheets("output")
    wsprepa.Tab.ColorIndex = 4
    Set wsto = wb.Sheets("tour operator")
    Set resdate = wb.Sheets("Instructions").Range("resdate")
    wsto.Range("E1") = resdate
    Application.Dialogs(xlDialogOpen).Show
    choix = InputBox("Creation d'un répertoire", "Nom du dossier contenant les exports à créer : ")
        If choix = "" Then
            MsgBox "Fin de la routine."
            End
        End If
    chemin = "\\dossier\groups\automate\" & choix & " " & Left(Date, 2) & Mid(Date, 4, 2) & Mid(Date, 7, 4) & "\"
    MkDir (chemin)
    T = Timer
    'boucle sur les onglets jaunes
        For Each ws In Worksheets
            If ws.Tab.ColorIndex = 6 And ws.Visible = True Or ws.Tab.ColorIndex = 27 And ws.Visible = True Then
                indice = Left(ws.Name, 3)
                For i = 0 To 14
                    If indice = tbl(i, 0) Then
                        tbl(i, 1) = tbl(i, 1) + 1
                        wsprepa.Copy Before:=wb.Sheets("tour operator")
                        ActiveSheet.Name = indice & " prepa " & tbl(i, 1)
                        Set wsoutput = ActiveSheet
                        wsoutput.Range("J7:M8").Value = ws.Range("AO252:AR253").Value
                        wsoutput.Range("F7").Value = ws.Range("AK252").Value
                        wsoutput.Range("E20:Z42").Value = ws.Range("AJ265:BE287").Value
                    End If
                Next i
            End If
        Next ws
    wsprepa.Tab.ColorIndex = 25
        For Each ws In Worksheets
    'recherche des dates + création csv
            If ws.Tab.ColorIndex = 4 Then
                Set plage = ws.Range("J8")
                    If plage < Date Or Left(plage, 2) = "AS" Then
                        wsto.Range("C1") = resdate
                        Else
                        wsto.Range("C1").Value = Left(plage, 2) & Mid(plage, 4, 2) & Right(plage, 2) & " 00:00"
                    End If
                If Left(ws.Range("M8"), 2) = "NO" Then
                    wsto.Range("D1") = ""
                    Else
                    wsto.Range("D1") = Left(ws.Range("M8"), 2) & Mid(ws.Range("M8"), 4, 2) & Right(ws.Range("M8"), 2) & " 23:59"
                End If
            wsto.Range("E1") = Left(Date + 1, 2) & Mid(Date + 1, 4, 2) & Mid(Date + 1, 7, 4) & " 00:00"
                For i = 0 To 21
                    Range(wsto.Cells(1 + i * 23, 7), wsto.Cells(23 + i * 23, 7)).Value = Range(ws.Cells(20, 5 + i), ws.Cells(42, 5 + i)).Value
                Next i
            indice = Left(ws.Name, 3)
            n = Mid(ws.Name, 11, 1)
                For i = 0 To 14
                    If indice = tbl(i, 0) Then
                        wsto.Copy
                        ActiveWorkbook.SaveAs (chemin & "STDF" & tbl(i, 2) & "FR" & n & ".csv"), FileFormat:=xlCSV, Local:=True, CreateBackup:=False
                        ActiveWindow.Close False
                    End If
                Next i
            End If
        Next ws
    'préparation des impressions
    Application.DisplayAlerts = False
    wsprepa.Delete
    wsto.Delete
    Sheets("instructions").Delete
    wb.SaveAs (chemin & "Impressions.xls"), FileFormat:=xlNormal, CreateBackup:=FalseActive
    MsgBox "Export effectué en " & Timer - T & " secondes"
    Shell "explorer " & chemin, vbNormalFocus
    wb.Close False
     
    End Sub

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Hello tout le monde,

    Je viens de faire des tests sur un ordinateur windows seven et excel 2010 (mais en mode compatibilité 2003).
    J'ai essayé de reproduire le bug mais impossible. La macro fonctionne jusqu'à 250 feuilles (j'ai pas testé plus). Ca m'en bouche un coin... Comme je ne peux pas reproduire le bug, je ne sais pas quoi faire...

    La config du pc qui posait problème était windows xp et excel 2003...

    Help me pleaze.

    Une piste trouvé sur l'aide en ligne mais je n'y crois guère. Ce serait que le fait d'aller écrire sur un réseau pourrait causer un problème...

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

    Je pense plus à un problème de mémoire (RAM) de ton PC.

    En effet, la limite d'une nombre de feuilles dans un classeur est liée à la mémoire de ton PC.

    Essayes dans un premier temps de faire un sauvegarde régulière (tous les 40 feuilles par exemple), pour voir si cela peut régler le problème.

    Philippe

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Merci, je vais me pencher sur cette piste ! Je vais essayer le coup de la sauvegarde ainsi que vider le presse papier. Et si j'y arrive, mettre un indicateur de mémoire pendant l'éxecution de la bête !

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Bonjour tout le monde,


    Je n'y arrive vraiment pas. J'ai mis ça à la fin dans la première boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                If n = 3 Then
                    wb.SaveAs (chemin & "backup" & indice & ".xls"), FileFormat:=xlNormal, CreateBackup:=FalseActive
                End If
                Application.DisplayAlerts = False
                ws.Delete
    Ca sauvegarde donc environ tous les 8 feuilles, de plus, ça supprimer les feuilles déjà traitées. Mais rien n'y fais. Toujours la même erreur à la 52e.

    J'ai également tester en retirant les calculs automatiques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.calculation = xlcalculationmanual
    Même problème.

    En tentant de vider le presse papier de la même manière comme ce :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    Avant le sub puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     If n = 3 Then
                    wb.SaveAs (chemin & "backup" & indice & ".xls"), FileFormat:=xlNormal, CreateBackup:=FalseActive
                OpenClipboard 0
                EmptyClipboard
                CloseClipboard
                End If
                Application.DisplayAlerts = False
                ws.Delete
    Toujours pareil...

    Ca c'est sur le pc avec excel 2003 et windows xp.


    Sur le pc puissant (seven et excel 2010). J'ai essayer la macro avec 250 feuilles en affichant le gestionnaire de taches sur performance.
    Sur les 50 première feuilles il est à 20-40% puis il passe à 80% de l'UC utilisée au environ de la 50e feuilles.

    Que puis-je faire SVP ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Je pense que cela confirme le problème de RAM.

    Le nombre de feuilles dans un classeur est liée à la mémoire du PC.

    Soit tu gonfles le PC, soit tu éclates ton classeurs en 5 classeurs avec 50 feuilles par classeur par exemple (en les fermant au fur et à mesure).

    Philippe

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

Discussions similaires

  1. [XL-2007] Bouton-Contrôle ActiveX : inutilisable sur feuille bloquée : erreur 1004
    Par captainch dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/08/2012, 16h55
  2. Erreur 1004 sur une feuille protégée
    Par lilou315 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/09/2011, 14h48
  3. [XL-2003] Erreur '1004' : feuille excel
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/04/2010, 16h27
  4. [XL-2003] Création de feuille dans un autre classeur : erreur '1004'
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/04/2010, 11h11
  5. 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, 09h59

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