Bonjour à mes futurs lecteurs,
J'ai besoin d'aide:
Je dois faire des copies de 6 feuilles dans un classeur nommé "archives.xls" à partir d'un autre classeur dénommé "ventes.xls" (qui en contient 10).
Chacune de ces feuilles contient une macro événementielle appelant un module qui n'est pas copié.
La technique ordinaire de copie entraîne un plantage. Il me faut donc obligatoirement supprimer ces macros avant copie.
J'ai utilisé le code suivant dans un module actionné par un bouton:
(toutes les variables étant déclarées dans un module spécifique)
'ouverture de l'archives[/COLOR]
Workbooks.Open Filename:="C:\archives\archives.xls"
'comptage des feuilles existantes
x = Sheets.Count
'activation du fichier source
Workbooks("Ventes.xls").Activate
'boucle pour les 6 feuilles
For i = 1 To 6
'variable "nomTmp()" contient le nom de chaque feuille à copier
With ThisWorkbook.VBProject.VBComponents(Sheets(nomTmp(i)).CodeName).CodeModule
'mémorisation de la macro événementielle contenu dans chaque feuille
Ch = .Lines(1, .CountOfLines)
'suppression de la macro
.DeleteLines 1, .CountOfLines
'copie dans l'archive
Worksheets(nomTmp(i)).Copy Before:=Workbooks("archives.xls").Sheets(x)
'rétablissement de la macro sur la feuille-source
.AddFromString Ch
End With
'incrémentation du nombre de feuilles
x = x + 1
Next
Or cette procédure fonctionne très bien si je ne fais pas de boucle (donc copie d'une seule feuille) mais plante lamentablement Excel dès que je boucle (arrêt critique de l'application).
Y aurait-il une bonne âme pour m'expliquer où le bât blesse ? Je ne vois vraiment pas où se situe(nt) le(s) erreur(s).
Merci par avance à ceux qui se pencheront sur mon problème.
J'ai besoin d'aide:
Je dois faire des copies de 6 feuilles dans un classeur nommé "archives.xls" à partir d'un autre classeur dénommé "ventes.xls" (qui en contient 10).
Chacune de ces feuilles contient une macro événementielle appelant un module qui n'est pas copié.
La technique ordinaire de copie entraîne un plantage. Il me faut donc obligatoirement supprimer ces macros avant copie.
J'ai utilisé le code suivant dans un module actionné par un bouton:
(toutes les variables étant déclarées dans un module spécifique)
'ouverture de l'archives[/COLOR]
Workbooks.Open Filename:="C:\archives\archives.xls"
'comptage des feuilles existantes
x = Sheets.Count
'activation du fichier source
Workbooks("Ventes.xls").Activate
'boucle pour les 6 feuilles
For i = 1 To 6
'variable "nomTmp()" contient le nom de chaque feuille à copier
With ThisWorkbook.VBProject.VBComponents(Sheets(nomTmp(i)).CodeName).CodeModule
'mémorisation de la macro événementielle contenu dans chaque feuille
Ch = .Lines(1, .CountOfLines)
'suppression de la macro
.DeleteLines 1, .CountOfLines
'copie dans l'archive
Worksheets(nomTmp(i)).Copy Before:=Workbooks("archives.xls").Sheets(x)
'rétablissement de la macro sur la feuille-source
.AddFromString Ch
End With
'incrémentation du nombre de feuilles
x = x + 1
Next
Or cette procédure fonctionne très bien si je ne fais pas de boucle (donc copie d'une seule feuille) mais plante lamentablement Excel dès que je boucle (arrêt critique de l'application).
Y aurait-il une bonne âme pour m'expliquer où le bât blesse ? Je ne vois vraiment pas où se situe(nt) le(s) erreur(s).
Merci par avance à ceux qui se pencheront sur mon problème.