Erreur 1004
aideVBA
Messages postés
5
Statut
Membre
-
tompols Messages postés 1273 Date d'inscription Statut Contributeur Dernière intervention -
tompols Messages postés 1273 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis stagiaire en entreprise et je suis en train de programmer en Visual Basic. Je débute dans ce langage de programmation (ce qui va vite se voir dans ma façon de programmer !!) et je suis confronté à l’erreur 1004 et je ne trouve pas de solution depuis 3 bonnes semaines !!!!
Je dois automatiser des « feuilles de test » (ces feuilles sont utilisées pour valider ou non le bon fonctionnement d’instruments).
Mon fichier Excel se présente sous la forme suivante :
- j’ai une feuille « liste » qui permet de répertorier l’ensemble des instruments
- puis 5 feuilles modèles (« MODEL_ ») qui me servent de base pour créer les feuilles de test pour chacun des instruments
Voici comment fonctionne ma macro :
Lorsque je clique sur un bouton « individuel » présent sur la feuille « liste », les feuilles de test sont créées automatiquement (à condition qu’elles n’existent pas déjà). Pour cela, suivant dans quelle catégorie se trouve l’instrument, la feuille modèle correspondante est copiée puis collée (et complétée à partir des renseignement présents sur la page « liste ») sur une nouvelle feuille du classeur (renommée d’après la référence de l’instrument).
J’utilise essentiellement le code suivant :
‘ exemple pour créer une feuille de test pour un moteur
Sheets("MODEL_MOTEUR").Select
'Sheets.Add.Copy before:=Sheets("liste")
Sheets("MODEL_MOTEUR").Copy before:=Sheets("liste")
repere = Feuil1.repere
ActiveSheet.Name = repere
Le soucis c’est que lorsque j’exécute la macro, j’obtiens au mieux 53 feuilles de test créées et après j’ai l’erreur 1004 (la méthode copie de la classe worksheet a échoué) qui provient de la ligne Sheets("MODEL_MOTEUR").Copy before:=Sheets("liste"). Si je ferme puis j’ouvre à nouveau le classeur Excel et que je lance la macro, je parviens à faire quelques feuilles de test supplémentaires …
Le problème viendrait-il du fait qu’il n’y ait plus de place pour créer d’autres feuilles ou qu’au bout d’un nombre répétitif de copier coller, Excel ne sait plus où il en est ???
Sauf que ce problème est bien embêtant car la liste d’instruments peut être très très très longue (300 et + instruments) donc dans tous les cas ; sera-il possible de créer autant de feuilles de test sous un même classeur sachant que je dois le faire obligatoirement sous Excel ???? Mais si vous m’aider à trouver une solution pour en faire 150 voire 200 en une seule fois, c’est déjà pas mal !
J’avais pensé créer deux classeurs Excel, l’un pour les feuilles modèle, l’autre pour la feuille liste et les feuilles de test à créer. Pensez-vous que cette solution permettrait de libérer un peu d’espace (si le problème vient de là) pour créer plus de feuilles de test ???? car il est vrai que les feuilles modèles sont un peu gourmandes en mémoire peut être (mais je ne peux pas trop changer la mise en page).
Merci pour votre aide.
J’aimerais bien vous joindre le fichier Excel, si ça peut vous aider, mais je ne sais pas comment faire (j’ai pas trouvé de rubrique pièces jointes ou quelque chose du même genre)
(La version installée sur les ordinateurs est Excel 2002)
Je suis stagiaire en entreprise et je suis en train de programmer en Visual Basic. Je débute dans ce langage de programmation (ce qui va vite se voir dans ma façon de programmer !!) et je suis confronté à l’erreur 1004 et je ne trouve pas de solution depuis 3 bonnes semaines !!!!
Je dois automatiser des « feuilles de test » (ces feuilles sont utilisées pour valider ou non le bon fonctionnement d’instruments).
Mon fichier Excel se présente sous la forme suivante :
- j’ai une feuille « liste » qui permet de répertorier l’ensemble des instruments
- puis 5 feuilles modèles (« MODEL_ ») qui me servent de base pour créer les feuilles de test pour chacun des instruments
Voici comment fonctionne ma macro :
Lorsque je clique sur un bouton « individuel » présent sur la feuille « liste », les feuilles de test sont créées automatiquement (à condition qu’elles n’existent pas déjà). Pour cela, suivant dans quelle catégorie se trouve l’instrument, la feuille modèle correspondante est copiée puis collée (et complétée à partir des renseignement présents sur la page « liste ») sur une nouvelle feuille du classeur (renommée d’après la référence de l’instrument).
J’utilise essentiellement le code suivant :
‘ exemple pour créer une feuille de test pour un moteur
Sheets("MODEL_MOTEUR").Select
'Sheets.Add.Copy before:=Sheets("liste")
Sheets("MODEL_MOTEUR").Copy before:=Sheets("liste")
repere = Feuil1.repere
ActiveSheet.Name = repere
Le soucis c’est que lorsque j’exécute la macro, j’obtiens au mieux 53 feuilles de test créées et après j’ai l’erreur 1004 (la méthode copie de la classe worksheet a échoué) qui provient de la ligne Sheets("MODEL_MOTEUR").Copy before:=Sheets("liste"). Si je ferme puis j’ouvre à nouveau le classeur Excel et que je lance la macro, je parviens à faire quelques feuilles de test supplémentaires …
Le problème viendrait-il du fait qu’il n’y ait plus de place pour créer d’autres feuilles ou qu’au bout d’un nombre répétitif de copier coller, Excel ne sait plus où il en est ???
Sauf que ce problème est bien embêtant car la liste d’instruments peut être très très très longue (300 et + instruments) donc dans tous les cas ; sera-il possible de créer autant de feuilles de test sous un même classeur sachant que je dois le faire obligatoirement sous Excel ???? Mais si vous m’aider à trouver une solution pour en faire 150 voire 200 en une seule fois, c’est déjà pas mal !
J’avais pensé créer deux classeurs Excel, l’un pour les feuilles modèle, l’autre pour la feuille liste et les feuilles de test à créer. Pensez-vous que cette solution permettrait de libérer un peu d’espace (si le problème vient de là) pour créer plus de feuilles de test ???? car il est vrai que les feuilles modèles sont un peu gourmandes en mémoire peut être (mais je ne peux pas trop changer la mise en page).
Merci pour votre aide.
J’aimerais bien vous joindre le fichier Excel, si ça peut vous aider, mais je ne sais pas comment faire (j’ai pas trouvé de rubrique pièces jointes ou quelque chose du même genre)
(La version installée sur les ordinateurs est Excel 2002)
A voir également:
- Erreur 1004
- Erreur t32 ✓ - Forum Livebox
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Une erreur s'est produite instagram ✓ - Forum Instagram
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
9 réponses
Salut,
Il sera peut être mieux d'afficher la partie de code où tu as la ligne en jaune (celle qui génère l'erreur).
Il sera peut être mieux d'afficher la partie de code où tu as la ligne en jaune (celle qui génère l'erreur).
Bonjour, voici une partie du code :
Sub MOTEUR()
'on fait une copie du modèle MOTEUR que l'on sauvegarde au nom du repère
Sheets("MODEL_MOTEUR").Select
'Sheets.Add.Copy before:=Sheets("liste")
Sheets("MODEL_MOTEUR").Copy before:=Sheets("liste") 'c'est la ligne qui génère l'erreur
repere = Feuil1.repere
ActiveSheet.Name = repere
ActiveWorkbook.Sheets(repere).Tab.ColorIndex = 34
'renseignement cellule affaire
affaire = Feuil1.affaire
Range("C1") = affaire
'renseignement cellule n° affaire
numero_affaire = Feuil1.numero_affaire
Range("C2") = numero_affaire
'renseignement cellule n° feuille de test
Worksheets(repere).Cells(1, 12).Value = "TEST" + "_" + "MOT" + "_" + "1"
'renseignement cellule opérateur
opérateur = Feuil1.opérateur
Range("K2") = opérateur
'renseignement cellule repère
Range("E5") = repere
'renseignement cellule localisation
localisation = Feuil1.localisation
Range("C13") = localisation
'renseignement cellule désignation
désignation = Feuil1.désignation
Range("F6") = désignation
'création d'un bouton permettant de revenir à la feuille "liste"
ActiveSheet.Buttons.Add(525, 25, 75, 15).Select
Selection.Characters.Text = "retour liste"
Selection.OnAction = "retourliste"
'on renseigne la cellule de la colonne création feuille test pour montrer que la
'feuille de test à bien été créée
Worksheets("liste").Select
i = Feuil1.i
Cells(i, 5) = "-OK-"
End Sub
Par contre, hier, j'ai essayé de faire 2 fichiers Excels, dans le premier, j'ai ma feuille "liste" et les 5 feuilles modèles, le deuxième fichier Excel sert à enregistrer les feuilles de test créées. Avec ce changement, j'arrive à créer 90 feuilles de test mais j'ai toujours le même message d'erreur qui survient.
J'espère que vous aller pouvoir m'aider ...
Sub MOTEUR()
'on fait une copie du modèle MOTEUR que l'on sauvegarde au nom du repère
Sheets("MODEL_MOTEUR").Select
'Sheets.Add.Copy before:=Sheets("liste")
Sheets("MODEL_MOTEUR").Copy before:=Sheets("liste") 'c'est la ligne qui génère l'erreur
repere = Feuil1.repere
ActiveSheet.Name = repere
ActiveWorkbook.Sheets(repere).Tab.ColorIndex = 34
'renseignement cellule affaire
affaire = Feuil1.affaire
Range("C1") = affaire
'renseignement cellule n° affaire
numero_affaire = Feuil1.numero_affaire
Range("C2") = numero_affaire
'renseignement cellule n° feuille de test
Worksheets(repere).Cells(1, 12).Value = "TEST" + "_" + "MOT" + "_" + "1"
'renseignement cellule opérateur
opérateur = Feuil1.opérateur
Range("K2") = opérateur
'renseignement cellule repère
Range("E5") = repere
'renseignement cellule localisation
localisation = Feuil1.localisation
Range("C13") = localisation
'renseignement cellule désignation
désignation = Feuil1.désignation
Range("F6") = désignation
'création d'un bouton permettant de revenir à la feuille "liste"
ActiveSheet.Buttons.Add(525, 25, 75, 15).Select
Selection.Characters.Text = "retour liste"
Selection.OnAction = "retourliste"
'on renseigne la cellule de la colonne création feuille test pour montrer que la
'feuille de test à bien été créée
Worksheets("liste").Select
i = Feuil1.i
Cells(i, 5) = "-OK-"
End Sub
Par contre, hier, j'ai essayé de faire 2 fichiers Excels, dans le premier, j'ai ma feuille "liste" et les 5 feuilles modèles, le deuxième fichier Excel sert à enregistrer les feuilles de test créées. Avec ce changement, j'arrive à créer 90 feuilles de test mais j'ai toujours le même message d'erreur qui survient.
J'espère que vous aller pouvoir m'aider ...
Salut,
Je viens de tester juste la ligne sur un claseur
Je viens de tester juste la ligne sur un claseur
Sub cp()
Sheets("MODEL_MOTEUR").Copy before:=Sheets("liste")
End Subet il n'y a pas d'erreur.
Bonjour,
pourquoi ne pas créer un classeur de test à chaque fois (en les plaçant ds un dossier test par ex) ? En effet un classeur contenant + de 100 feuilles sera difficilement navigable et tres gourmand en mémoire (d'où ton pb). Pour info, le nombre de feuilles est exclusivement limité par la mémoire disponible : http://office.microsoft.com/fr-fr/excel/HP051992911036.aspx
pourquoi ne pas créer un classeur de test à chaque fois (en les plaçant ds un dossier test par ex) ? En effet un classeur contenant + de 100 feuilles sera difficilement navigable et tres gourmand en mémoire (d'où ton pb). Pour info, le nombre de feuilles est exclusivement limité par la mémoire disponible : http://office.microsoft.com/fr-fr/excel/HP051992911036.aspx
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En effet, ça peut être une solution mais mon mapitre de stage voulait limiter au minimum le nombre de fichiers Excel, un fichier unique lui serait très bien allé. Mais si mon problème vient de la mémoire disponible, je ne vais pas pouvoir y faire grand chose ...
Je vais lui proposer plusieurs fichiers Excel.
Merci beaucoup
(et puis s'il vous vient une autre idée, je prends toujours !)
Je vais lui proposer plusieurs fichiers Excel.
Merci beaucoup
(et puis s'il vous vient une autre idée, je prends toujours !)
Par contre, j'ai un autre souci.
Voici ce que j'essaie de faire :
je créé 80 premières feuilles de test (je pars sur une base de 80 pour ne pas rencontrer l'erreur 1004) dans un fichier nommé TEST1, puis les 80 feuilles de test suivantes dans un fichier nommé TEST2, .. etc
Pour créer les 80 premières feuilles de test, j'associe le code suivant à un bouton de commande :
Private Sub CommandButton2_Click()
nom = ThisWorkbook.Name
'Quand numTESTexcel est à 1,les feuilles de test sont créées dans le fichier TEST1.xls
numTESTexcel = 1
'ouverture du fichier Excel "TEST1.xls" dans lequel vont être sauvegardées les feuilles
'de test
On Error Resume Next
Workbooks.Open ("C:\AFFAIRES\feuilles de test\TEST1.xls")
For i = 4 To 84
Application.ScreenUpdating = False
'lecture du contenu des cellules correspondant au repère, au nom de l'affaire, ...
Workbooks(nom).Activate
Sheets("liste").Select
repere = Cells(i, 2)
affaire = Cells(1, 2)
numero_affaire = Cells(2, 2)
famille = Cells(i, 1)
désignation = Cells(i, 3)
localisation = Cells(i, 4)
opérateur = Cells(2, 4)
valid_feuillTest = Cells(i, 5)
'appel à la macro "feuille_test"
Call feuille_test
Next i
Application.ScreenUpdating = True
Application.CutCopyMode = False
ActiveWorkbook.Save
End Sub
Pour créer les 80 feuilles de test suivantes, j'utilise un autre bouton de commande dont le code est similaire à celui-ci (seule le contenu de numTESTexcel est mis à 2 pour que les feuilles de test soient créées dans le classeur "TEST2.xls)
Lorsque j'exécute la macro CommandButton2_Click(), 80 feuilles de tests sont bien créées. Puis lorsque j'exécute la seconde macro, seules 40 feuilles de test supplémentaires sont créées (au lieu de 80) et j'ai encore une erreur 1004.
En revanche, si j'exécute CommandButton2_Click(), que je ferme le fichier Excel, que je le réouvre, que j'exécute la seconde macro, cette fois, j'ai bien 80 nouvelles feuilles supplémentaires créées !?
J'ai comme l'impression que je vais pas m'en sortir ...
Voici ce que j'essaie de faire :
je créé 80 premières feuilles de test (je pars sur une base de 80 pour ne pas rencontrer l'erreur 1004) dans un fichier nommé TEST1, puis les 80 feuilles de test suivantes dans un fichier nommé TEST2, .. etc
Pour créer les 80 premières feuilles de test, j'associe le code suivant à un bouton de commande :
Private Sub CommandButton2_Click()
nom = ThisWorkbook.Name
'Quand numTESTexcel est à 1,les feuilles de test sont créées dans le fichier TEST1.xls
numTESTexcel = 1
'ouverture du fichier Excel "TEST1.xls" dans lequel vont être sauvegardées les feuilles
'de test
On Error Resume Next
Workbooks.Open ("C:\AFFAIRES\feuilles de test\TEST1.xls")
For i = 4 To 84
Application.ScreenUpdating = False
'lecture du contenu des cellules correspondant au repère, au nom de l'affaire, ...
Workbooks(nom).Activate
Sheets("liste").Select
repere = Cells(i, 2)
affaire = Cells(1, 2)
numero_affaire = Cells(2, 2)
famille = Cells(i, 1)
désignation = Cells(i, 3)
localisation = Cells(i, 4)
opérateur = Cells(2, 4)
valid_feuillTest = Cells(i, 5)
'appel à la macro "feuille_test"
Call feuille_test
Next i
Application.ScreenUpdating = True
Application.CutCopyMode = False
ActiveWorkbook.Save
End Sub
Pour créer les 80 feuilles de test suivantes, j'utilise un autre bouton de commande dont le code est similaire à celui-ci (seule le contenu de numTESTexcel est mis à 2 pour que les feuilles de test soient créées dans le classeur "TEST2.xls)
Lorsque j'exécute la macro CommandButton2_Click(), 80 feuilles de tests sont bien créées. Puis lorsque j'exécute la seconde macro, seules 40 feuilles de test supplémentaires sont créées (au lieu de 80) et j'ai encore une erreur 1004.
En revanche, si j'exécute CommandButton2_Click(), que je ferme le fichier Excel, que je le réouvre, que j'exécute la seconde macro, cette fois, j'ai bien 80 nouvelles feuilles supplémentaires créées !?
J'ai comme l'impression que je vais pas m'en sortir ...
Le probleme est que ton premier fichier est encore ouvert et occupe l'espace mémoire, ferme le avant de créer le 2nd...
Bonjour,
finalement, je n'ai plus d'erreur 1004 ! Merci pour vos conseils.
Par contre, j'ai encore une petite question. Lorsqu'une feuille de test est créée, elle est enregistrée dans le fichier TEST.xls. Seulement, si cette feuille existe déjà dans le fichier TEST, l'exécution de mon code (tel que je l'ai écrit) sauvegarde quand même la feuille de test dans le fichier TEST mais sans pouvoir la renommer car une feuille du même nom existe déjà ! (par défaut, elle porte le nom du MODEL utilisé)
Je voulais alors faire la chose suivante :
- si dans le fichier TEST aucune feuille ne porte le nom de celle que je suis en train de créer, on peut effectivement la sauvegarder
- en revanche, si cette feuille existait déjà dans le fichier TEST, je voudrai supprimer cette nouvelle feuille (qui est son double en fait)
Alors j'ai utilisé le code suivant mais il y a un souci :
'la feuille de test créée est renommée suivant le repère de l'instrument
repere = Feuil1.repere
On Error Resume Next
a = 200
Set WBK = Sheets(repere)
's'il n'existe pas de feuille nommée repere, on peut sauvegarder la feuille test
'créée sous le nom repere
If WBK Is Nothing Then a = 100
Select Case a
Case a = 100: ActiveSheet.Name = repere
'si une feuille de test existe déjà sous le nom repere, on supprime son double
'qu'on vient de créer
Case Else: Application.DisplayAlerts = False 'désactivation des messages d'alerte
ActiveSheet.Select
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Select
On Error GoTo 0
le contenu de a change bien de valeur suivant dans quel cas on se trouve, mais quand le code passe à la ligne "select case", il n'en tient pas compte. donc je me retrouve toujours dans le cas "case else" (ce qui fait que la feuille créée est systématiquement supprimée qu'elle existe déjà ou pas).
Qu'est-ce que vous en pensez ?
finalement, je n'ai plus d'erreur 1004 ! Merci pour vos conseils.
Par contre, j'ai encore une petite question. Lorsqu'une feuille de test est créée, elle est enregistrée dans le fichier TEST.xls. Seulement, si cette feuille existe déjà dans le fichier TEST, l'exécution de mon code (tel que je l'ai écrit) sauvegarde quand même la feuille de test dans le fichier TEST mais sans pouvoir la renommer car une feuille du même nom existe déjà ! (par défaut, elle porte le nom du MODEL utilisé)
Je voulais alors faire la chose suivante :
- si dans le fichier TEST aucune feuille ne porte le nom de celle que je suis en train de créer, on peut effectivement la sauvegarder
- en revanche, si cette feuille existait déjà dans le fichier TEST, je voudrai supprimer cette nouvelle feuille (qui est son double en fait)
Alors j'ai utilisé le code suivant mais il y a un souci :
'la feuille de test créée est renommée suivant le repère de l'instrument
repere = Feuil1.repere
On Error Resume Next
a = 200
Set WBK = Sheets(repere)
's'il n'existe pas de feuille nommée repere, on peut sauvegarder la feuille test
'créée sous le nom repere
If WBK Is Nothing Then a = 100
Select Case a
Case a = 100: ActiveSheet.Name = repere
'si une feuille de test existe déjà sous le nom repere, on supprime son double
'qu'on vient de créer
Case Else: Application.DisplayAlerts = False 'désactivation des messages d'alerte
ActiveSheet.Select
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Select
On Error GoTo 0
le contenu de a change bien de valeur suivant dans quel cas on se trouve, mais quand le code passe à la ligne "select case", il n'en tient pas compte. donc je me retrouve toujours dans le cas "case else" (ce qui fait que la feuille créée est systématiquement supprimée qu'elle existe déjà ou pas).
Qu'est-ce que vous en pensez ?
Re,
J'ais pas excel sous la main mais pour tester l'existence d'un feuille essaye plutot un truc du genre (syntaxe à verifier) :
Tiens nous au courant ;)
J'ais pas excel sous la main mais pour tester l'existence d'un feuille essaye plutot un truc du genre (syntaxe à verifier) :
For each ws in workbooks("Test.xls").worksheets
if worksheet.name = mavariablestring then
Ce que tu veux faire si la feuille existe déjà
end if
next ws
Tiens nous au courant ;)