RELYON
Messages postés5Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention30 novembre 2006
-
17 nov. 2006 à 13:53
Patalou
Messages postés15Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention10 mai 2007
-
10 mai 2007 à 16:12
Bonjour
A partir d'une feuille excel, où un nombre " x "de colonnes servent de base de données, j'ai une macro qui cree un meme nombre " x "de feuilles. Cette macro copie une feuille "réference" et la renomme selon un parametre de la colonne "A", "feuille A" et remplie cette meme feuille "A", de renseignements pris dans la colonne A, ensuite elle recopie la feuille "reference" et fait de meme avec les autres colonnes. J'arrive a faire environs 80 feuilles, en 1 ou plusieurs activations de la macros, ensuite suivient un probleme" Erreur 1004 la methode copie de la classe worksheet à echouée". Il faut que je supprime les feuilles crées, que je ferme excel, et cela remarche.
Est ce un probleme de memoire? comment pourrai je eviter ce problème.
merci
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 17 nov. 2006 à 14:04
Salut! Non c'est pas un problème de mémoire, il ne trouve plus la feuille que tu veux sélectionner! Avant de sélectionner cette feuille tu fait un worbook("nom").Activate. En tout quand j'ai cette erreur si je fais ça je ne l'ai plus. Mais ça peux venir d'autre part aussi!
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 17 nov. 2006 à 14:06
Si cela peut t'aider:
Public Function CopierFeuilleExcel(ByVal sMonBookDeCopie As String, ByVal sMonBookDeDestination As String, _
ByVal sNomFeuilleACopier As String, ByVal sNomFeuilleCopier As String)
If Dir(sMonBookDeCopie) <> "" And Dir(sMonBookDeDestination) <> "" Then
Dim xlApp As Excel.Application
Dim xlBookDeCopie As Workbook
Dim xlBookDeDestination As Workbook
Dim i As Integer
Dim j As Integer
If sMonBookDeCopie <> sMonBookDeDestination Then
Set xlApp = CreateObject("Excel.Application")
Set xlBookDeCopie = xlApp.Workbooks.Open(sMonBookDeCopie)
Set xlBookDeDestination = xlApp.Workbooks.Open(sMonBookDeDestination)
For i = 1 To xlBookDeCopie.Sheets.Count
If xlBookDeCopie.Sheets(i).Name = sNomFeuilleACopier Then
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 17 nov. 2006 à 19:45
Salut,
il faut faire attention, lors des copies de feuilles, aux noms données (excel ne peut accepter de doublons dans les noms des Sheets).
De plus, il faut être vigilent sur le paramètre before et after de la procédure Copy.
(ex. si tu dis after une feuille non existante, cela provoque une erreur)
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 21 nov. 2006 à 08:11
Salut mortalino, pour ton commentaire, donc si la feuille à copier n'existe pas, il ne fait pas la copie, si le nom de la feuille copiée existe déjà, il ne la renomme pas et pour after, il ajoute la feuille après le dernière feuille (dernier index). Mais sinon j'ai pas réussi à mettre after ou before en paramètre, si tu as une idée!
C'est testé et ça fonctionne, peut-être que l'antivirus vous bloquera cette manip mais pour le mien, il me prévient mais laisse l'opportunité d'exécuter la ligne de code.
Après quand je disais de faire attention au before et after, c'est si par exemple :
Sheets("Feuil3").Copy After:=Sheets(6)
Et si t'as que 3 feuilles, t'auras une erreur d'ecécution, indice n'appartient pas à la selection.
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
benfal
Messages postés1Date d'inscriptionvendredi 24 novembre 2006StatutMembreDernière intervention24 novembre 2006 24 nov. 2006 à 17:33
bonjour,
j'ai le même problème, en recopiant des feuilles (1 par jour) de chaque mois, j'ai un blocage le 26 du mois..
au debut du developpement de mon appli, la macro fonctionnait sans problème jusqu'en fin de mois. j'ai ensuite rajouté des feuilles supplémentaires et depuis apparition du problème (pas de modif du code de la macro)
j'avais trouvé un post ou il étatit question d'une limitation d'Excel en nombre d'objets pouvant être manipulés lors d'une instance VB. je n'ai pas retrouvé ce post ni de doc s'y rapportant.
2 questions :
ton pb est-il resolu et si oui, comment ?
avez vous entendu parler ce ces limitations ?
pour info je met le code qui bloque lors de la 27ème iterations :-((
Worksheets("Semaine").Copy before:=Worksheets("Semaine")
RELYON
Messages postés5Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention30 novembre 2006 27 nov. 2006 à 09:21
bonjour,
merci de la réponse, mon problème est toujours le meme, la macro en vba fonctionne pour environ 80 feuilles, et plante. Il faut que je supprime les feuilles qu'elle vient de rajouter, sauve le fichier, et sorte d'excel. Je reouvre excel et le fichier et je recommence, et c'est reparti pour 80 feuilles. C'est ce qui me fait croire à un probleme de capacité. La macro fait aussi pas mal de calculs pour chaque feuille, je vais essayer de faire une macro toute simple, en dupliquant une feuille x, sans calcul. Je verrai si elle en fait plus. Je te tiens au courant
a+
robert
RELYON
Messages postés5Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention30 novembre 2006 29 nov. 2006 à 13:45
Bonjour,
qui peut essayer cette macro ci dessous en la reactivant 3 fois de suit . A la troisieme, elle va copier 28 feuilles et s"arreter sur ce message: Erreur "1004 " la methode copy de la classe worksheet à echoué.
Comment resoudre ce problème?
merci
Robert
Sub copyfeuille()
'
' copyfeuille Macro
' Macro enregistrée le 29/11/2006
'nom de la feuille a copier: acopier
'nom de la feuille copiée: copiée et le N° incrementé par la variable "a"
a = 1
For i = 1 To 60
Sheets("acopier").Select
Sheets("acopier").Copy before:=Sheets(1)
Sheets("acopier (2)").Select
Sheets("acopier (2)").Name = "copiée" & a
Range("C25").Select
a = a + 1
Next i
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 29 nov. 2006 à 13:52
Salut j'ai pas eu d'erreur il a fait les 60 copies!
Et j'ai utilisé exactement ce code! 3 fois de suite en supprimant toutes les feuilles déjà copier avant de relancer la macro!
Drikce 06
Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 30 nov. 2006 à 14:09
Ben franchement je sais pas d'où cela peut venir, essaye sur un autre poste pour voir! En tout cas chez moi ça a fonctionné nickel! (J'ai excel 2003 avec office11) Désolé je ne peux pas plus pour toi!
Drikce 06
Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Patalou
Messages postés15Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention10 mai 2007 10 mai 2007 à 16:12
Salut,
[quote=Drike]
Salut j'ai pas eu d'erreur il a fait les 60 copies!
Et j'ai utilisé exactement ce code! 3 fois de suite en supprimant toutes les feuilles déjà copier avant de relancer la macro!/quote C'est parce que tu supprimes les feuilles déjà copiées que ça marche, si tu fais le même test en laissant les feuilles copiées, tu auras le message d'erreur comme quoi il ne peut plus copier.
C'est un bug d'Excel qui est limite le nombre de feuilles copiées. Je cherche aussi des informations sur internet pour voir si on peut passer outre ce bug mais la seule chose que je trouve est de créer une nouvelle feuille vierge et copier/coller le contenu de la première feuille.
Ce qui n'arrange pas tout le temps le problème car ce n'est pas exactement une copie de feuilles, les propriétés de la seconde feuille ne sont pas les mêmes.