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.

Bonjour,

Tu auras évidemment corrigé strPath par sPath.

Cdlt.

Oui j'avais vu !

Merci encore !

Rechercher des sujets similaires à "creation classeur sortie feuilles source"