Enregistrement feuille dans un nouveau classeur
Bonjour,
J'ai parcourus différents sites sans trouver mon bonheur et étant novice en vba...
J'ai un fichier avec 4 feuilles et je souhaiterais via une macro pouvoir enregistrer chacune des ces feuilles dans un nouveau classeur (un classeur par feuille).
Les classeurs de destination ne sont pas créés à l'avance et je souhaiterai donc pouvoir les nommer et choisir le répertoire où ils seront enregistrés.
Et cerise sur le gâteau, si la mise pouvait être conservé...
Pensez-vous qu'il possible d'effectuer via une macro cette manipulation?
À toutes fins utiles, vous trouverez en pièce jointe le fichier en question.
Je vous remercie par avance pour votre aide.
Raoduk
Bonjour,
Un test :
Sub ENR()
Dim WS As Variant, CHEMIN$, ENR_S As Object
For Each WS In Worksheets
Worksheets.Copy
Set ENR_S = Application.FileDialog(msoFileDialogSaveAs)
With ENR_S
.Show
CHEMIN = .SelectedItems(1)
End With
ActiveWorkbook.SaveAs CHEMIN
ActiveWorkbook.Close
Next WS
End SubPar contre je n'arrive pas à conserver la mise en forme, je pourrais rajouter un classeur manuellement et coller les données dedans en respectant la mise en forme du classeur source. Utilisez vous un tableau structuré ou un tableau standard, des formules dans chacune de vos feuilles ? La duplication doit elle être en valeur ou standard ?
Cdlt,
Bonjour,
Merci pour votre aide Ergotamine.
Votre proposition fonctionne bien toutefois, elle copie les 4 feuilles dans un nouveau classeur et je souhaiterais que chaque feuille soit enregistrées dans un classeur séparé.
J'ai donc modifié le code comme suit afin d'enregistrer 1 feuille à la fois (quitte à dupliquer la macro pour chaque feuille) toutefois, il me demande a chaque fois d'enregistrer la feuille concernée 4 fois.
Pouvez-vous m'indiquer quelle partie dois-je modifier pour qu'il ne me demande d'enregistrer la feuille qu'une fois?
Sub ENR()
Dim WS As Variant, CHEMIN$, ENR_S As Object
For Each WS In Worksheets
Worksheets("Rapport R").Copy
Set ENR_S = Application.FileDialog(msoFileDialogSaveAs)
With ENR_S
.Show
CHEMIN = .SelectedItems(1)
End With
ActiveWorkbook.SaveAs CHEMIN
ActiveWorkbook.Close
Next WS
End SubConcernant la mise en forme, toutes les cellules sont au format "standard" et je n'utilise pas de formules (les données seront traitées via des macro (qui par ailleurs, ne doivent pas être copiées dans les nouveaux fichiers)).
Concernant les tableaux, je ne suis pas sûr de comprendre mais je dirait standard dans la mesure où je n'ai pas utilisé la fonction "Mettre sous forme de tableau" (il ne s'agit que de simple lignes).
Cordialement,
Raoduk
Bonjour,
Désolé je n'avais pas vu que vous aviez répondu.
Et double désolé car je me suis planté sur un mot dans le code. Il faut utiliser ce code pour copier une a une les feuilles, c'est de ma faute, de base on avait un code, qui splitait tout et demandais l'enregistrement pour chacune des feuilles. Donc ça devrait être mieux comme ça :
Sub ENR()
Dim WS As Variant, CHEMIN$, ENR_S As Object
For Each WS In Worksheets
WS.Copy
Set ENR_S = Application.FileDialog(msoFileDialogSaveAs)
With ENR_S
.Show
CHEMIN = .SelectedItems(1)
End With
ActiveWorkbook.SaveAs CHEMIN
ActiveWorkbook.Close
Next WS
End SubEt du coup pour m'excuser de ces erreurs enchaînées, une V2 qui permet bien de coller le thème source, comme ça vous avez libre choix :
Sub ENR_V2()
Dim WS As Variant, CHEMIN$, ENR_S As Object, WB As Object
For Each WS In Worksheets
Set WB = Workbooks.Add
WS.Cells.Copy
WB.Worksheets(1).PasteSpecial xlPasteAllUsingSourceTheme
Set ENR_S = Application.FileDialog(msoFileDialogSaveAs)
With ENR_S
.Show
CHEMIN = .SelectedItems(1)
End With
ActiveWorkbook.SaveAs CHEMIN
ActiveWorkbook.Close
Next WS
End SubCdlt,
Bonjour,
Pas de soucis je vous trouve plutôt réactif au contraire et dans la mesure où c'est vous qui m'apportez votre aide je ne vais pas en plus me plaindre de ne pas avoir une réponse dans la minute
Je n'ai pas le temps de tester tout ça mais je le ferai demain sans faute.
Merci encore.
Cordialement,
Raoduk
Bonjour,
C'est parfait, tout fonctionne.
Si je peux abuser... Pouvez-vous m'indiquer quel partie du code je doit modifier si je souhaite enregistrer une seule feuille.
Je me pose la question car il pourrait être utile d'enregistrer toutes les feuilles comme c'est le cas avec ce code mais aussi une seule feuille si on effectue des modifications sur une seule feuille.
Cordialement,
Raoduk
Bonjour,
A ce moment vous pouvez faire un tableau de ce type, comme ça si vous voulez en enregistrer 1, 2 ou plus ça rend le tout plus dynamique. J'ai testé rapidement et ça m'a l'air de tenir :
Sub ENR_V3()
Dim WS As Variant, CHEMIN$, ENR_S As Object, WB As Object, WS_T(), WS_N As Byte
WS_T = Array("Rapport R", "Rapport Cart") '<- WS à préciser ici
For Each WS In Worksheets
For WS_N = LBound(WS_T) To UBound(WS_T)
If WS.Name = WS_T(WS_N) Then
Set WB = Workbooks.Add
WS.Cells.Copy
WB.Worksheets(1).PasteSpecial xlPasteAllUsingSourceTheme
Set ENR_S = Application.FileDialog(msoFileDialogSaveAs)
With ENR_S
.Show
CHEMIN = .SelectedItems(1)
End With
ActiveWorkbook.SaveAs CHEMIN
ActiveWorkbook.Close
End If
Next WS_N
Next WS
End SubCdlt,
Bonjour,
C'est parfait.
Merci beaucoup pour votre aide.
Cordialement,
Raoduk