Bonjour,
J'ai une macro qui fait une boucle (avec While .... Wend) pour créer un
classeur avec une feuille par classeur : La macro prend un onglet, le
copie,
colle en valeur les formules et déplace l'onglet copié, le renomme et
l'enregistre avec un nom pour chaque classeur.
La boucle fonctionne 30 fois et alors qu'il reste encore au moins 5 boucle
à
faire, j'ai le message suivant : "Erreur d’exécution 1004; La méthode Copy
de
la classe Worksheet a échoué"
Le code où la macro bloque est le suivant : Sheets("Feuil2").Copy
Before:=Sheets(3)
Comment faire pour que la boucle aille jusqu'au bout sachant que le nombre
de fois où la bucle se fait est aléatoire (en général au moins 20 et au
plus
50)
Merci de votre aide
Cdt,
Thomas
Bonjour,
J'ai une macro qui fait une boucle (avec While .... Wend) pour créer un
classeur avec une feuille par classeur : La macro prend un onglet, le
copie,
colle en valeur les formules et déplace l'onglet copié, le renomme et
l'enregistre avec un nom pour chaque classeur.
La boucle fonctionne 30 fois et alors qu'il reste encore au moins 5 boucle
à
faire, j'ai le message suivant : "Erreur d’exécution 1004; La méthode Copy
de
la classe Worksheet a échoué"
Le code où la macro bloque est le suivant : Sheets("Feuil2").Copy
Before:=Sheets(3)
Comment faire pour que la boucle aille jusqu'au bout sachant que le nombre
de fois où la bucle se fait est aléatoire (en général au moins 20 et au
plus
50)
Merci de votre aide
Cdt,
Thomas
Bonjour,
J'ai une macro qui fait une boucle (avec While .... Wend) pour créer un
classeur avec une feuille par classeur : La macro prend un onglet, le
copie,
colle en valeur les formules et déplace l'onglet copié, le renomme et
l'enregistre avec un nom pour chaque classeur.
La boucle fonctionne 30 fois et alors qu'il reste encore au moins 5 boucle
à
faire, j'ai le message suivant : "Erreur d’exécution 1004; La méthode Copy
de
la classe Worksheet a échoué"
Le code où la macro bloque est le suivant : Sheets("Feuil2").Copy
Before:=Sheets(3)
Comment faire pour que la boucle aille jusqu'au bout sachant que le nombre
de fois où la bucle se fait est aléatoire (en général au moins 20 et au
plus
50)
Merci de votre aide
Cdt,
Thomas
C'est un problème connu et résolu semble-t-il dans les dernières versions.
Quand tu dupliques une feuille, il ajoute un 1 dans le nom de la feuille
(celui qu'on voit dans la fenêtre VBA)
Or le nom de la feuille n'accepte que 32 caractères, d'ou le plantage après
une trentaine d'opérations.
la solution, soit renommer les feuilles (pas celui que l'onglet affiche),
soit dupliquer ou insérer à des endroits différents.
A+
"T59" a écrit dans le message de
news:
> Bonjour,
>
> J'ai une macro qui fait une boucle (avec While .... Wend) pour créer un
> classeur avec une feuille par classeur : La macro prend un onglet, le
> copie,
> colle en valeur les formules et déplace l'onglet copié, le renomme et
> l'enregistre avec un nom pour chaque classeur.
> La boucle fonctionne 30 fois et alors qu'il reste encore au moins 5 boucle
> à
> faire, j'ai le message suivant : "Erreur d’exécution 1004; La méthode Copy
> de
> la classe Worksheet a échoué"
> Le code où la macro bloque est le suivant : Sheets("Feuil2").Copy
> Before:=Sheets(3)
>
> Comment faire pour que la boucle aille jusqu'au bout sachant que le nombre
> de fois où la bucle se fait est aléatoire (en général au moins 20 et au
> plus
> 50)
>
> Merci de votre aide
>
> Cdt,
>
> Thomas
Michel Angelosanto, Bordeaux, France
C'est un problème connu et résolu semble-t-il dans les dernières versions.
Quand tu dupliques une feuille, il ajoute un 1 dans le nom de la feuille
(celui qu'on voit dans la fenêtre VBA)
Or le nom de la feuille n'accepte que 32 caractères, d'ou le plantage après
une trentaine d'opérations.
la solution, soit renommer les feuilles (pas celui que l'onglet affiche),
soit dupliquer ou insérer à des endroits différents.
A+
"T59" <T59@discussions.microsoft.com> a écrit dans le message de
news:3F582AC7-7933-4738-A609-BEB024178216@microsoft.com...
> Bonjour,
>
> J'ai une macro qui fait une boucle (avec While .... Wend) pour créer un
> classeur avec une feuille par classeur : La macro prend un onglet, le
> copie,
> colle en valeur les formules et déplace l'onglet copié, le renomme et
> l'enregistre avec un nom pour chaque classeur.
> La boucle fonctionne 30 fois et alors qu'il reste encore au moins 5 boucle
> à
> faire, j'ai le message suivant : "Erreur d’exécution 1004; La méthode Copy
> de
> la classe Worksheet a échoué"
> Le code où la macro bloque est le suivant : Sheets("Feuil2").Copy
> Before:=Sheets(3)
>
> Comment faire pour que la boucle aille jusqu'au bout sachant que le nombre
> de fois où la bucle se fait est aléatoire (en général au moins 20 et au
> plus
> 50)
>
> Merci de votre aide
>
> Cdt,
>
> Thomas
Michel Angelosanto, Bordeaux, France
C'est un problème connu et résolu semble-t-il dans les dernières versions.
Quand tu dupliques une feuille, il ajoute un 1 dans le nom de la feuille
(celui qu'on voit dans la fenêtre VBA)
Or le nom de la feuille n'accepte que 32 caractères, d'ou le plantage après
une trentaine d'opérations.
la solution, soit renommer les feuilles (pas celui que l'onglet affiche),
soit dupliquer ou insérer à des endroits différents.
A+
"T59" a écrit dans le message de
news:
> Bonjour,
>
> J'ai une macro qui fait une boucle (avec While .... Wend) pour créer un
> classeur avec une feuille par classeur : La macro prend un onglet, le
> copie,
> colle en valeur les formules et déplace l'onglet copié, le renomme et
> l'enregistre avec un nom pour chaque classeur.
> La boucle fonctionne 30 fois et alors qu'il reste encore au moins 5 boucle
> à
> faire, j'ai le message suivant : "Erreur d’exécution 1004; La méthode Copy
> de
> la classe Worksheet a échoué"
> Le code où la macro bloque est le suivant : Sheets("Feuil2").Copy
> Before:=Sheets(3)
>
> Comment faire pour que la boucle aille jusqu'au bout sachant que le nombre
> de fois où la bucle se fait est aléatoire (en général au moins 20 et au
> plus
> 50)
>
> Merci de votre aide
>
> Cdt,
>
> Thomas
Michel Angelosanto, Bordeaux, France
A ) quand ta macro se plante, as-tu vérifié si le classeur
qui fait usage de cette ligne de code contient au moins 3 feuilles ?
Sheets("Feuil2").Copy Before:=Sheets(3)
Pourquoi ne pas publier la procédure complète
que tu utilises en mentionnant la ligne de code problème ?
A ) quand ta macro se plante, as-tu vérifié si le classeur
qui fait usage de cette ligne de code contient au moins 3 feuilles ?
Sheets("Feuil2").Copy Before:=Sheets(3)
Pourquoi ne pas publier la procédure complète
que tu utilises en mentionnant la ligne de code problème ?
A ) quand ta macro se plante, as-tu vérifié si le classeur
qui fait usage de cette ligne de code contient au moins 3 feuilles ?
Sheets("Feuil2").Copy Before:=Sheets(3)
Pourquoi ne pas publier la procédure complète
que tu utilises en mentionnant la ligne de code problème ?
A ) quand ta macro se plante, as-tu vérifié si le classeur
qui fait usage de cette ligne de code contient au moins 3 feuilles ?
Sheets("Feuil2").Copy Before:=Sheets(3)
Pourquoi ne pas publier la procédure complète
que tu utilises en mentionnant la ligne de code problème ?
A ) quand ta macro se plante, as-tu vérifié si le classeur
qui fait usage de cette ligne de code contient au moins 3 feuilles ?
Sheets("Feuil2").Copy Before:=Sheets(3)
Pourquoi ne pas publier la procédure complète
que tu utilises en mentionnant la ligne de code problème ?
A ) quand ta macro se plante, as-tu vérifié si le classeur
qui fait usage de cette ligne de code contient au moins 3 feuilles ?
Sheets("Feuil2").Copy Before:=Sheets(3)
Pourquoi ne pas publier la procédure complète
que tu utilises en mentionnant la ligne de code problème ?
Bonjour T59,
Je me suis permis de réécrire ta macro.
(évidemment je n'ai pas testé le code...)
Tu te sers de la colonne D:D pour définir ta
variable "AGENCE" qui elle-même sera utile
pour renommer le nom de la feuille créée et
pour identifier le nouveau classeur.
Vérifie que tu n'as pas de cellules vides dans la
Colonne D:D .
Le nom d'une feuille ne peut pas avoir plus de 31
caractères. Est-ce possible que cela arrive quand la
macro plante ?
'-----------------------------------------
Sub test()
Dim Rg As Range, C As Range
Dim ShCommerce As Worksheet
Dim ShCopie As Worksheet
'Utilisation d'une variable objet pour cette feuille
Set ShCommerce = Worksheets("TdB Commerce")
Application.ScreenUpdating = False
With Sheets("Liste Ag_Régions Macro")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With
For Each C In Rg
If UCase(C.Value) = UCase(REG) Then
AGENCE = C.Offset(, 3)
With ShCommerce
.Range("G1") = AGENCE
.Calculate
'Crée un nouveau classeur avec une feuille
.Copy
End With
'Initialise la variable ShCopie
Set ShCopie = ActiveSheet
'Renomme la nouvelle feuille
ShCopie.Name = "TdB Commerce " & AGENCE
'Copie les Formules pour les coller en valeurs
With ShCopie
With .Range("A1:J34")
.Value = .Value
End With
With .Range("AE4:AS24")
.Value = .Value
End With
With .Range("A94:J95")
.Value = .Value
End With
End With
'Sauvegarde du classeur,
'ShCopie.Parent.Name = Nom du Classeur où est la nouvelle feuille
With Workbooks(ShCopie.Parent.Name)
.SaveAs "D:TransfertTdB Commerce_" & AGENCE & "_" & AAAAMM
.Close False
End With
End If
Next
Application.ScreenUpdating = True
End Sub
'-----------------------------------------
"T59" a écrit dans le message de groupe de discussion :
Bonjour,
Oui j'ai bien vérifier qu'il y avait au moins 3 feuilles.
Voici le code de la boucle qui bug au 29ème classeur. Dans cette boucle,
j'ai 3 variables REG, AGENCE et AAAAMM qui sont définies au début de la macro
"as string"
Sheets("Liste Ag_Régions Macro").Select
Range("A2").Select
i = 2
While Cells(i, 1).Value <> ""
Cells(i, 1).Select
If REG = Cells(i, 1).Value Then
AGENCE = Cells(i, 4).Value
Sheets("TdB Commerce").Select
Range("G1").Value = AGENCE
Calculate
'Copie le TdB Gestion avec les formules
Sheets("TdB Commerce").Select
' C'est ici que ça bloque :
Sheets("TdB Commerce").Copy Before:=Sheets(3)
Sheets("TdB Commerce (2)").Select
'Copie les Formules pour les coller en valeurs
Range("A1:J34").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Range("AE4:AS24").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Range("A94:J95").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Range("A1").Select
Sheets("TdB Commerce (2)").Move
Sheets("TdB Commerce (2)").Name = "TdB Commerce " & AGENCE
ChDir "D:Transfert"
ActiveWorkbook.SaveAs Filename:="D:TransfertTdB Commerce_" &
AGENCE & "_" & AAAAMM, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse
ActiveWindow.Close
Windows("Prop TdB").Activate
Sheets("Liste Ag_Régions Macro").Select
i = i + 1
Cells(i, 1).Select
Else
i = i + 1
Cells(i, 1).Select
End If
Wend
Cdt,
Merci
"MichDenis" a écrit :
> A ) quand ta macro se plante, as-tu vérifié si le classeur
> qui fait usage de cette ligne de code contient au moins 3 feuilles ?
>
> Sheets("Feuil2").Copy Before:=Sheets(3)
>
> Pourquoi ne pas publier la procédure complète
> que tu utilises en mentionnant la ligne de code problème ?
>
>
Bonjour T59,
Je me suis permis de réécrire ta macro.
(évidemment je n'ai pas testé le code...)
Tu te sers de la colonne D:D pour définir ta
variable "AGENCE" qui elle-même sera utile
pour renommer le nom de la feuille créée et
pour identifier le nouveau classeur.
Vérifie que tu n'as pas de cellules vides dans la
Colonne D:D .
Le nom d'une feuille ne peut pas avoir plus de 31
caractères. Est-ce possible que cela arrive quand la
macro plante ?
'-----------------------------------------
Sub test()
Dim Rg As Range, C As Range
Dim ShCommerce As Worksheet
Dim ShCopie As Worksheet
'Utilisation d'une variable objet pour cette feuille
Set ShCommerce = Worksheets("TdB Commerce")
Application.ScreenUpdating = False
With Sheets("Liste Ag_Régions Macro")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With
For Each C In Rg
If UCase(C.Value) = UCase(REG) Then
AGENCE = C.Offset(, 3)
With ShCommerce
.Range("G1") = AGENCE
.Calculate
'Crée un nouveau classeur avec une feuille
.Copy
End With
'Initialise la variable ShCopie
Set ShCopie = ActiveSheet
'Renomme la nouvelle feuille
ShCopie.Name = "TdB Commerce " & AGENCE
'Copie les Formules pour les coller en valeurs
With ShCopie
With .Range("A1:J34")
.Value = .Value
End With
With .Range("AE4:AS24")
.Value = .Value
End With
With .Range("A94:J95")
.Value = .Value
End With
End With
'Sauvegarde du classeur,
'ShCopie.Parent.Name = Nom du Classeur où est la nouvelle feuille
With Workbooks(ShCopie.Parent.Name)
.SaveAs "D:TransfertTdB Commerce_" & AGENCE & "_" & AAAAMM
.Close False
End With
End If
Next
Application.ScreenUpdating = True
End Sub
'-----------------------------------------
"T59" <T59@discussions.microsoft.com> a écrit dans le message de groupe de discussion :
22673794-F348-4DD7-A9E2-A1125ABA9B51@microsoft.com...
Bonjour,
Oui j'ai bien vérifier qu'il y avait au moins 3 feuilles.
Voici le code de la boucle qui bug au 29ème classeur. Dans cette boucle,
j'ai 3 variables REG, AGENCE et AAAAMM qui sont définies au début de la macro
"as string"
Sheets("Liste Ag_Régions Macro").Select
Range("A2").Select
i = 2
While Cells(i, 1).Value <> ""
Cells(i, 1).Select
If REG = Cells(i, 1).Value Then
AGENCE = Cells(i, 4).Value
Sheets("TdB Commerce").Select
Range("G1").Value = AGENCE
Calculate
'Copie le TdB Gestion avec les formules
Sheets("TdB Commerce").Select
' C'est ici que ça bloque :
Sheets("TdB Commerce").Copy Before:=Sheets(3)
Sheets("TdB Commerce (2)").Select
'Copie les Formules pour les coller en valeurs
Range("A1:J34").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Range("AE4:AS24").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Range("A94:J95").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Range("A1").Select
Sheets("TdB Commerce (2)").Move
Sheets("TdB Commerce (2)").Name = "TdB Commerce " & AGENCE
ChDir "D:Transfert"
ActiveWorkbook.SaveAs Filename:="D:TransfertTdB Commerce_" &
AGENCE & "_" & AAAAMM, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse
ActiveWindow.Close
Windows("Prop TdB").Activate
Sheets("Liste Ag_Régions Macro").Select
i = i + 1
Cells(i, 1).Select
Else
i = i + 1
Cells(i, 1).Select
End If
Wend
Cdt,
Merci
"MichDenis" a écrit :
> A ) quand ta macro se plante, as-tu vérifié si le classeur
> qui fait usage de cette ligne de code contient au moins 3 feuilles ?
>
> Sheets("Feuil2").Copy Before:=Sheets(3)
>
> Pourquoi ne pas publier la procédure complète
> que tu utilises en mentionnant la ligne de code problème ?
>
>
Bonjour T59,
Je me suis permis de réécrire ta macro.
(évidemment je n'ai pas testé le code...)
Tu te sers de la colonne D:D pour définir ta
variable "AGENCE" qui elle-même sera utile
pour renommer le nom de la feuille créée et
pour identifier le nouveau classeur.
Vérifie que tu n'as pas de cellules vides dans la
Colonne D:D .
Le nom d'une feuille ne peut pas avoir plus de 31
caractères. Est-ce possible que cela arrive quand la
macro plante ?
'-----------------------------------------
Sub test()
Dim Rg As Range, C As Range
Dim ShCommerce As Worksheet
Dim ShCopie As Worksheet
'Utilisation d'une variable objet pour cette feuille
Set ShCommerce = Worksheets("TdB Commerce")
Application.ScreenUpdating = False
With Sheets("Liste Ag_Régions Macro")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With
For Each C In Rg
If UCase(C.Value) = UCase(REG) Then
AGENCE = C.Offset(, 3)
With ShCommerce
.Range("G1") = AGENCE
.Calculate
'Crée un nouveau classeur avec une feuille
.Copy
End With
'Initialise la variable ShCopie
Set ShCopie = ActiveSheet
'Renomme la nouvelle feuille
ShCopie.Name = "TdB Commerce " & AGENCE
'Copie les Formules pour les coller en valeurs
With ShCopie
With .Range("A1:J34")
.Value = .Value
End With
With .Range("AE4:AS24")
.Value = .Value
End With
With .Range("A94:J95")
.Value = .Value
End With
End With
'Sauvegarde du classeur,
'ShCopie.Parent.Name = Nom du Classeur où est la nouvelle feuille
With Workbooks(ShCopie.Parent.Name)
.SaveAs "D:TransfertTdB Commerce_" & AGENCE & "_" & AAAAMM
.Close False
End With
End If
Next
Application.ScreenUpdating = True
End Sub
'-----------------------------------------
"T59" a écrit dans le message de groupe de discussion :
Bonjour,
Oui j'ai bien vérifier qu'il y avait au moins 3 feuilles.
Voici le code de la boucle qui bug au 29ème classeur. Dans cette boucle,
j'ai 3 variables REG, AGENCE et AAAAMM qui sont définies au début de la macro
"as string"
Sheets("Liste Ag_Régions Macro").Select
Range("A2").Select
i = 2
While Cells(i, 1).Value <> ""
Cells(i, 1).Select
If REG = Cells(i, 1).Value Then
AGENCE = Cells(i, 4).Value
Sheets("TdB Commerce").Select
Range("G1").Value = AGENCE
Calculate
'Copie le TdB Gestion avec les formules
Sheets("TdB Commerce").Select
' C'est ici que ça bloque :
Sheets("TdB Commerce").Copy Before:=Sheets(3)
Sheets("TdB Commerce (2)").Select
'Copie les Formules pour les coller en valeurs
Range("A1:J34").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Range("AE4:AS24").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Range("A94:J95").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Range("A1").Select
Sheets("TdB Commerce (2)").Move
Sheets("TdB Commerce (2)").Name = "TdB Commerce " & AGENCE
ChDir "D:Transfert"
ActiveWorkbook.SaveAs Filename:="D:TransfertTdB Commerce_" &
AGENCE & "_" & AAAAMM, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:úlse, CreateBackup:úlse
ActiveWindow.Close
Windows("Prop TdB").Activate
Sheets("Liste Ag_Régions Macro").Select
i = i + 1
Cells(i, 1).Select
Else
i = i + 1
Cells(i, 1).Select
End If
Wend
Cdt,
Merci
"MichDenis" a écrit :
> A ) quand ta macro se plante, as-tu vérifié si le classeur
> qui fait usage de cette ligne de code contient au moins 3 feuilles ?
>
> Sheets("Feuil2").Copy Before:=Sheets(3)
>
> Pourquoi ne pas publier la procédure complète
> que tu utilises en mentionnant la ligne de code problème ?
>
>