Erreur d'execution 1004-la méthode de la classe worksheet a échoué

muzan97

XLDnaute Nouveau
Bonjour,

Désolé de recréer un post pour ce problème mais je n'y connais rien en VB.
J'ai trouvé une piste pour solutionner mon problème mais je ne sais pas comment l'appliquer.
Pouvez-vous m'aider, svp?
Voilà le problème:

Un gentil XLDnaute "liloucmoi") m'a conseillé la macro ci-dessous pour répondre à une demande précédente. Malheureusement, elle génère le message d'erreur suivant: "Erreur d'execution 1004-la méthode de la classe worksheet a échoué-Continuer Fin Debogage Annuler"

La macro:
##
Option Explicit

Public sel() As Variant

Sub CreerFeuilles()
Dim i As Integer, f As Worksheet
ReDim sel(1)

sel(0) = "No films"

listFilms.Show

For Each f In ThisWorkbook.Sheets
If f.Name <> "Matrice vide" And f.Name <> "Données" Then
Application.DisplayAlerts = False
f.Delete
Application.DisplayAlerts = True
End If
Next f

If sel(0) <> "No films" Then
For i = 0 To UBound(sel)
Worksheets("Matrice vide").Copy After:=Worksheets("Matrice vide")
ActiveSheet.Name = sel(i)
ActiveSheet.Range("$AB$3").Value = sel(i)
Next i
End If
End Sub
##

Voici la piste que j'ai trouvée:

##
Cause:
Ce problème se produit car à chaque fois que vous copiez la même feuille, un nom de code est affecté à la copie, et à chaque copie de la feuille ce nom de code s'allonge. Par exemple, si vous copiez sheet1 une fois, le nom de code affecté à la feuille est sheet11. Lorsque vous copiez à nouveau cette feuille, le nom sheet111 lui est affecté, et ainsi de suite. La longueur maximale du nom de code est d'environ 35 caractères. Lorsque cette limite est atteinte, Excel cesse de répondre.

Solution proposée:
Pour contourner ce problème, essayez d'utiliser un code semblable au suivant pour copier des feuilles de calcul :
***
Sub Copy Sheets()

For x = 1 To 300
Sheets.Add
Workbooks("YourWorkBook.xls").Sheets("sheet1").Cells.Copy
ActiveSheet.Paste
Workbooks("YourWorkBook.xls").Sheets("sheet1").Select

##

Savez-vous si l'on peut intégrer cette solution dans ma macro?

Merci d'avance!!

D
 

Modeste

XLDnaute Barbatruc
Re : Erreur d'execution 1004-la méthode de la classe worksheet a échoué

Bonjour muzan97,

Difficile de dire, dans le cas présent, ce qui peut poser problème: c'est peut-être la piste proposée en-bas de message, mais je n'en suis pas certain.
Ne pourrais-tu déposer une version allégée et sans données confidentielles de ton fichier (Max 48 ko)
Dans ton code, un userForm doit être affiché. Est-ce lui qui alimente ton tableau "sel()" ou est-ce le contenu de la feuille "données"? Si sel(3) est vide, par exemple, et que tu en utilise la valeur pour nommer une feuille tu auras aussi une erreur 1004.
Le message d'erreur apparaît lors du premier passage dans ta boucle For ou à un autre moment ?
As-tu déjà essayé d'exécuter la macro en "pas-à-pas" et en observant la fenêtre des variables locales dans le VBE ?

En mettant en commentaire certaines lignes de code (affichage de l'USF, par exemple), ça a l'air de fonctionner, mais c'est peut-être là (ou ailleurs) qu'il faut précisément chercher l'erreur.

Modeste
 

Modeste

XLDnaute Barbatruc
Re : Erreur d'execution 1004-la méthode de la classe worksheet a échoué

re-bonjour,

Je me suis aperçu que tu avais ouvert une autre discussion https://www.excel-downloads.com/threads/formulaire-a-partir-dune-matrice.125029/ ... J'ai donc pu retrouver un extrait de ton fichier, avec la macro de liloucmoi ... Ce que j'ai testé, c'est un titre de film de plus de 31 caractères ("L'homme qui murmurait à l'oreille des chevaux") ...et là, effectivement, ça coince.
A toi de voir si c'est ce qui a pu se passer. Si oui, une solution est "d'adapter" le code de liloucmoi: à la ligne 25, remplacer
Code:
ActiveSheet.Name = sel(i)
par
Code:
ActiveSheet.Name = Mid(sel(i), 1, 31)
De cette manière, le titre complet apparaît dans la feuille, mais le nom de la feuille ne dépasse pas 31 caractères.

A tester.

Modeste
 

muzan97

XLDnaute Nouveau
Re : Erreur d'execution 1004-la méthode de la classe worksheet a échoué

Merci pour ta réponse.
J'ai joint le fichier contenant les données, la macro, etc.
J'ai noté que l'erreur s'affiche dans beaucoup de cas.
Notamment, si l'on utilise un caractère interdit :)*\ /?[]) dans le champ "titre du film) ou si l'on met 2 fois le même titre de film.
J'ai bien peur que ce soit plus dur que prévu...
 

Modeste

XLDnaute Barbatruc
Re : Erreur d'execution 1004-la méthode de la classe worksheet a échoué

J'ai joint le fichier contenant les données, la macro, etc.
Euh ???
J'ai noté que l'erreur s'affiche dans beaucoup de cas.
Notamment, si l'on utilise un caractère interdit :)*\ /?[]) dans le champ "titre du film) ou si l'on met 2 fois le même titre de film.
Ah ben oui, ça c'est pas bon :(
J'ai bien peur que ce soit plus dur que prévu...
Je confirme !! Si tu dois ajouter la gestion des doublons et des caractères interdits ... Tu es certain de vouloir nommer les feuilles de cette manière ?

Modeste
 

Modeste

XLDnaute Barbatruc
Re : Erreur d'execution 1004-la méthode de la classe worksheet a échoué

Salut muzan97, mes respectueux hommages à tous les autres,

Je disposais d'un peu de temps ce matin ...
J'ai simplifié un petit bout et ajouté un bout de code pour gérer les doublons, ainsi qu'un autre concernant les caractères non-autorisés dans les noms de feuilles.

A tester

Modeste
 

Pièces jointes

  • Matrice4 (v2).zip
    26.2 KB · Affichages: 101

Discussions similaires

Statistiques des forums

Discussions
312 355
Messages
2 087 553
Membres
103 588
dernier inscrit
Tom59300Tom