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 -
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
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
-
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à
-
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- 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 - 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 - 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
-
-
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-
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
@+
-