Copier feuilles d'un classeur vers plusieurs autres classeurs

Olanid Messages postés 3 Statut Membre -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
Bonjour,

Tout juste débutant en VBA (quelques vidéos à peine), ce que je demande est bien au dessus de mes capacités c'est pourquoi j'en appelle à vous.

Ce que je veux faire :
J'ai un classeur source (dans un dossier sur mon bureau) avec plusieurs feuilles. J'aimerais que pour chaque feuille (ou si c'est trop complexe, pour la feuille active), ma macro crée un classeur (dans le même dossier) du nom de la feuille + "A FAIRE".

Par exemple si la feuille s'appelle "Ventes du jour", le nouveau classeur soit nommé "Ventes du jour A FAIRE" et qu'il contienne une unique feuille "Ventes du jour".

Il y aura donc dans mon dossier autant de nouveaux classeurs que de feuilles dans mon classeur source.

Je vous remercie par avance

Configuration: Windows / Chrome 91.0.4472.77

2 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    voir ceci:

    https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheet.copy

    ce qui donne:

    Option Explicit
    'https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheet.copy
    Sub test()
    Worksheets("Feuil1").Copy 'adapter nom de la feuille
    With ActiveWorkbook
         .SaveAs Filename:=ThisWorkbook.Path & "\Feuil1.xlsx", FileFormat:=xlOpenXMLWorkbook 'adapter le chemin
         .Close SaveChanges:=False
    End With
    End Sub
    


    voilà

    0
    1. Olanid Messages postés 3 Statut Membre
       
      Merci pour votre aide!

      J'ai essayé de comprendre et adapter ça à mon cas particulier et je n'arrive à rien. Je pense ne pas avoir les connaissances du tout
      0
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > Olanid Messages postés 3 Statut Membre
         
        Marche à suivre pour faire toutes les feuilles du classeur

        Allez dans l'éditeur en faisant Alt F11.

        Ensuite insérer un module

        Mettre ce code dans ce module

        Option Explicit
        'https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LI
        'Déclare la variable objet Worksheet
        Dim Ws As Worksheet
        Sub boucle() 'pour lancer la macro mettre le curseur sur boucle et faire F5
        'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris
        'en compte.
        'ThisWorkbook correspond à l'objet classeur contenant la macro
        For Each Ws In ThisWorkbook.Worksheets
            'Renvoie le nom de chaque feuille
            Ws.Select
            copy
        Next Ws
        End Sub
        'https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheet.copy
        Sub copy()
        Worksheets(Ws.Name).copy
        With ActiveWorkbook
             .SaveAs Filename:=ThisWorkbook.Path & "\" & Ws.Name & ".xlsx", FileFormat:=xlOpenXMLWorkbook 'enregistrer dans la même dossier que le classeur
             .Close SaveChanges:=False
        End With
        End Sub
        


        enregistrer le classeur sous: classeur acceptant les macros avant de lancer la macro

        voilà c'est tout simple!

        @+ Le Pivert
        0
      2. Olanid Messages postés 3 Statut Membre > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        Merci pour votre aide ! Un temps précieux de gagner pour moi :)

        Juste une petite question, je dois réimporter votre code pour chaque classeur que je veux split ? Ou il y a possibilité d'avoir une macro qui s'éxécute pour chaque fichier sur lequel je travaille
        0
      3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        J'ai trouvé un moyen plus simple. Tout d'abord il faut attribuer un raccourci clavier à la macro boucle:

        https://fr.extendoffice.com/documents/excel/5102-excel-assign-hotkey-to-macro.html

        ensuite modifier le code:

        Option Explicit
        'https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LI
        'Déclare la variable objet Worksheet
        Dim Ws As Worksheet
        Sub boucle() 'pour lancer la macro raccourci clavier
        'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris
        'en compte.
        'ActiveWorkbook correspond à l'objet classeur dans lequel on veut copier les feuilles
        For Each Ws In ActiveWorkbook.Worksheets
            'Renvoie le nom de chaque feuille
            Ws.Select
            copy
        Next Ws
        End Sub
        'https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheet.copy
        Sub copy()
        Worksheets(Ws.Name).copy
        With ActiveWorkbook
             .SaveAs Filename:=ThisWorkbook.Path & "\" & Ws.Name & ".xlsx", FileFormat:=xlOpenXMLWorkbook 'enregistrer dans la même dossier que le classeur
             .Close SaveChanges:=False
        End With
        End Sub
        


        quand tout cela est fait ouvrir la classeur contenant la macro.
        ensuite ouvrir le classeur à copier les feuilles pour qu'il soit actif(visible à l'écran) et lancer la macro avec la raccourci clavier

        j'ai essayer cela fonctionne très bien

        Bonne programmation

        @+ Le Pivert
        0
  2. Dinalo57 Messages postés 3 Statut Membre
     
    Tout est ok, sauf que les fichiers sont enregistrés dans le dossier du classeur personnel (apddata) et non dans le dossier de fichier à split.

    Cdlt
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Remplacer ThisWorkbook.Path par le chemin en dur du dossier de fichier à split.

      comme ceci:

      With ActiveWorkbook
           .SaveAs Filename:="chemin du dossier de fichier à split\" & Ws.Name & ".xlsx", FileFormat:=xlOpenXMLWorkbook 'enregistrer dans la même dossier que le classeur
           .Close SaveChanges:=False
      End With


      @+
      0