Copier feuilles d'un classeur vers plusieurs autres classeurs

Signaler
Messages postés
3
Date d'inscription
mercredi 9 juin 2021
Statut
Membre
Dernière intervention
9 juin 2021
-
Messages postés
7413
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 juin 2021
-
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

1 réponse

Messages postés
7413
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 juin 2021
637
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à

Messages postés
3
Date d'inscription
mercredi 9 juin 2021
Statut
Membre
Dernière intervention
9 juin 2021

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
Messages postés
7413
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 juin 2021
637 >
Messages postés
3
Date d'inscription
mercredi 9 juin 2021
Statut
Membre
Dernière intervention
9 juin 2021

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
Messages postés
3
Date d'inscription
mercredi 9 juin 2021
Statut
Membre
Dernière intervention
9 juin 2021
>
Messages postés
7413
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 juin 2021

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
Messages postés
7413
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 juin 2021
637 >
Messages postés
3
Date d'inscription
mercredi 9 juin 2021
Statut
Membre
Dernière intervention
9 juin 2021

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
Messages postés
7413
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 juin 2021
637 >
Messages postés
7413
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 juin 2021

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