Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

La méthode Copy de la classe Worksheet a échoué...

4 réponses
Avatar
Jac
Bonjour à tous,

dans un classeur contenant 3 feuilles au départ, la première avec des
variables, la deuxième avec des calculs, et la troisième qui reprend
les données de la feuille 2 par de simples calculs, je génère par vba
autant de feuilles que nécessaire en dupliquant la troisième feuille
après la dernière, puis je la renomme (de 1 à x), puis je copie son
contenu et je ne colle que les résultats.

Mais le problème, c'est que quand j'arrive à la création de la feuille
181 la macro s'arrête sur l'instruction
Sheets("Fiche plan action").Copy After:=Sheets(Sheets.Count)
et me renvoie le laconique message d'erreur
"La méthode Copy de la classe Worksheet a échoué."

Le fichier ne fait que 2.535 ko.
Sont ouverts en même temps un fichier de 433 ko avec la macro et un
autre de 6.778 ko avec 462 feuilles contenant des variables, fichiers
nécessaires au fonctionnement de la procédure. La charge du proc tourne
autour de 60%.

La procédure me semble assez au point et assez déboguée car elle a déjà
généré 180 feuilles. J'ai déjà eu des classeurs beaucoup plus lourds,
avec beaucoup plus de feuilles... Je ne comprends pas pourquoi "ça"
s'arrête tout d'un coup. L'aide associée au message d'erreur est très
vague et ne m'aide en aucun cas. J'ai trié mes variables de Z à A et ça
s'arrête toujours à la feuille 180.

Y a t'il une explication rationnelle à cette interruption ?
Y a t'il moyen d'y remédier ?

Merci d'avance à qui pourrait éclairer ma lanterne.

Jac

4 réponses

Avatar
michdenis
Bonjour Jac,

En principe, il n'y a aucune raison pour que ta procédure s'arrête après
180 feuilles.
A ) quelques éléments à vérifier
- le nom de la feuille ne peut avoir plus de 31 caractères (espace compris)
- Ces caractères sont interdits dans le nom d'une feuille : * ? [ ] / :
- Évidemment, l'appellation d'un onglet ne peut pas être utiliser 2 fois.

B ) Sur une version d'Excel (97 je crois), il y avait un "bug" concernant le nom
(propriété NAME)
de la feuille créée. Regarde dans la fenêtre de l'éditeur de code, comment sont
écris le nom des objets "Feuille" de ton application. Est-ce que tu as des noms
avec une série de 111111111111111 à la fin de ceux-ci ? Il arrive que le nom
dépasse le nombre de caractère permis (31) et là ça bloque.

Au delà de ça, ta procédure devrait rouler !

Tu peux toujours publier ta procédure ici...




"Jac" a écrit dans le message de groupe de discussion :

Bonjour à tous,

dans un classeur contenant 3 feuilles au départ, la première avec des
variables, la deuxième avec des calculs, et la troisième qui reprend
les données de la feuille 2 par de simples calculs, je génère par vba
autant de feuilles que nécessaire en dupliquant la troisième feuille
après la dernière, puis je la renomme (de 1 à x), puis je copie son
contenu et je ne colle que les résultats.

Mais le problème, c'est que quand j'arrive à la création de la feuille
181 la macro s'arrête sur l'instruction
Sheets("Fiche plan action").Copy After:=Sheets(Sheets.Count)
et me renvoie le laconique message d'erreur
"La méthode Copy de la classe Worksheet a échoué."

Le fichier ne fait que 2.535 ko.
Sont ouverts en même temps un fichier de 433 ko avec la macro et un
autre de 6.778 ko avec 462 feuilles contenant des variables, fichiers
nécessaires au fonctionnement de la procédure. La charge du proc tourne
autour de 60%.

La procédure me semble assez au point et assez déboguée car elle a déjà
généré 180 feuilles. J'ai déjà eu des classeurs beaucoup plus lourds,
avec beaucoup plus de feuilles... Je ne comprends pas pourquoi "ça"
s'arrête tout d'un coup. L'aide associée au message d'erreur est très
vague et ne m'aide en aucun cas. J'ai trié mes variables de Z à A et ça
s'arrête toujours à la feuille 180.

Y a t'il une explication rationnelle à cette interruption ?
Y a t'il moyen d'y remédier ?

Merci d'avance à qui pourrait éclairer ma lanterne.

Jac
Avatar
Jac
Bonjour Michdenis,

pour ce qui est du nom des feuilles, elles sont numérotées à la suite :
de 1 à 180 puisque c'est là que ça s'arrête et je suis en XL 2003 donc
pas vraiment concerné par le bug de 97. Je recontrôle et si nécessaire,
je vais préparer le fichiers et les publier plus tard.

Le 13/09/2009, michdenis a supposé :
Bonjour Jac,

En principe, il n'y a aucune raison pour que ta procédure s'arrête après
180 feuilles.
A ) quelques éléments à vérifier
- le nom de la feuille ne peut avoir plus de 31 caractères (espace
compris) - Ces caractères sont interdits dans le nom d'une feuille : * ?
[ ] / : - Évidemment, l'appellation d'un onglet ne peut pas être
utiliser 2 fois.

B ) Sur une version d'Excel (97 je crois), il y avait un "bug" concernant le
nom (propriété NAME)
de la feuille créée. Regarde dans la fenêtre de l'éditeur de code,
comment sont écris le nom des objets "Feuille" de ton application. Est-ce
que tu as des noms avec une série de 111111111111111 à la fin de ceux-ci
? Il arrive que le nom dépasse le nombre de caractère permis (31) et là
ça bloque.

Au delà de ça, ta procédure devrait rouler !

Tu peux toujours publier ta procédure ici...




"Jac" a écrit dans le message de groupe de discussion :

Bonjour à tous,

dans un classeur contenant 3 feuilles au départ, la première avec des
variables, la deuxième avec des calculs, et la troisième qui reprend
les données de la feuille 2 par de simples calculs, je génère par vba
autant de feuilles que nécessaire en dupliquant la troisième feuille
après la dernière, puis je la renomme (de 1 à x), puis je copie son
contenu et je ne colle que les résultats.

Mais le problème, c'est que quand j'arrive à la création de la feuille
181 la macro s'arrête sur l'instruction
Sheets("Fiche plan action").Copy After:=Sheets(Sheets.Count)
et me renvoie le laconique message d'erreur
"La méthode Copy de la classe Worksheet a échoué."

Le fichier ne fait que 2.535 ko.
Sont ouverts en même temps un fichier de 433 ko avec la macro et un
autre de 6.778 ko avec 462 feuilles contenant des variables, fichiers
nécessaires au fonctionnement de la procédure. La charge du proc tourne
autour de 60%.

La procédure me semble assez au point et assez déboguée car elle a déjà
généré 180 feuilles. J'ai déjà eu des classeurs beaucoup plus lourds,
avec beaucoup plus de feuilles... Je ne comprends pas pourquoi "ça"
s'arrête tout d'un coup. L'aide associée au message d'erreur est très
vague et ne m'aide en aucun cas. J'ai trié mes variables de Z à A et ça
s'arrête toujours à la feuille 180.

Y a t'il une explication rationnelle à cette interruption ?
Y a t'il moyen d'y remédier ?

Merci d'avance à qui pourrait éclairer ma lanterne.

Jac


Avatar
michdenis
Si tu regardes au fil un plus récent de M. Cyr, il a un problème
similaire au tien. Ce que j'ai trouvé de problématique dans la
feuille qui copiait "semble" être les formules de la feuille.
sans les formules, la feuille se copie sans problème.

Une macro de ce type s'exécute sans anicroche.

Tu adaptes selon ton application

'------------------------------------------
Sub CreerFeuilles_Denis()
Dim Sh As Worksheet, X As Integer
Dim NF As Worksheet
Set Sh = Worksheets("Trame")

For Each c In ['Effectifs Repas'!B6:B45].SpecialCells(2, 23)
Set NF = Worksheets.Add
NF.Name = c.Value
With Sh.Cells
.Copy
NF.Cells.PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
End With
Next
End Sub
'------------------------------------------




"Jac" a écrit dans le message de groupe de discussion :

Bonjour Michdenis,

pour ce qui est du nom des feuilles, elles sont numérotées à la suite :
de 1 à 180 puisque c'est là que ça s'arrête et je suis en XL 2003 donc
pas vraiment concerné par le bug de 97. Je recontrôle et si nécessaire,
je vais préparer le fichiers et les publier plus tard.

Le 13/09/2009, michdenis a supposé :
Bonjour Jac,

En principe, il n'y a aucune raison pour que ta procédure s'arrête après
180 feuilles.
A ) quelques éléments à vérifier
- le nom de la feuille ne peut avoir plus de 31 caractères (espace
compris) - Ces caractères sont interdits dans le nom d'une feuille : * ?
[ ] / : - Évidemment, l'appellation d'un onglet ne peut pas être
utiliser 2 fois.

B ) Sur une version d'Excel (97 je crois), il y avait un "bug" concernant le
nom (propriété NAME)
de la feuille créée. Regarde dans la fenêtre de l'éditeur de code,
comment sont écris le nom des objets "Feuille" de ton application. Est-ce
que tu as des noms avec une série de 111111111111111 à la fin de ceux-ci
? Il arrive que le nom dépasse le nombre de caractère permis (31) et là
ça bloque.

Au delà de ça, ta procédure devrait rouler !

Tu peux toujours publier ta procédure ici...




"Jac" a écrit dans le message de groupe de discussion :

Bonjour à tous,

dans un classeur contenant 3 feuilles au départ, la première avec des
variables, la deuxième avec des calculs, et la troisième qui reprend
les données de la feuille 2 par de simples calculs, je génère par vba
autant de feuilles que nécessaire en dupliquant la troisième feuille
après la dernière, puis je la renomme (de 1 à x), puis je copie son
contenu et je ne colle que les résultats.

Mais le problème, c'est que quand j'arrive à la création de la feuille
181 la macro s'arrête sur l'instruction
Sheets("Fiche plan action").Copy After:=Sheets(Sheets.Count)
et me renvoie le laconique message d'erreur
"La méthode Copy de la classe Worksheet a échoué."

Le fichier ne fait que 2.535 ko.
Sont ouverts en même temps un fichier de 433 ko avec la macro et un
autre de 6.778 ko avec 462 feuilles contenant des variables, fichiers
nécessaires au fonctionnement de la procédure. La charge du proc tourne
autour de 60%.

La procédure me semble assez au point et assez déboguée car elle a déjà
généré 180 feuilles. J'ai déjà eu des classeurs beaucoup plus lourds,
avec beaucoup plus de feuilles... Je ne comprends pas pourquoi "ça"
s'arrête tout d'un coup. L'aide associée au message d'erreur est très
vague et ne m'aide en aucun cas. J'ai trié mes variables de Z à A et ça
s'arrête toujours à la feuille 180.

Y a t'il une explication rationnelle à cette interruption ?
Y a t'il moyen d'y remédier ?

Merci d'avance à qui pourrait éclairer ma lanterne.

Jac


Avatar
Jac
... j'ai modifié le code de la façon suivante :

je crée et numérote les 462 feuilles vides nécessaires
je copie les données de la source
je colle spécial les valeurs, puis les formats, puis les largeurs de
colonnes
je bricole encore un peu (zoom, cellule active)
puis je m'occupe des données suivantes.

Belotte, re-belotte et dix de der. Et là, tout fonctionne, sans
limitation.

Merci encore de t'être penché sur mon problème.


Après mûre réflexion, michdenis a écrit :
Si tu regardes au fil un plus récent de M. Cyr, il a un problème
similaire au tien. Ce que j'ai trouvé de problématique dans la
feuille qui copiait "semble" être les formules de la feuille.
sans les formules, la feuille se copie sans problème.

Une macro de ce type s'exécute sans anicroche.

Tu adaptes selon ton application

'------------------------------------------
Sub CreerFeuilles_Denis()
Dim Sh As Worksheet, X As Integer
Dim NF As Worksheet
Set Sh = Worksheets("Trame")

For Each c In ['Effectifs Repas'!B6:B45].SpecialCells(2, 23)
Set NF = Worksheets.Add
NF.Name = c.Value
With Sh.Cells
.Copy
NF.Cells.PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
End With
Next
End Sub
'------------------------------------------




"Jac" a écrit dans le message de groupe de discussion :

Bonjour Michdenis,

pour ce qui est du nom des feuilles, elles sont numérotées à la suite :
de 1 à 180 puisque c'est là que ça s'arrête et je suis en XL 2003 donc
pas vraiment concerné par le bug de 97. Je recontrôle et si nécessaire,
je vais préparer le fichiers et les publier plus tard.

Le 13/09/2009, michdenis a supposé :
Bonjour Jac,

En principe, il n'y a aucune raison pour que ta procédure s'arrête après
180 feuilles.
A ) quelques éléments à vérifier
- le nom de la feuille ne peut avoir plus de 31 caractères (espace
compris) - Ces caractères sont interdits dans le nom d'une feuille : * ?
[ ] / : - Évidemment, l'appellation d'un onglet ne peut pas être
utiliser 2 fois.

B ) Sur une version d'Excel (97 je crois), il y avait un "bug" concernant le
nom (propriété NAME)
de la feuille créée. Regarde dans la fenêtre de l'éditeur de code,
comment sont écris le nom des objets "Feuille" de ton application.
Est-ce que tu as des noms avec une série de 111111111111111 à la fin de
ceux-ci ? Il arrive que le nom dépasse le nombre de caractère permis
(31) et là ça bloque.

Au delà de ça, ta procédure devrait rouler !

Tu peux toujours publier ta procédure ici...




"Jac" a écrit dans le message de groupe de discussion :

Bonjour à tous,

dans un classeur contenant 3 feuilles au départ, la première avec des
variables, la deuxième avec des calculs, et la troisième qui reprend
les données de la feuille 2 par de simples calculs, je génère par vba
autant de feuilles que nécessaire en dupliquant la troisième feuille
après la dernière, puis je la renomme (de 1 à x), puis je copie son
contenu et je ne colle que les résultats.

Mais le problème, c'est que quand j'arrive à la création de la feuille
181 la macro s'arrête sur l'instruction
Sheets("Fiche plan action").Copy After:=Sheets(Sheets.Count)
et me renvoie le laconique message d'erreur
"La méthode Copy de la classe Worksheet a échoué."

Le fichier ne fait que 2.535 ko.
Sont ouverts en même temps un fichier de 433 ko avec la macro et un
autre de 6.778 ko avec 462 feuilles contenant des variables, fichiers
nécessaires au fonctionnement de la procédure. La charge du proc tourne
autour de 60%.

La procédure me semble assez au point et assez déboguée car elle a déjà
généré 180 feuilles. J'ai déjà eu des classeurs beaucoup plus lourds,
avec beaucoup plus de feuilles... Je ne comprends pas pourquoi "ça"
s'arrête tout d'un coup. L'aide associée au message d'erreur est très
vague et ne m'aide en aucun cas. J'ai trié mes variables de Z à A et ça
s'arrête toujours à la feuille 180.

Y a t'il une explication rationnelle à cette interruption ?
Y a t'il moyen d'y remédier ?

Merci d'avance à qui pourrait éclairer ma lanterne.

Jac