Erreur d'exécution 1004

  • Initiateur de la discussion Initiateur de la discussion aubelix
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

aubelix

XLDnaute Impliqué
Bonjour à tous les amis du Forum. 🙂

A partir d'un modèle, je duplique autant de fois le modèle pour le renommer
onglet au nom de x références variables..
J'ai une rerreur aléatoire et le message ci-dessous s'affiche :

Erreur d'exécution 1004
La méthode Copy de la Classe Worksheet a échoué.

Ci-dessous la macro qui s'arrête sur:

Sheets("MODELE").Copy After:=Sheets(Sheets.Count)

Code:
Sub creation_FICHES()
    Dim sh As Worksheet
    Dim cel As Range, plg As Range
    Select Case MsgBox(" Voulez-vous lancer la création des FICHES " _
                     & vbCrLf & " (une feuille par REFERENCE)" _
         , vbYesNo Or vbQuestion Or vbDefaultButton1, "Confirmation")
    Case vbYes
        Sheets("BASE").Range("B2").Select

        '        Set plg = Range(Selection, Selection.End(xlDown))
        Set plg = Range("B2:B" & Range("B65536").End(xlUp).Row)
        Application.ScreenUpdating = False
        For Each cel In plg.Cells
            If cel <> "" Then
                For Each sh In Worksheets
                    If sh.Name = cel Then GoTo suite
                Next
                Sheets("MODELE").Copy After:=Sheets(Sheets.Count)
                Sheets(Sheets.Count).Name = cel.Value
                'Recopie les différentes rubriques spécifiées
                With Sheets(Sheets.Count)
                    'Numéro identification
                    .Range("C12").Value = Sheets("BASE").Range("E" & cel.Row).Value
                    'Référence
                    .Range("H12").Value = Sheets("BASE").Range("B" & cel.Row).Value
                    'Responsable
                 .Range("J2").Value = Sheets("BASE").Range("E" & cel.Row).Value
                    'Numéro d'ordre
                    .Range("J4").Value = Sheets("BASE").Range("C" & cel.Row).Value
                End With
            End If
suite:
        Next
        Call MsgBox(" Toutes les FICHES ont été crées avec succes " _
                  & vbCrLf & " Pour accéder à la FICHE de votre choix" _
                  & vbCrLf & " Tapez : Ctrl + M" _
           , vbInformation, "CTRL + M")
    Case vbNo
        Exit Sub
    End Select
    Sheets("BASE").Activate
End Sub

Merci pour votre aide.
Cordialment.
 
Re : Erreur d'exécution 1004

Bonjour aubelix,
Toujours sans exemple...
Ce code ne plante pas chez mois (2003)
Code:
[COLOR=blue]Sub[/COLOR] creation_FICHES()
    [COLOR=blue]Dim[/COLOR] sh [COLOR=blue]As[/COLOR] Worksheet
    [COLOR=blue]Dim[/COLOR] cel [COLOR=blue]As[/COLOR] Range, plg [COLOR=blue]As[/COLOR] Range
    [COLOR=blue]Select Case[/COLOR] MsgBox(" Voulez-vous lancer la création des FICHES " _
                     & vbCrLf & " (une feuille par REFERENCE)" _
         , vbYesNo [COLOR=blue]Or[/COLOR] vbQuestion [COLOR=blue]Or[/COLOR] vbDefaultButton1, "Confirmation")
    [COLOR=blue]Case[/COLOR] vbYes
       [COLOR=green]'Sheets("BASE").Range("B2").Select[/COLOR]
       [COLOR=green]'        Set plg = Range(Selection, Selection.End(xlDown))[/COLOR]
        [COLOR=blue]Set[/COLOR] plg = [COLOR=red][B]Sheets("BASE").[/B][/COLOR]Range("B2:B" & Range("B65536").End(xlUp).Row)
        Application.ScreenUpdating = [COLOR=blue]False[/COLOR]
        [COLOR=blue]For Each[/COLOR] cel [COLOR=blue]In[/COLOR] plg.Cells
            [COLOR=blue]If[/COLOR] cel <> "" [COLOR=blue]Then[/COLOR]
                [COLOR=blue]For Each[/COLOR] sh [COLOR=blue]In[/COLOR] Worksheets
                    [COLOR=blue]If[/COLOR] sh.Name = cel [COLOR=blue]Then GoTo[/COLOR] suite
                [COLOR=blue]Next[/COLOR]
                Sheets("MODELE").Copy After:=Sheets(Sheets.Count)
                Sheets(Sheets.Count).Name = cel.Value
               [COLOR=green]'Recopie les différentes rubriques spécifiées[/COLOR]
                [COLOR=blue]With[/COLOR] Sheets(Sheets.Count)
                   [COLOR=green]'Numéro identification[/COLOR]
                    .Range("C12").Value = Sheets("BASE").Range("E" & cel.Row).Value
                   [COLOR=green]'Référence[/COLOR]
                    .Range("H12").Value = Sheets("BASE").Range("B" & cel.Row).Value
                   [COLOR=green]'Responsable[/COLOR]
                 .Range("J2").Value = Sheets("BASE").Range("E" & cel.Row).Value
                   [COLOR=green]'Numéro d'ordre[/COLOR]
                    .Range("J4").Value = Sheets("BASE").Range("C" & cel.Row).Value
                [COLOR=blue]End With[/COLOR]
            [COLOR=blue]End If[/COLOR]
suite:
        [COLOR=blue]Next[/COLOR] cel
        [COLOR=blue]Call[/COLOR] MsgBox(" Toutes les FICHES ont été crées avec succes " _
                  & vbCrLf & " Pour accéder à la FICHE de votre choix" _
                  & vbCrLf & " Tapez : Ctrl + M" _
           , vbInformation, "CTRL + M")
    [COLOR=blue]Case[/COLOR] vbNo
        [COLOR=blue]Exit Sub[/COLOR]
    [COLOR=blue]End Select[/COLOR]
    Sheets("BASE").Activate
[COLOR=blue]End Sub[/COLOR]
Je met le fameux exemple pour te montrer qu'il est faisable.
Cordialement
 

Pièces jointes

Re : Erreur d'exécution 1004

Bonsoir,

Bug assez fréquent, lorsque l'on veut rajouter un nombre trop important (pour Excel, fonction de la mémoire) d'onglets

La solution, créer un nouveau fichier dans le même répertoire que le fichier source, avec un seul onglet, identique à ta feuille "MODELE", et qu'on va appeler "modele.xls"

Pour ce faire, tu fais un clic droit sur le nom de cet onglet, "Déplacer ou copier", choisir "Créer une copie", et en haut, dans le menu déroulant, tu choisis "nouveau classeur".

Tu l'enregistres donc dans le répertoire du fichier source, avec le nom que je viens de te donner

Et à la place de :

Code:
Sheets("MODELE").Copy After:=Sheets(Sheets.Count)

tu mets ceci :

Code:
Sheets.Add Type:=ActiveWorkbook.Path & "\modele.xls", _
           After:=Sheets(Sheets.Count)

Et voilou...
 
Re : Erreur d'exécution 1004

Re Efgé et BhBh 🙂

Merci pour vos réponse respectives.

Les 2 réponses plantent chez moi.
Ta solution BhBh, j'ai le message suivant :

Erreur d'exécution 9
L'indice n'appartient pas à la sélection et se bloque sur :

Code:
Set plg = Sheets("BASE").Range("B2:B" & Range("B65536").End(xlUp).Row)

Merci pour votre aide.
Cordialement.
 
Re : Erreur d'exécution 1004

Re-,

Alors, ce serait à l'insu de mon plein gré, qu'un code que je n'ai pas créé, plante :

Les 2 réponses plantent chez moi.
Ta solution BhBh, j'ai le message suivant :

Erreur d'exécution 9
L'indice n'appartient pas à la sélection et se bloque sur :

Code:
Set plg = Sheets("BASE").Range("B2:B" & Range("B65536").End(xlUp).Row)

Je n'ai jamais parlé, dans ma réponse, d'une quelconque feuille nommée "BASE", et d'ailleurs, existe-t-elle, dans ton fichier?
 
Re : Erreur d'exécution 1004

Re aubelix, Bonjour bhbh,
Effectivement c'est mois qui ai parlé de
Code:
Set plg = Sheets("BASE").Range("B2:B" & Range("B65536").End(xlUp).Row)
Quand on lit le premier code on y trouve
Code:
Sheets("BASE").Range("B2").Select
Set plg = Range(Selection, Selection.End(xlDown))
J'imagine donc que la liste est sur la Feuille BASE.
Maintenant il faut savoir si c'est le fichier que j'ai fourni qui plante ou la version d'Aubelix. Ensuite connaitre le nombre d'onglet total attendu dans le classeur.
Après je n'ai plus d'idée...
Cordialement
 
Re : Erreur d'exécution 1004

Re 🙂

BhBh, ta réponse fonctionne très bien.
J'ai testé avec plus de 600 onglets, aucun souci.
L'erreur provenait d'une macro à l'ouverture du Fichier
qui me renommait la feuille BASE et c'est dans cette
feuille que se trouvait les références des onglets à créer.
Le coupable et responsable c'est moi 🙁

Tout est rentré dans l'orde.
Mille excuses.

Encore une fois Merci pour votre précieuse aide.
Cordialement.
 
Re : Erreur d'exécution 1004

Bonjour matinal à tous les amis du Forum. 🙂

Après avoir résolu mon problème de duplication grâce à votre aide
je voudrais faire évoluer la macro pour obtenir ceci :

Code:
 - Création des Fiches par duplication par rapport à un modèle et renommée
 au nom de la Référence. (Fonctionne bien)
 Recopier les infos correspondants à chaque référence.
 Si dans les diverses rubriques pas de données sur la ligne de la référence
 recopier les données des rubriques de la 1ère ligne
 sinon recopier les données sur la ligne de la référence.
 Exemple :
   Ligne 1 Référence REFER-11111 recopier les données se trouvant sur la ligne
   Ligne 2 Référence REFER-22222 recopier les données se trouvant sur la ligne 1 pour Qté 1 - Numéro 300-AZERTY-01 - Type AMRS-20 - Ordre 9999999 - Status A REPARER
   Ligne 3  et 10 Références REFER-44444  et REFER-199998 recopier toutes les données se trouvant sur la ligne 1 etc...
 
  Actuellement la macro recopie les données sur chaque fiche
  que si je renseigne tous les cellules

Je vous joint le fichier modèle qui doit se trouver dans le même répertoire
que le fichier proprement dit, suite à la résolution du BEUG par bhbh que
je remerci au passage.

Dans l'attente de votre aide.
Cordialement.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
707
Réponses
2
Affichages
332
Réponses
12
Affichages
1 K
Réponses
3
Affichages
834
  • Question Question
Microsoft 365 Excel VBA
Réponses
5
Affichages
464
Retour