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

L'erreur d'exécution 1004 est un code d'erreur relatif à Microsoft Visual Basic qui affecte les utilisateurs de Microsoft Excel. L'erreur est connue pour être la plus répandue dans Excel 2003 et Excel 2007, bien qu'aucune version de la populaire application de feuille de calcul de Microsoft pour ordinateurs ne soit à l'abri de la menace qu'est l'erreur d'exécution 1004. Dans la plupart des cas, les utilisateurs concerné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 comme suit:

« Erreur d'exécution '1004':

La méthode de copie de la classe de feuille de calcul 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 certains cas, bien que le code d'erreur reste le même. Quelle que soit la version du problème que vous rencontrez, toutefois, cela 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. L'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é ni fermé avant l'exécution de 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 

Depuis la cause de l'erreur d'exécution 1004 dans le contexte de Microsoft Excel est connue, de même que la résolution. Outre une solution à ce problème, les utilisateurs concernés disposent également d'une solution de contournement qui peut être utilisée si la solution ne fonctionne pas ou s'ils ne trouvent pas la solution viable.

La solution:

La solution à ce problème spécifique consiste simplement à modifier le code de la macro que vous exécutez afin de l'enregistrer et de fermer périodiquement le classeur cible pendant qu'il copie des feuilles de calcul. Le code d'une macro faisant cela ressemblerait à ceci:

 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 que vous pouvez copier une feuille de calcul avant de devoir sauvegarder et fermer le classeur dans lequel les copies sont enregistrées varie d'un cas à l'autre car cela dépend de la taille de la feuille de calcul pour laquelle vous effectuez des copies.

La solution de contournement:

Comme indiqué précédemment, une solution de contournement à ce problème spécifique existe également. Pour résoudre 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. Lancer Excel .
  2. Créez un nouveau classeur et supprimez chaque feuille de calcul qu'il contient, sauf une.

  3. Formatez le classeur.
  4. Ajoutez le texte, les données et / ou les graphiques que vous souhaitez inclure par défaut dans le modèle à 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. Dans le champ Nom du fichier, tapez ce que vous voulez que le modèle soit appelé.
  7. Ouvrez le menu déroulant en regard du champ Enregistrer en tant que type et cliquez sur Modèle Excel (.xlt) si vous utilisez Excel 2003 ou une version antérieure, ou sur Modèle Excel (.xltx) si vous utilisez Excel 2007 ou une version ultérieure pour le sélectionner.

  8. Cliquez sur Enregistrer .

  9. Une fois le modèle créé, vous pouvez l'insérer par programme à l'aide de la ligne de code suivante:

    Sheets.Add Type: = chemin \ nom du fichier

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

Des Articles Intéressants