copy feuil d'un classeur a un autre

KIM

XLDnaute Accro
Bonjour le forum,
D'un classeur de travail j'ai à distribuer seulement quelques feuilles.
Je copie à la main ces feuilles dans un autre classeur, je supprime les liens car ces feuilles contiennent des formules.
Merci de m'aider à automatiser la recopie de ces feuilles sans formules, seulement les données et en conservant le meme format dans un autre classeur en vba.

Merci d'avance
KIM
 

Abel

XLDnaute Accro
Bonjour KIM,

Je ne sais pas quel est ton niveau en VBA mais voici une instruction qui devrait suffire :

Sheets('Feuil2').Select
Sheets('Feuil2').Copy

Le feuille 2 est copiée dans un nouveau classeur avec les formules et sans lien.

Fais des essais avec l'enregistreur de macro.
Menu 'Outils/Macro/Nouvelle macro'.

Abel.
 

KIM

XLDnaute Accro
Bonjour Abel, et le Forum,
J'ai automatisé ma recopie de feuilles d'un classeur à un autre,
Dans mon classeur d'origine WB1 j'ai 36 feuilles.
La routine ci-dessous s'arrète avant la recopie totale de mes feuilles avec le message d'erreur ci-dessou:
'Erreur d'execution 9, l'indice n'appartient pas à la selection' et quand je regarde le code sheets.count du classeur resulat WB2 est dèjà = à 36 et je n'ai que 33 feuilles dans WB2.
J'ai passé des heures pour trouver une solution ou une astuce mais sans resultat. merci de votre aide.
ci-dessous le code:


Sub CopyFeuilDansFichResultat()
'Copier des feuilles du classeur WB1 dans WB2

Dim WB1 As Workbook, WB2 As Workbook
Set WB1 = Workbooks('TDB_DATA.xls')
Set WB2 = Workbooks('TDB_RES.xls')
Dim WS As Worksheet

Application.Calculation = xlCalculationManual

WB1.Activate

For Each WS In Worksheets
If WS.Name <> 'MENU' And WS.Name <> 'ERT' And WS.Name <> 'REF' And WS.Name <> 'TDB_REF' Then

With Application
.DisplayAlerts = False

WB2.Activate
WS.Copy After:=Workbooks('TDB_noprog.xls').Worksheets(Sheets.Count)
.DisplayAlerts = True
End With
End If

WB1.Activate
Next

WB2.Activate
Application.Calculation = xlCalculationAutomatic

ActiveWorkbook.BreakLink Name:='D:\\KB_CDPMENS\\TDB_cdpm.xls', Type:= _
xlExcelLinks
'
WB2.Save

WB1.Worksheets('MENU').Activate

End Sub
 
F

Flyonets

Guest
bonsoir,
regarde si ton classeur ne comporte pas de feuille masquée ou des feuilles graphiques, ce qui pourrait expliquer ton probleme
Solution eventuelle : stocker tes feuilles dans un array et les appeler
selon les besoins
 

ChTi160

XLDnaute Barbatruc
Salut Kim
bonjour le Fil

je ne sais pas si j'ai bien compri
mais Kim as tu vérifié dans la Procèdure que le nom des feuilles a ne pas copier soit bien orthographiés.
car si tu as 36 feuilles et que 4 ne doivent pas être copiées ton compteur sera bien à 36 (car la boucle passe en revue l'ensemble des feuilles mais n'en copie que certaines) mais seules 32 feuilles auront été copiées

bonne Journée

Ps n'y as t'il pas un problème au niveau des classeurs
car tu as déclaré deux Classeurs WB1 et WB2 et tu copies dans un troisième ????? à voir Lol
WS.Copy After:=Workbooks('TDB_noprog.xls').Worksheets(Sheets.Count)

Message édité par: Chti160, à: 01/09/2005 08:30
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Kim, JeanMarie, FlyOnet, le Forum

Une autre approche par UserForm (et également par Array) dans cette Démo (parmis d'autres que j'avais réalisées sur ce Sujet, dans le Forum XLD 1st Generation, voir lien 'Archives')

=> Lien supprimé

Bonne Journée
@+Thierry[ol]
 

KIM

XLDnaute Accro
Bonjour ChTi160 et le forum,
J'ai controler les noms des feuilles à ne pas recopier. Les noms sont corrects. J'utilise le meme IF WS.Name.... dans une autre procedure pour supprimer les feuilles qui seront regénéreées automatiquement et ça marche.
Merci pour votre aide,
KIM
 

ChTi160

XLDnaute Barbatruc
re Kim
Bonjour @+Thierry

je ne comprends pas mais tu vas m'expliquer

tu Actives le Classeur WB2 et et tu copies dans un autreTDB_noprog.xls
Code:
WB2.activate
WS.Copy After:=Workbooks('TDB_noprog.xls').Worksheets(Sheets.Count)
tu m'expliques et ainsi plus de soucis(pour moi) Lol
je regarderai ce fil dans l'après midi
 

KIM

XLDnaute Accro
Re JeanMarie,
effectivement il y avait une erreur de copier coller seulement.
A remplacer TDB_noprog par TDB_RES.xls,
On recopie dans WB2 qui est TDB_RES.xls:

WS.Copy After:=Workbooks('TDB_RES.xls').Worksheets(Sheets.Count)

Avec mes excuses,
Merci
A+
KIM
 

KIM

XLDnaute Accro
Re JeanMarie,
effectivement il y avait une erreur de copier coller seulement.
A remplacer TDB_noprog par TDB_RES.xls,
On recopie dans WB2 qui est TDB_RES.xls:

WS.Copy After:=Workbooks('TDB_RES.xls').Worksheets(Sheets.Count)

Avec mes excuses,
Merci
A+
KIM
 

KIM

XLDnaute Accro
Re JeanMarie,
effectivement il y avait une erreur de copier coller seulement.
A remplacer TDB_noprog par TDB_RES.xls,
On recopie dans WB2 qui est TDB_RES.xls:

WS.Copy After:=Workbooks('TDB_RES.xls').Worksheets(Sheets.Count)

Avec mes excuses,
Merci
A+
KIM
 

KIM

XLDnaute Accro
RE JeanMarie, FlyOnet et le Forum,
Bonjour @+Thierry
J'ai integré ton USF dans mon classeur et j'ai lancé la copie des feuilles de mon classeur DATA dans un classeur existant.
Il recopie la feuille 34 et me sort un message d'erreur:
Erreur d'execution 1004,
La methode Copy de la classe WorkSheet a echoué.

et pointe sur la ligne
WB1.Worksheets(MyArray(i)).Copy After:=WB2.Worksheets(WB2.Worksheets.Count)
de la Private Sub CommandButton1_Click()

J'ai ensuite ensuite les 2 feuilles non recopiées
et la recopie se fait sans probleme.
As-tu une idee
Merci d'avance
KIM
 

Discussions similaires

Statistiques des forums

Discussions
312 813
Messages
2 092 311
Membres
105 354
dernier inscrit
Green2