Comment réparer l'erreur d'exécution 1004 dans Excel

L'erreur d'exécution 1004 est un code d'erreur relatif à Microsoft Visual Basic qui est connu pour affecter les utilisateurs de Microsoft Excel. L'erreur est connue pour être la plus répandue sur Excel 2003 et Excel 2007, bien qu'aucune version de l'application de feuille de calcul populaire de Microsoft pour les ordinateurs ne soit à l'abri de la menace qui est l'erreur d'exécution 1004. Dans la plupart des cas, les utilisateurs affectés par ce problème voient l'un des deux variantes différentes de l'erreur d'exécution 1004. Dans leur intégralité, les deux variantes de l'erreur d'exécution 1004 se lisent:

" Erreur d'exécution" 1004 ":

La méthode de copie de la classe de feuille de travail a échoué »

" Erreur d'exécution" 1004 ":

Erreur définie par l'application ou par l'objet »

Le message d'erreur exact que vous voyez peut également varier légèrement, dans quelques cas, bien que le code d'erreur reste le même. Quelle que soit la version du problème que vous rencontrez, cependant, il se produit presque toujours lors de l'exécution d'une macro dans Excel conçue pour copier des feuilles de calcul, puis placer les copies dans le même classeur que la feuille de calcul d'origine.

Contrairement aux pires problèmes techniques, la cause de l'erreur d'exécution 1004 dans Microsoft Excel est connue. Erreur d'exécution 1004 se produit lorsque la macro que vous exécutez copie la feuille de calcul d'origine dans un classeur avec un nom défini que vous n'avez pas enregistré et fermé avant d'exécuter la macro. Un exemple d'une telle macro peut être vu dans le code suivant:

Sub CopySheetTest() Dim iTemp As Integer Dim oBook As Workbook Dim iCounter As Integer ' Create a new blank workbook: iTemp = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set oBook = Application.Workbooks.Add Application.SheetsInNewWorkbook = iTemp ' Add a defined name to the workbook ' that RefersTo a range: oBook.Names.Add Name:="tempRange", _ RefersTo:="=Sheet1!$A$1" ' Save the workbook: oBook.SaveAs "c:\test2.xls" ' Copy the sheet in a loop. Eventually, ' you get error 1004: Copy Method of ' Worksheet class failed. For iCounter = 1 To 275 oBook.Worksheets(1).Copy After:=oBook.Worksheets(1) Next End Sub

Étant donné que la cause de l'erreur d'exécution 1004 dans le contexte de Microsoft Excel est connue, tout comme la résolution. En plus d'une solution à ce problème, ce qui est également disponible pour les utilisateurs concernés est une solution de contournement qui peut être utilisée dans le cas où la solution ne fonctionne pas ou s'ils ne trouvent pas la solution comme une option viable.

La solution:

La solution à ce problème spécifique consiste simplement à modifier le code de la macro que vous exécutez pour qu'il enregistre et ferme périodiquement le classeur cible pendant qu'il effectue des copies de la ou des feuilles de calcul. Le code d'une macro qui effectue cette opération ressemblerait à ce qui suit:

Sub CopySheetTest() Dim iTemp As Integer Dim oBook As Workbook Dim iCounter As Integer ' Create a new blank workbook: iTemp = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set oBook = Application.Workbooks.Add Application.SheetsInNewWorkbook = iTemp ' Add a defined name to the workbook ' that RefersTo a range: oBook.Names.Add Name:="tempRange", _ RefersTo:="=Sheet1!$A$1" ' Save the workbook: oBook.SaveAs "c:\test2.xls" ' Copy the sheet in a loop. Eventually, ' you get error 1004: Copy Method of ' Worksheet class failed. For iCounter = 1 To 275 oBook.Worksheets(1).Copy After:=oBook.Worksheets(1) 'Uncomment this code for the workaround: 'Save, close, and reopen after every 100 iterations: If iCounter Mod 100 = 0 Then oBook.Close SaveChanges:=True Set oBook = Nothing Set oBook = Application.Workbooks.Open("c:\test2.xls") End If Next End Sub

Remarque: Le nombre exact de fois où vous pouvez copier une feuille de calcul avant de devoir enregistrer et fermer le classeur dans lequel les copies sont enregistrées varie d'un cas à l'autre car il dépend de la taille de la feuille de calcul dont vous faites des copies.

La solution de contournement:

Comme indiqué précédemment, une solution de contournement à ce problème spécifique existe également. Pour contourner ce problème, il suffit d'insérer une nouvelle feuille de calcul à partir d'un modèle au lieu de créer une copie d'une feuille de calcul existante. Si vous souhaitez contourner ce problème, voici ce que vous devez faire:

  1. Lancez  Excel .
  2. Créez un nouveau classeur et  supprimez  chaque feuille de calcul que le classeur contient, enregistrez-en une.
  3. Mettez en forme  le classeur.
  4. Ajoutez le texte, les données et / ou les graphiques que vous souhaitez avoir dans le modèle par défaut à la seule feuille de calcul que le classeur contient maintenant.
  5. Si vous utilisez Excel 2003 ou une version antérieure, cliquez sur  Fichier Enregistrer sous . Si vous utilisez Excel 2007 ou une version ultérieure, par contre, cliquez sur le  bouton Microsoft Office  , puis sur  Enregistrer sous .
  6. Au  Nom du fichier : champ, tapez ce que vous voulez que le modèle à appeler.
  7. Ouvrez le menu déroulant à côté du  champ Enregistrer sous type: et cliquez sur  Modèle Excel  (.xlt) si vous utilisez Excel 2003 ou version antérieure, ou  Modèle Excel  (.xltx) si vous utilisez Excel 2007 ou version ultérieure pour le sélectionner.
  8. Cliquez sur  Enregistrer .
  9. Une fois que vous avez créé le modèle avec succès, vous pouvez l'insérer par programme à l'aide de la ligne de code suivante:

    Sheets.Add Type: = chemin \ nom de fichier

Remarque: Dans la ligne de code décrite ci-dessus, le  chemin \ nom de fichier doit être remplacé par le chemin complet (y compris le nom de fichier complet) pour l'emplacement du modèle de feuille que vous venez de créer.