Erreur VBA 1004 avec Sheets("").Copy after:

BAROTOLI

XLDnaute Nouveau
Bonjour à toutes et tous,

J'ai un petit problème avec une macro qui me génére une erreur 1004, au bout d'un certain nombre de lancement de cette macro. J'aimerai bien comprendre pourquoi, et surtout résoudre le problème...

A la sueur de mon front (car je suis débutant) j'ai crée une petite macro qui duplique et renomme un onglet appelé VIERGE en fonction d'une liste se trouvant dans un onglet CONTENTS.
J'utilise Sheets('VIERGE').Copy after:=Worksheets(F).
Lorsque je lance la macro tout se passe bien.
Mais si j'efface les onglets crées et que je relance la macro, au bout d'un certain nombre d'onglets crées, je vais avoir droit à une erreur 1004.
Je joint le fichier concerné.
La macro (Sub CREATION_CF()) se lance en cliquant sur le bouton CREATE ALL COST CENTER dans l'onglet CONTENTS.

D'avance un BIG MERCI à la personne qui pourra m'aider
A bientôt,
Olivier
 

tysd08

XLDnaute Nouveau
Re : Erreur VBA 1004 avec Sheets("").Copy after:

Bjr pierrejean, Bjr tototiti2008 et Bjr à vous autres,

Tout d'abord Merci pour votre aide !

1/ pierrejean, tu trouveras en pièce jointe la macro :
elle plante au bout de 4 exécutions au travail et au bout de 3 exécutions chez moi.

J'ai allégé la macro et le fichier au maximum pour pouvoir l'envoyer...mais du coup, elle fonctionne (en tout cas avec 54 exécutions) !
Il suffit de rajouter des lignes et des colonnes dans l'onglet "S" et normalement en l'exécutant, la macro plante après un ecertain nombre d'exécution.

Comme dit tototiti2008, il n'y a pas de limite en nbr d'onglet sur la version 2002.
Contrairement à ce qu'on peut lire sur Internet, ce n'est pas un pb de mémoire ou de presse papier...

2/ tototiti2008, si vraiment c'est un pb référencé par Microsoft, je ne peyx faire autrement car la solution de rajouter une feuille vierge ne me satisfait pas car dans la feuille "MODELE", il y a des formule, il y a une mise en forme...

3/ conclusion, suis-je bloqué ?

Merci
 

Pièces jointes

  • tysd08.zip
    48.8 KB · Affichages: 45

pierrejean

XLDnaute Barbatruc
Re : Erreur VBA 1004 avec Sheets("").Copy after:

Re

Je suis en version Office 2000 Excel 9.0

Et en mettant en colonne B de la feuille S une suite de nombres de 1 a 333 je tombe sur l'erreur 1004 avec pour Lig dans
NomCollaborateur = Cells(Lig, 2).Value
la valeur de 271 et dans la feuille S la ligne 271 vaut 256
J'avais voulu mettre plus de chose dans la feuille MODELE mais la portion de code
While ActiveCell.Value <> Col
ActiveCell.Offset(1, 0).Select
Wend
m'a conduit dans la 1ere feuille créee a la ligne 65536

Peux-tu expliquer ce que doit faire la macro a partir de

'boucle les semaines du trimestre

Par ailleurs si le nombre de feuilles a copier n'excede pas 256 ,je pense que l'on doit s'accrocher et chercher a comprendre ce qu'il se passe
 

tysd08

XLDnaute Nouveau
Re : Erreur VBA 1004 avec Sheets("").Copy after:

Bjr pierrejean,

L'onglet "S" c'est en fait l'onglet du planning trimestriel de collaborateurs ; en colonne "B", on a les noms de collaborateurs et dans les colonnes allant de "F" à "ER, on a les 13 semaines d'un trimestre.
Donc l'onglet "S" contient les plages horaire des collaborateurs.

L'objet du traitement est de créer un onglet par collaborateur avec son planning trimestriel ; copier/coller des tranches horaires de "S" vers un onglet créé avec le nom du collaborateur.

Le fait de créer et de supprimer les onglets à chaque mise à jour permet de supprimer les collaborateurs sortant, de créer les onglets de collaborateurs entrants... Supprimer tous et recréer tout permet de synchroniser les données de l'onglet "S" et les plannings individuels.

La fonction "Der_Lig" permet de déterminer le dernier nom du collaborateur de l'onglet "S" ; le while de cette fonction se base sur le psotulat : "si 2 lignes vides consécutives alors plus de collaborateurs".

Et le programme boucle donc sur le nombre de collaborateurs et pour chacun d'eux boucle sur les 13 semaines du trimestre.

C'est un peu long mais j'espère avoir été assez précis...
 

pierrejean

XLDnaute Barbatruc
Re : Erreur VBA 1004 avec Sheets("").Copy after:

Re

J'ai pas mal trituré le fichier et mes méninges mais la moins mauvaise solution que j'ai pu trouver est la suivante:
Decomposer la macro P_T en deux
D'abord la suppression des feuilles, puis la reconstitution
Mais entre les deux il est imperatif de sauvegarder !!!!
Vois le fichier joint:
J'ai pu a 5 ou 6 reprises creer 200 feuilles , les supprimer puis les recreer
Manip:
ouvrir, lancer la macro P_T ,puis la macro suppression , Enregistrer avec Sauvegarde
Pour l'utilisation ,il va de soi que c'est
Ouvrir, Supprimer, Fermer avec sauvegarde ,Creer
 

Pièces jointes

  • tysd08V1.zip
    66.5 KB · Affichages: 64

tysd08

XLDnaute Nouveau
Re : Erreur VBA 1004 avec Sheets("").Copy after:

Merci pierrejean pour ton temps.
Sympa le sub suppression avec le step -1 !
Je ferais donc des cycles de [manip planning puis sauvegarde puis fermeture].

Ce n'est pas grave dans le cas présent car le planning n'est pas destiné à gérer plus de 100 collaborateurs mais il reste la question : pourquoi tu peux faire 5 à 6 exécutions alors que moi ça plante après la première.

Encore merci pour ton aide précieuse !
 

pijaku

XLDnaute Occasionnel
Re : Erreur VBA 1004 avec Sheets("").Copy after:

Bonjour à tous,
Je "déterre" un vieux post pour apporter, peut être un élément de réponse (ça peux toujours être utile à d'autres utilisateurs ayant le même problème). J'ai eu le même cas de macro qui fonctionnait mais pas toujours (erreur 1004).
Mon problème était la copie d'une feuille après sa sélection bien évidemment :
Sheets("Feuil1").Select
Sheets("Feuil1").Copy
Excel m'indiquait : erreur 1004 pas possible copy.....
Ma macro étant lancée par un commandbutton, je me suis demandé si le problème ne venait pas de là... Et apparemment oui c'était ça. Le bouton étant "activé", la copie de ma feuille était impossible.
J'ai résolu ce souci, dans mon cas, par ceci :
Sheets("Feuil1").Select
ActiveSheet.Range("I22").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = ""
ActiveSheet.Range("A1").Select
Sheets("Feuil1").Copy
Je ne vous dérange pas plus longtemps ;-)
@+
 

Discussions similaires

Réponses
1
Affichages
609

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 184
dernier inscrit
amiko