XL 2016 vba créer un classeur pour chaque feuille d'un classeur

MONTREAL2020

XLDnaute Junior
Bonjour,

Je sollicite votre aide pour:
À partir d'un classeur comportant plusieurs feuilles:
1- Créer un classeur chaque feuille du classeur
2- Définir les feuilles qui vont être transformer en classeur
3- Leur donner un nom figurant sur une cellule de la feuille elle même + un suffixe commun à toutes les feuille
4- Les enregistrés dans le même dossier du classeur initial

Merci beaucoup votre support
 
Solution
Re

@MONTREAL2020
Je te laisse étudier ce petit test
1) Sur un classeur vierge, avec une seule feuille
Lance la macro nommée cree_Exemple
Code:
Sub cree_Exemple()
Sheets(1).Name = "DATA BASE PRODUITS"
Sheets.Add(after:=Sheets(1)).Name = "Liste Acheteurs"
Sheets.Add(after:=Sheets(2)).Name = "Pays"
For i = 4 To 8
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "STAPLE_" & Format(i, "00")
Next
End Sub
Puis lance cette macro
Code:
Sub test_boucle()
Dim exclure, F As Worksheet
exclure = Array("DATA BASE PRODUITS", "Liste Acheteurs", "Pays")
For Each F In Worksheets
 Matched = Application.Match(F.Name, exclure, 0)
If IsError(Matched) Then
MsgBox F.Name & " <- feuille à supprimer!", vbCritical, "Test Suppression"
End If
Next
End...

Staple1600

XLDnaute Barbatruc
Re

@MONTREAL2020
Quand bug, on peut dégainer la boite à message ;)
Qu'est-ce qui s'affiche ?
Enrichi (BBcode):
Sub test_OK()
Dim strPath$, ws As Worksheet
strPath = ThisWorkbook.Path & "\"
For Each ws In ThisWorkbook.Worksheets
    If InStr(1, "DATA BASE PRODUITS Liste Acheteurs", ws.Name) = 0 Then
       NOM_FIC = ws.Name & "_Price_List_" & Format(Date, "ddmmyy") & ".xlsx"
MsgBox ws.Name
      ' ws.Copy
       'ActiveWorkbook.SaveAs strPath & NOM_FIC, 51
       'ActiveWorkbook.Close True
    End If
Next ws
End Sub
NB: Bien entendu, il existe dans le classeur des feuilles nommées (*) comme sur la ligne bleue des Vosges ;)
(*): incluant les espaces dont on se demande pourquoi ils naquirent ;)
 

MONTREAL2020

XLDnaute Junior
Sincèrement je ne saurais te le dire.
Mais j'avais remis les ligne de code et ça a fonctionné .

Par contre je vais l'essayer plus tard sur plusieurs acheteurs (onglets)
Aussi un petit bémol, il le fait pour toutes les feuilles du classeur.

'ActiveWorkbook.SaveAs strPath & NOM_FIC, 51
'ActiveWorkbook.Close True

1666788421978.png
 

MONTREAL2020

XLDnaute Junior
Oui c'est juste. Je voulais le faire avec d'autre feuille en plus.

mais maintenant je viens de comprendre que s'il y a des feuilles à exclure, il faut les introduire dans le code
comme "DATA BASE PRODUITS Liste Acheteurs",

Ya rien qui sépare le nom des feuilles ( point virgule ou virgule ) ?
 

Staple1600

XLDnaute Barbatruc
Re

@MONTREAL2020
Je te laisse étudier ce petit test
1) Sur un classeur vierge, avec une seule feuille
Lance la macro nommée cree_Exemple
Code:
Sub cree_Exemple()
Sheets(1).Name = "DATA BASE PRODUITS"
Sheets.Add(after:=Sheets(1)).Name = "Liste Acheteurs"
Sheets.Add(after:=Sheets(2)).Name = "Pays"
For i = 4 To 8
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "STAPLE_" & Format(i, "00")
Next
End Sub
Puis lance cette macro
Code:
Sub test_boucle()
Dim exclure, F As Worksheet
exclure = Array("DATA BASE PRODUITS", "Liste Acheteurs", "Pays")
For Each F In Worksheets
 Matched = Application.Match(F.Name, exclure, 0)
If IsError(Matched) Then
MsgBox F.Name & " <- feuille à supprimer!", vbCritical, "Test Suppression"
End If
Next
End Sub

A partir de là; il n'y a plus qu'a adapter mon précédent code en conséquence.
;)

Je te laisse mettre les mains dans le cambouis.

NB: Je reviendrais voir plus tard si tu as réussis ;)
 

MONTREAL2020

XLDnaute Junior
Bonjour,

SOLUTION BEN BIEN UTILE POUR UNE PROBLÉMATIQUE DE CRÉER À PARTIR D'UN CLASSEUR DE DÉPART CONTENANT PLUSIEURS FEUILLES.
1- Un classeur pour chaque feuille excepté les feuilles précisées dans le code que ne vous souhaitez pas extraire.
2- Les nommer
3- Enregistrer les classeurs dans le même dossier du classeur de base

Macro: JM Staple1600

Code:
Code:
Sub test_boucle()
Dim exclure, F As Worksheet
exclure = Array("DATA BASE PRODUITS", "Liste Acheteurs", "Pays")
For Each F In Worksheets
 Matched = Application.Match(F.Name, exclure, 0)
If IsError(Matched) Then
MsgBox F.Name & " <- feuille à supprimer!", vbCritical, "Test Suppression"
End If
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Euh ? WTF

Je parlais de ce que toi tu avais modifié

L'adaptation aurait dû être celle-ci, non ?
VB:
Sub export_Feuilles()
Dim exclure, F As Worksheet
exclure = Array("DATA BASE PRODUITS", "Liste Acheteurs", "Pays")
For Each F In Worksheets
 Matched = Application.Match(F.Name, exclure, 0)
If IsError(Matched) Then
 NOM_FIC = F.Name & "_Price_List_" & Format(Date, "ddmmyy") & ".xlsx"
       F.Copy
       ActiveWorkbook.SaveAs strPath & NOM_FIC, 51
       ActiveWorkbook.Close True
End IF
Next
End Sub

Mais apparemment tu n'as pas trop mouillé la chemise ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400