générer nouveaux classeurs à partir de feuilles

V

Virginie

Guest
Bonjour les spécialistes,

Voilà quelques temps que je n'étais pas passé vous voir, et je constate que votre forum est toujours des plus actifs.
Je voudrai écrire une macro qui génére à partir d'un classeur X autant de nouveaux classeurs que de feuilles contenues dans ce classeur X. (chaque nouveau classeur contiendrait une feuille du classeur X) et laisser à l'utilisateur choisir l'emplacement où il désire stocker ces nouveaux classeurs.

j'ai essayé de composer avec ces bouts de code que j'ai trouvé sur ce forum, mais ils 'bug' à Sheets(sh).Select. Et je ne parviens pas à trouver comment laisser le choix du repertoire de destination à l'utilisateur, dans ce code le repertoire est en 'dur'.


Sub séparation()

' Macro enregistrée le 18/07/2005 par CB
'
Dim sh As Worksheet
Dim lenom As String
Dim lenom2 As String

For Each sh In Sheets
Sheets(sh).Select
Sheets(sh).Copy
lenom = sh.Name
lenom2 = lenom & '.xls'

ChDir 'C:'
ActiveWorkbook.SaveAs Filename:= _
'C:lenom2', FileFormat:= _
xlNormal, Password:='', WriteResPassword:='', ReadOnlyRecommended:=False _
, CreateBackup:=False

Next sh

End Sub

Merci pour votre patience, je vous embrasse par avance pour l'aide que vous pourrez m'apporter.

Virginie
 

KIM

XLDnaute Accro
Bonjour Dan, le forum,
En testant tes 2 macros,
1- à la création d'un nouveau classeur, comment le sauvegarder directement sous le nom du classeur initial + date
2- Le nouveau classeur créé est effectivement sans formule
parcontre, c'est peut etre un oubli de ma part, il y les macros, la liaison avec le classeur initial.
Comment créer ou sauvegarder ce nouveau classeur sans macros ni liaison
3- Pour generer des classeurs à partir des feuilles du nouveau classeur (sans formules) , j'ai rajouter les instructions de la
macro de Virginie à la suite de l'instruction \\'Next W\\' et ce, dans la macro Archive. AUCUN resultat ni message d'erreur.
Merci d'avance
Amicalement
KIM
 

Dan

XLDnaute Barbatruc
Bonjour Kim,

1. C'est possible mais laisse moi le temps de regarder cela. Dans quel répertoire veux-tu sauver cela ?

2. Le nouveau classeur ne comporte pas de macros. En fait comme les deux classeurs restent ouverts, tu as confondu les macros se trouvant dans le classeur d'origine et le nouveau.

3. Ce que tu veux c'est pouvoir sauver chaque feuille dans un classeur différent en plus de la macro que je t'ai faite et ce, en même temps? si oui, c'est un choix ou tu veux faire tout en même temps que la macro archive que j'ai faite ?

:)

Message édité par: Dan, à: 07/10/2005 09:04
 

KIM

XLDnaute Accro
Re,
1. merci d'avance

2. Le nouveau classeur ne comporte pas de macros. En fait comme les deux classeurs restent ouverts,
tu as confondu les macros se trouvant dans le classeur d'origine et le nouveau.
Avec mes excuses, effectivement le nouveau classeur est sans macros,
parcontre lors de la crétion de ce nouveau classeur, il y a création d'une liaison avec le classeur initial. Peut-on la supprimer?


3. Ce que tu veux c'est pouvoir sauver chaque feuille dans un classeur différent en plus de la macro que je t'ai faite et ce, en même temps? si oui, c'est un choix ou tu veux faire tout en même temps que la macro archive que j'ai faite ?
Si c'est possible par un simple choix O ou N c'est preferable.

Merci d'avance
Amicalement
KIM
 

Dan

XLDnaute Barbatruc
Re,

1. Dans quel répertoire veux-tu sauver ton classeur ?

2. Il n'y a aucun liaison sauf si ton classeur d'origine prélève des infos d'un autre classeur. Est-ce le cas ?
La macro que je te propose ne crée aucune liaison. Elle sauve un classeur et élimine les feuilles non désirées.

3. Ok vu ton message

;)
 

KIM

XLDnaute Accro
Re,
1. Dans quel répertoire veux-tu sauver ton classeur ?
Dans un repertoire du repertoire courant
J'ai créé le repertoire 'LFEUIL' dans le repertoire courant
et les sauvegardes se feront dans ce repertoire


2. Il n'y a aucune liaison sauf si ton classeur d'origine prélève des infos d'un autre classeur.
Est-ce le cas ?
Je viens de controler mon classeur d'origine, aucune liaison

La macro que je te propose ne crée aucune liaison. Elle sauve un classeur et élimine les feuilles non désirées.
Je viens de refaire un nouveau test avec la macro archive.
le nouveau classeur possède bien une liaison avec le classeur original.

3. Ok vu ton message

Merci
KIM
 

Dan

XLDnaute Barbatruc
Re,

1. pour sauvegarder ton nouveau fichier avec la date du jour, place cette instruction dans la macro archive juste après 'NEXT W'
Code:
ActiveWorkbook.SaveAs Filename:='C:' & 'lefeuil' & Format(Now(), 'ddmmyy')

- C: définit le répertoire (rajoute ton répertoire derrière précédé d'un backslash)
- lefeuil est le nom de ton fichier
- Format : ajoute la date du jour

2. Je n'ai absolument aucune liaison. Il doit y avoir quelque chose dans ton fichier qui fait que tu les gardes. Peux-tu me dire comment tu vois qu'il y a des liaisons et quelles sont-elles ?

3. quel nom vas-tu donner aux classeurs créés avec une feuille et dans quel répertoire vas-tu les placer.
Je pense que si tu combines les macros proposées plus haut tu arrives à faire cela.
Après on pourra penser à faire une demande OUI ou NON



;)
 

KIM

XLDnaute Accro
Re,
Merci de tes reponses,
1- Sauvegarde du classeur OK

2. Peux-tu me dire comment tu vois qu'il y a des liaisons et quelles sont-elles ?
Effectivement, je sauvegarde le classeur créé et je l'ouvre de nouveau, il ne demande pas de mettre à jour les liaisons car il n'y a plus de formules,
parcontre il existe une ligne dans : Edition/Liaisons qui fait reference au classeur initial.
Ce n'est pas génant, mais y-a-t-il moyen de la supprimer?


3. Je pense que si tu combines les macros proposées plus haut tu arrives à faire cela.
à la suite de l'instruction \\'Next W\\' et ce, dans la macro Archive
j'ai rajouté le nom de la macro 'separation'
Toutes les feuilles sont bien sauvegardées avec leur nom.xls.


Après on pourra penser à faire une demande OUI ou NON
Si possible merci

Merci
KIM
 

Dan

XLDnaute Barbatruc
Re,

1. dis moi qu'elle est cette liaison car dans le fichier sur lequel j'ai travaillé je n'ai rien comme liaison dans le nouveau classeur après avoir effectué la macro que je te propose.

Sinon, voilà une instruction à placer dans la macro Archive après NEXT W
Code:
ActiveWorkbook.BreakLink Name:='c:' & 'Sauvegardefeuille-kim.xls', Type:=xlExcelLinks

- C: définit le répertoire (rajoute ton répertoire derrière précédé d'un backslash)

2. La demande OUI – NON
Place la macro ci-dessous dans ton fichier.

Code:
Sub Start()
Dim Message As String, Title As String, Default As String, MyValue As String' Définit le message.
Message = 'Encoder O pour archiver globalement ou N pour archiver feuille à feuille'
Title = 'Choix des options'
Default = 'O'   'Définition la valeur par défaut.
MyValue = InputBox(Message, Title, Default)
If MyValue = 'O' Then Archive 'exécute la macro Archive
If MyValue = 'N' Then Archive 'exécute la macro archivage feuille à feuille
Msg = 'Redémarrage par CTRL  e' 'Définit le message.
Style = vbOKOnly + vbInformation
Title = 'Message' ' Définit les titres.
Answer = MsgBox(Msg, Style, Title)
End Sub

NB :
- après le 'N' then ? Place le nom de ta macro de sauvegarde feuille à feuille
- Vas dans menu / outils / macro / macro et sélectionne la macro START. Puis clique sur option et ajoute un 'e' pour la touche de raccourci. Cela te permet de relancer ces sauvegarde par CTRL + e.

Espérant que tout est OK


;)
 

ChTi160

XLDnaute Barbatruc
Salut Virginie
bonsoir le Fil
bonsoir le Forum
un coucou particulier à Dan et KIM

voilà la macro que j'ai tiré des conseils de @+Thierry et Dan
Kim je t'envoye sous peu ton fichier avec cette macro qu'il faut placer dans un module du fichier Origine ici TDB1
Code:
Sub Archive()
 Dim WSClone As Worksheet
 Dim Ws As Worksheet
 Dim WB1 As Workbook
 Dim derlgn As Byte
 Dim Chemin As String
 
 With Application
      .DisplayAlerts = False
      .ScreenUpdating = False
 End With
  
  
Set WB1 = Workbooks('TDB1.xls')'modifier le nom du classeur
Chemin = ActiveWorkbook.Path

  For Each Ws In Worksheets
      
     With Ws
         If Left(.Name, 2) = 'CM' Then
         
  derlgn = .Range('M1000').End(xlUp).Row
     
     Sheets(.Name).Copy
     
     Set WSClone = ActiveSheet
        With WSClone
           .Range('A1:M' & derlgn).Copy
           .Range('A1:M' & derlgn).PasteSpecial Paste:=xlPasteValues
        End With
           Application.CutCopyMode = False
         ActiveWorkbook.SaveAs Filename:= _
        Chemin & '\\' & Ws.Name & '-' & Format(Date, 'dd-mm-yyyy') & '.xls', FileFormat:= _
        xlNormal, Password:='', WriteResPassword:='', ReadOnlyRecommended:=False _
        , CreateBackup:=False
        
  ActiveWorkbook.Close

       End If
    End With
  Next
    With Application
      .DisplayAlerts = True
      .ScreenUpdating = True
 End With
End Sub

bonne Soirée

Message édité par: Chti160, à: 07/10/2005 19:16
 

KIM

XLDnaute Accro
Bonjour le forum, Virginie, Dan et J_Marie,
Dan,
Merci pour tes reponses, En créant une archive globale, effectivement le nouveau classeur est sans formule parcontre en sauvegardant une par une les feuilles, je me retrouve avec les formules dans les feuilles et la liaison avec le fichier origine.
Jean Marie,
Effectivement ce n'est pas evident de sauvegarder une feuille sans les formules. Je vais tester ta macro et te tiendrai au courant.
Merci Dan, merci Jean Marie de toute votre aide
ainsi que le forum.
Bon Dimache
Amicalement
KIM
 

KIM

XLDnaute Accro
Bonjour le Forum,
Je tiens à remercier Dan, Jean-marie et _Thierry pour les macros necessaires à la génération de feuilles automatiquement (_Thierry), à l'archivage globale du classeur dans un nouveau classeur sans formules ni macros (Dan) et à l'archivage de chaque feuille dans un nouveau classeur sans formules ni macros (Jean-Marie) avec seulement les données du classeur initial.
Ces macros m'ont ete tres utiles pour generer des tableaux de bord selon une fiche formatée et paramétrée à l'avance (TDB_REF) et pouvoir distribuer les feuilles resultats aux personnes intéressées sans macros ni formules, seulement avec les resultats.
Merci à vous tous et au forum,
Je joins un exemple de ces macros
Cordialement
KIM [file name=TDB_V1.zip size=22514]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TDB_V1.zip[/file]
 

Pièces jointes

  • TDB_V1.zip
    22 KB · Affichages: 20

Discussions similaires