Comment «diviser» un fichier Excel (.xlsx) contenant plusieurs feuilles en une feuille distincte [n] .xlsx?

17

Je pense que le titre dit tout pour cette question, mais pour développer un peu plus:

J'ai un fichier .xlsx qui contient quelques dizaines de feuilles. Je veux sortir toutes ces feuilles en tant que fichiers .xlsx séparés. Il n'est pas nécessaire de les nommer automatiquement. Excel a-t-il une fonction pour exporter des feuilles dans un fichier séparé?

eichoa3I
la source

Réponses:

17

Ce n'est pas une fonction intégrée.

Cependant, si vous exécutez ce code, il devrait faire le travail.

Sub SaveSheets()
    Dim strPath As String
    Dim ws As Worksheet

    Application.ScreenUpdating = False

    strPath = ActiveWorkbook.Path & "\"
    For Each ws In ThisWorkbook.Sheets
        ws.Copy
        'Use this line if you want to break any links:
        BreakLinks Workbooks(Workbooks.Count)
        Workbooks(Workbooks.Count).Close True, strPath & ws.Name & ".xlsx"
    Next

    Application.ScreenUpdating = True
End Sub

Sub BreakLinks(wb As Workbook)
    Dim lnk As Variant
    For Each lnk In wb.LinkSources(xlExcelLinks)
        wb.BreakLink lnk, xlLinkTypeExcelLinks
    Next
End Sub

Pour exécuter le code, procédez comme suit:

  1. Ouvrez l'éditeur VBA ( Alt+ F11)
  2. Dans l'arborescence en haut à gauche, faites un clic droit sur votre classeur et insérez un nouveau module
  3. Copiez le code ci-dessus dans ce module
  4. Fermez l'éditeur VBA
  5. Dans Excel, appuyez sur Alt+ F8pour exécuter les macros et sélectionnezSaveSheets

ou voir Comment ajouter VBA dans MS Office?

Peter Albert
la source
Merci! Et l'inverse? - pour le remonter? Ce fichier Excel contenait apparemment des "liens" (je n'ai jamais utilisé cette fonctionnalité auparavant), et après le fractionnement, Excel ne peut pas trouver les liens (il recherche la première feuille); est-il là pour les diviser et mettre à jour les liens en même temps / ou simplement mettre à jour les liens?
eichoa3I
1
la question est de savoir comment vous souhaitez gérer les liens. Vous pouvez facilement les remplacer par des valeurs en insérant Workbooks(Workbooks.Count).BreakLinksaprès ws.Copy...
Peter Albert
Après avoir ouvert un classeur, une fenêtre contextuelle dans Excel m'a invité à corriger les liens; J'ai cliqué sur cette boîte de dialogue et maintenant les liens fonctionnent pour tous les fichiers. Je me demande si cela a été enregistré dans le fichier ou localement ...
eichoa3I
Lorsque vous dites les remplacer par des valeurs avec des classeurs (Workbooks.Coun). BreakLinks signifie-t-on que les liens sont supprimés, ou ...? Je pense que la meilleure façon de les gérer est simplement de les supprimer (c'est-à-dire que lorsque les utilisateurs ouvrent les fichiers Excel maintenant séparés, ils ne voient pas l'avertissement concernant les liens rompus).
eichoa3I
désolé, essayez Workbooks(Workbooks.Count).BreakLink- sans sà la fin
Peter Albert
11
  1. Lorsque vous cliquez avec le bouton droit sur l'onglet d'une feuille Excel, vous pouvez sélectionner Déplacer ou Copier ...

    entrez la description de l'image ici

  2. Dans la boîte de dialogue résultante, vous pouvez sélectionner un classeur cible. Sélectionnez (nouveau livre) .

    entrez la description de l'image ici

  3. Cliquez OK . Votre feuille est maintenant dans un nouveau document.

Der Hochstapler
la source
8

J'ai essayé la solution de Peter Albert et cela n'a pas fonctionné pour moi, j'ai donc trouvé une solution dans cet article ("Excel - enregistrer des feuilles de calcul dans des fichiers séparés") dans le journal d'un geek informatique .

Cela fonctionne très bien. Vous devez renommer les feuilles contenant des points pour obtenir des fichiers correctement nommés avec des .xlsextensions.

Sub CreateNewWBS()
Dim wbThis As Workbook
Dim wbNew As Workbook
Dim ws As Worksheet
Dim strFilename As String

    Set wbThis = ThisWorkbook
    For Each ws In wbThis.Worksheets
        strFilename = wbThis.Path & "/" & ws.Name
        ws.Copy
        Set wbNew = ActiveWorkbook
        wbNew.SaveAs strFilename
        wbNew.Close
    Next ws
End Sub

Utilisez les instructions pour créer et exécuter cette macro à partir de la publication de Peter Albert ou de Comment ajouter VBA dans MS Office?

hrvoj3e
la source
1
J'ai également essayé la solution de Peter Albert et il y a eu une erreur "Erreur d'exécution '13 ': incompatibilité de type. Heureusement, la solution de cette réponse fonctionne pour moi.
Bin
comment puis-je le faire écraser les fichiers existants du même nom?
DAE
Je n'ai pas eu besoin de cela car chaque vidage est placé dans un dossier séparé. Peut-être essayez ce fil
hrvoj3e
Votre solution a fonctionné pour moi :)
Muhammad Waheed