Boucle pour copier cellules d'un classeur à un nouveau

Bonjour,

j'ai un classeur avec des données, je souhaite créer une boucle permettant de copier le contenu de chaque feuille vers un nouveau classeur (avec la possibilité d'enregistrer le classeur nouveau dans un endroit déterminé et avec un nom prédéfini.

J'ai essayé ça par moi même

For Each feuil In ThisWorkbook.Worksheets
        feuil.Activate
        feuil.Copy
        Workbooks.Add
        ActiveSheet.Paste
    Next feuil

End Sub

Problème j'ai autant de classeur que de feuilles...

EDIT: J'ai trouvé en partie ma solution:

Sub Macro1()
   lieu_rec = ActiveWorkbook.Path
   Sheets("suivi_sarah").Copy
    Sheets("suivi_toto").Select
    Sheets("suivi_toto").Copy
    With ActiveWorkbook
     .Title = "oulouloulou"

     .SaveAs Filename:=lieu_rec + "\oulouloulou" + ActiveSheet.Name + ".xls"
    End With
End Sub

ça fonctionne pour la première mais pas la deuxième :

Dimension spécifiée non valide pour le type de graphique en cours

Cordialement,

Bonjour

Essaie ce code :

Sub ess()
    Set wS = ActiveWorkbook
    Workbooks.Add
    Set wD = ActiveWorkbook
    For Each feuil In wS.Worksheets
        feuil.Copy Before:=wD.Sheets(1)
        wS.Activate
    Next feuil
End Sub

Bye !

Gmd j'ai adapté mon code et le tien et ça fonctionne mille merci !

   Sub ess()
      chemin = ActiveWorkbook.Path
    Set feuil = Worksheets

        Set wS = ActiveWorkbook
        Workbooks.Add
        Set wd = ActiveWorkbook
        For Each feuil In wS.Worksheets
            feuil.Copy Before:=wd.Sheets(1)
            wS.Activate
        Next feuil
        wd.SaveAs Filename:=chemin + "\suivi_activité" + ".xls"
    End Sub

Pour éviter le double poste, je me permet d'insérer ma nouvelle requête ici étant donnée que c'est quasiment la même question.

Donc comme je le disais au dessus ça fonctionne. Sauf que ce fichier, via un fichier vbs et .bat doit s'envoyer par mail. Sauf que la copie que je réalise est trop lourde pour l'envoie.

La solution que je souhaite est donc : copie d'une plage de cellule de chaque feuille dans un nouveau classeur excel

Ce qui me permettrait d'avoir un fichier assez léger, j'ai tester ce code :

Application.DisplayAlerts = False
Application.ScreenUpdating = false

chemin = ActiveWorkbook.Path
    Set feuil = Worksheets

        Set ws = ActiveWorkbook
        Set plage = Range("a1:p350")

        Workbooks.Add
        Set wd = ActiveWorkbook
        For Each feuil In ws.Worksheets
        ws.feuil.plage.Select ' cette ligne pose problème

    plage.Copy Before:=wd.Sheets(1)
            ws.Activate
        Next feuil
        wd.SaveAs Filename:=chemin + "\suivi" + ".xls", FileFormat:=xlNormal
        wd.Sheets(3).Delete
        wd.Sheets(4).Delete
       ' wd.Close
      Application.DisplayAlerts = True
Application.ScreenUpdating = true

Mais ça ne fonctionne pas erreur au niveau de la sélection : ws.feuil.plage.Select.

Je sais pas si je suis très claire :/

J'espère réellement que une âme charitable va pouvoir me donner un coup de main^^ Parce que je sais que c'est assez basique comme macro mais c'est le seul truck qui me manque pour que mon outil soit complet

Bonjour

Jean351601 a écrit :
ws.feuil.plage.Select ' cette ligne pose problème

Essaie en remplaçant "plage" par sa définition :

ws.feuil.Range("a1:p350").Select 

Bye !

Erf

la méthode select range à échoué avec:

feuil.Range("a1:p350").Select

  feuil.Copy Before:=wd.Sheets(1)
            ws.Activate
        Next feuil

et propriété ou méthode non géré par cet objet avec ça:

   Set feuil = Worksheets

        Set ws = ActiveWorkbook
        Set plage = Range("a1:p350")

        Workbooks.Add
        Set wd = ActiveWorkbook
        For Each feuil In ws.Worksheets
        ws.feuil.Range("a1:p350").Select

plage.Copy Before:=wd.Sheets(1)
            ws.Activate
        Next feuil

J'ai aussi tenté de cette manière

  For Each feuil In ws.Worksheets

             Cells.Select
           Selection.Copy Before:=wd.Sheets(1)
            ws.Activate
        Next feuil

Mais la ça coince aussi

Essaie ce code :

Sub Exporter()

    Application.ScreenUpdating = False
    chemin = ActiveWorkbook.Path
    Set fdep = ActiveSheet
    Set ws = ActiveWorkbook
    Workbooks.Add
    Set wd = ActiveWorkbook
    For Each feuil In ws.Worksheets
        wd.Sheets.Add before:=ActiveSheet
        Set f = wd.ActiveSheet
        ws.Activate
        feuil.Range("a1:p350").Copy f.Range("A1")
    Next feuil
    wd.SaveAs Filename:=chemin + "\suivi" + ".xls", FileFormat:=xlNormal
    wd.Close
    fdep.Select
End Sub

Bye !

Je te remercie car encore une fois en mélangeant ton code et le mien j'ai réussi

Attention la boucle que tu as mis en place est cependant très lourde !

Rechercher des sujets similaires à "boucle copier classeur nouveau"