Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

 

Staple1600

XLDnaute Barbatruc
Re

@MONTREAL2020
Il me semble que dans le fichier exemple, il n'y avait pas de feuille Pays, non ?

La macro est basée sur le fichier exemple.

Si tu changes les règles du jeu, c'est toi qui créé le bémol
Pas ma macrO


Liste le nom de toutes les feuilles qu'il faut exclure.
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…