Copier feuilles d'un classeur vers plusieurs autres classeurs

Fermé
Olanid Messages postés 3 Date d'inscription mercredi 9 juin 2021 Statut Membre Dernière intervention 9 juin 2021 - 9 juin 2021 à 00:17
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 19 juin 2021 à 08:29
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
A voir également:

2 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 9 juin 2021 à 08:28
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
Olanid Messages postés 3 Date d'inscription mercredi 9 juin 2021 Statut Membre Dernière intervention 9 juin 2021
9 juin 2021 à 13:49
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > Olanid Messages postés 3 Date d'inscription mercredi 9 juin 2021 Statut Membre Dernière intervention 9 juin 2021
Modifié le 9 juin 2021 à 14:45
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
Olanid Messages postés 3 Date d'inscription mercredi 9 juin 2021 Statut Membre Dernière intervention 9 juin 2021 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
9 juin 2021 à 23:58
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > Olanid Messages postés 3 Date d'inscription mercredi 9 juin 2021 Statut Membre Dernière intervention 9 juin 2021
10 juin 2021 à 07:59
il faut en faire une macro complémentaire, que l'on peut appeler du nouveau classeur:

http://www.modulad.fr/excel-ense/macros-et-feuilles/32-macros-martin/32-macros-martin.pdf

@+ Le Pivert
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
10 juin 2021 à 12:21
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
Dinalo57 Messages postés 2 Date d'inscription jeudi 19 mars 2015 Statut Membre Dernière intervention 19 juin 2021
19 juin 2021 à 00:33
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
19 juin 2021 à 08:29
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