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

Résolu/Fermé
Audrey - 9 mars 2015 à 06:06
 Audrey - 9 mars 2015 à 15:13
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

cs_Le Pivert
Messages postés
7822
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2022
716
9 mars 2015 à 14:12
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
Cette dernière solution semble fonctionner comme sur des roulettes!!

Un grand merci pour votre aide!!
0
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
cs_Le Pivert
Messages postés
7822
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2022
716
9 mars 2015 à 14:48
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
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
Merci cs_Le Pivert!
0
cs_Le Pivert
Messages postés
7822
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2022
716
9 mars 2015 à 07:59
Bonjour,

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

0
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
cs_Le Pivert
Messages postés
7822
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2022
716
9 mars 2015 à 10:46
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
pijaku
Messages postés
12259
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
9 août 2022
2 703
9 mars 2015 à 10:57
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
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
pijaku
Messages postés
12259
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
9 août 2022
2 703 > Audrey
9 mars 2015 à 14:46
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
J'entends par là: dans l'ordre de leur positionnement dans le classeur.
0