VBA Excel: création de classeurs par feuille: ajustemt de code

Résolu
Audrey -  
 Audrey -
Bonjour,

J'ai trouvé un code permettant de créer un classeur par feuille contenue dans le classeur d'origine:
Sub Macro2()
For Each feuille In ActiveWorkbook.Sheets
feuille.Copy
With ActiveWorkbook
.Title = feuille.Name
.Subject = feuille.Name
.SaveAs Filename:=feuille.Name + ".xlsx"
End With
Next
End Sub


Quels ajustements apporter à ce code pour qu'il ne crée de classeur qu'à partir de la troisième feuille?

Merci!

3 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Avec l'index de la feuille:

    Sub Macro2()
    Dim feuille
    For Each feuille In ActiveWorkbook.Sheets
     If feuille.Index > 3 Then
     feuille.Copy
     With ActiveWorkbook
     .Title = feuille.Name
     .Subject = feuille.Name
     .SaveAs Filename:=feuille.Name + ".xlsx"
    End With
    End If
     Next
    End Sub

    2
    1. Audrey
       
      Cette dernière solution semble fonctionner comme sur des roulettes!!

      Un grand merci pour votre aide!!
      0
    2. Audrey
       
      Dernière petite question: comment faire pour que les fichiers créés s'enregistrent dans le même répertoire que le celui contenant le fichier de la macro? Je sais que ça doit passer par
      thisworkbook.path
      mais où l'intégrer dans le code?

      Merci encore!
      0
    3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Sub Macro2()
      Dim feuille
      For Each feuille In ActiveWorkbook.Sheets
       If feuille.Index > 3 Then
       feuille.Copy
       With ActiveWorkbook
       .Title = feuille.Name
       .Subject = feuille.Name
       .SaveAs Filename:=ThisWorkbook.Path & "\" & feuille.Name & ".xlsx"
      End With
      End If
       Next
      End Sub
      0
    4. Audrey
       
      J'ai trouvé la réponse à ma propre question, et souhaite en faire profiter la communauté:
      Sub Macro1()
      Dim feuille
      For Each feuille In ActiveWorkbook.Sheets
      If feuille.Index > 2 Then
      feuille.Copy
      With ActiveWorkbook
      .Title = feuille.Name
      .Subject = feuille.Name
      .SaveAs Filename:=ThisWorkbook.Path & "\" & feuille.Name + ".xlsx"
      End With
      End If
      Next
      End Sub

      Merci encore aux contributeurs!
      0
    5. Audrey
       
      Merci cs_Le Pivert!
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Dim i As Integer
    For i = 3 To Worksheets.Count 'nbre de feuilles
    

    0
    1. Audrey
       
      Bonjour,

      merci pour la réponse, mais lorsque j'ajoute vos lignes en début de code:
      Sub Macro2()
      Dim i As Integer
      For i = 2 To Worksheets.Count
      For Each feuille In ActiveWorkbook.Sheets
      feuille.Copy
      With ActiveWorkbook
      .Title = feuille.Name
      .Subject = feuille.Name
      .SaveAs Filename:=feuille.Name + ".xlsx"
      End With
      Next
      Next i
      End Sub

      il me créé autant de fichiers que de feuilles et en ajoute même une autre, ce qui entraîne un message d'erreur en surlignant la ligne
      .SaveAs Filename:=feuille.Name + ".xlsx"

      Comment faire?
      0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    J'ai répondu un peu vite ce matin.
    Voici le code:

    Sub Macro2()
    Dim feuille
    For Each feuille In ActiveWorkbook.Sheets
     If feuille.Name > "Feuil3" Then
     feuille.Copy
     With ActiveWorkbook
     .Title = feuille.Name
     .Subject = feuille.Name
     .SaveAs Filename:=feuille.Name + ".xlsx"
    End With
    End If
     Next
    End Sub
    


    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour Le Pivert,

      Le souci ici est que cette question : Quels ajustements apporter à ce code pour qu'il ne crée de classeur qu'à partir de la troisième feuille? est vraiment incomplète.
      Le code que tu donnes ne fonctionne pas correctement si j'ai des feuilles nommées "acrobate", "bazar"...
      Il faut vraiment qu'Audrey, si elle souhaite "évincer" des feuilles de son code, nous :
      - liste les noms des feuilles à "évincer"
      - dise combien de feuilles sont à traiter..
      En effet, si son classeur contient 5 feuilles nommées Feuil1, Feuil2, Feuil3, Feuil4 et Feuil5, le code ne sera pas le même que si son classeur contient 15 feuilles nommées Feuil1, Feuil2, Feuil3, janvier, février,..., décembre.
      0
    2. Audrey
       
      Rebonjour,

      Et merci à vous deux. Après avoir testé le nouveau code, il s'avère qu'il crée des fichiers pour chacune des feuilles sans tenir compte de leur positionnement.
      Mon souhait serait d'obtenir un code universel, autrement dit utilisable sur n'importe quel classeur, quel que soit le nom et le nombre de feuilles. En gros, dire: créer un classeur pour toutes les feuilles comprises entre la troisième et la dernière.

      Merci encore!
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Audrey
         
        Le problème est le suivant :
        les feuilles comprises entre la troisième et la dernière.
        - Dans l'ordre de leur positionnement dans le classeur?
        - Dans l'ordre de leur index? Feuil1, Feuil2, Feuil3...

        Donc, peux tu définir : comprises entre la troisième et la dernière
        0
    3. Audrey
       
      J'entends par là: dans l'ordre de leur positionnement dans le classeur.
      0