Création d'un classeur de sortie, avec les n feuilles du classeur source
Bonjour,
Je souhaiterais à partir d'un classeur source (avec n feuilles), créer un classeur cible avec n feuilles (chaque feuille reprenant le même nom que les feuilles du classeur source). Je précise que je ne veux pas transférer les données, seulement conserver le même nombre de feuilles avec les mêmes noms (feuilles du classeur de sortie vierges
Ci-dessous un petit aperçu de ce que j'ai commencé à faire mais je suis rapidement bloqué sur 2 paramètres :
- Je ne sais pas comment créer une feuille (dans cet exemple j'ai donc par défaut chargé directement un classeur vierge que j'ai nommé "Portefeuille"... Donc si vous avez une alternative je suis preneur
)
- Je n'arrive pas à créer autant de feuilles que je le souhaiterais. Il semblerait que la boucle "For Each" tourne selon le classeur de sortie (wb2)
Sub test()
Dim wb1, wb2 As Workbook
Dim ws As Worksheet
Dim a As Variant
Dim i As Long, j As Long
'wb1 comme source, wb2 comme sortie
Set wb1 = ThisWorkbook
Set wb2 = Workbooks.Open("Portefeuille.xlsx")
wb1 = Activate
For Each ws In Worksheets 'Pour chaque ws du wb1 :
'Création dans le wb2 des sheets du même nom que celles dans le wb1
wb2.Sheets.Add After:=Worksheets(Worksheets.Count)
'Retour sur le wb1 et manipulation de cellules
wb1 = Activate
a = wb1.ws.Range("A1").CurrentRegion.Value
For i = 2 To UBound(a, 1)
If ws.Cells(i, 1) = "--" Then ws.Cells(i, 1) = 0
Next i
Next
End Sub
Merci d'avance pour le temps et l'aide que vous m'accordez,
Alexandre74006
Bonjour,
Un début de réponse de ce j'ai cru comprendre.
Option Explicit
Public Sub Create_workbook()
Dim wb1 As Workbook, wb2 As Workbook
Dim ws As Worksheet
Dim a As Variant
Dim n As Long, i As Long
n = Application.SheetsInNewWorkbook
Set wb1 = ThisWorkbook
Application.SheetsInNewWorkbook = wb1.Worksheets.Count
Set wb2 = Workbooks.Add
For i = 1 To wb1.Worksheets.Count
wb2.Worksheets(i).Name = wb1.Worksheets(i).Name
Next i
Application.SheetsInNewWorkbook = n
End Sub
Bonjour,
Un début de réponse de ce j'ai cru comprendre.
Option Explicit Public Sub Create_workbook() Dim wb1 As Workbook, wb2 As Workbook Dim n As Long, i As Long n = Application.SheetsInNewWorkbook Set wb1 = ThisWorkbook Application.SheetsInNewWorkbook = wb1.Worksheets.Count Set wb2 = Workbooks.Add For i = 1 To wb1.Worksheets.Count wb2.Worksheets(i).Name = wb1.Worksheets(i).Name Next i Application.SheetsInNewWorkbook = n End Sub
Bonjour Jean-Eric
Merci pour ta réponse, cela fonctionne parfaitement. Cependant j'éprouve une difficulté à "passer" d'un classeur à l'autre. J'ai l'impression qu'une fois que je "manipule" le classeur 2, il m'est impossible de remodifier le classeur 1. J'ai pensé à mettre wb1 = ActivateWorkbook pour "sélectionner manuellement" le classeur 1 mais je suis pas sur que ce soit la solution puisque j'ai un message d'erreur
Dans l'exemple ci-dessous, il suffit que je modifie le nom du classseur2 pour que la sub que tu as écrite ne fonctionne plus
(les feuilles crées ne portent plus le nom des feuilles du classeur1)
Sub test()
Dim wb1, wb2 As Workbook
Dim ws As Worksheet
Dim a As Variant
Dim i, j, n As Long
Dim NomExcel
'compte le nombre de feuilles dans le workbook source
n = Application.SheetsInNewWorkbook
Set wb1 = ThisWorkbook
Application.SheetsInNewWorkbook = wb1.Worksheets.Count
Set wb2 = Workbooks.Add
NomExcel = ThisWorkbook.Path & Application.PathSeparator & ActiveWindow.Caption
ActiveWorkbook.SaveAs ThisWorkbook.Path & Application.PathSeparator & "Portefeuille.xlsx"
'J'avais pensé à mettre "manuellement" à cet endroit : wb1 = ActivateWorkbook mais ça me fait une erreur sur la ligne suivante
For i = 1 To wb1.Worksheets.Count
wb2.Worksheets(i).Name = wb1.Worksheets(i).Name
Next i
End Sub
Re,
Essaie ainsi :
Option Explicit
Public Sub Create_workbook()
'Déclaraion des variables
Dim wb1 As Workbook, wb2 As Workbook
Dim sPath As String, sFile As String
Dim n As Long, i As Long
'Mémorisation du nombre de feuilles insérées lors de la création d'un classeur
'(Options générales Excel)
n = Application.SheetsInNewWorkbook
'Initialisation du classeur source pour la procédure
Set wb1 = ThisWorkbook
'Chemin d'accès complet à l'application
strpath = wb1.Path & Application.PathSeparator
'Nombre de feuilles à insérer lors de la création d'un classeur
Application.SheetsInNewWorkbook = wb1.Worksheets.Count
'Création nouveau classeur
Set wb2 = Workbooks.Add
'On renomme chaque feuille du nouveau classeur à l'identique du classeur source
For i = 1 To wb1.Worksheets.Count
wb2.Worksheets(i).Name = wb1.Worksheets(i).Name
Next i
'Nom nouveau fichier
sFile = "Portefeuille.xlsx"
'Enregistrement du nouveau classeur
wb2.SaveAs Filename:=sPath & sFile, FileFormat:=51
'On rétablit le nombre de feuilles à insérer lors de la création d'un nouveau classeur
Application.SheetsInNewWorkbook = n
End Sub
* Quand un terme t'est inconnu, fais un double clic sur celui-ci et fais F1 !...
Ah je ne connaissais pas l'aide à la touche F1, ça risque de beaucoup me servir !
Merci infiniment Eric !
Bonne soirée,
Alexandre
Bonjour,
Tu auras évidemment corrigé strPath par sPath.
Cdlt.