exporter les onglets d'un excel en autant de fichier plat

nayd_garlenn

XLDnaute Nouveau
Bonjour à tous

Je cherche à transformer des fichiers excel contenant plusieurs onglets en autant de fichiers plats pour pouvoir ensuite les traiter.

J'ai déjà un début de macro mais je ne peux la lancer que du fichier a traiter et donc je ne trouve pas comment automatiser la méthode.
- les fichiers sont toujours dans le même répertoire
- ils ont toujours 2 ou 3 onglets

Ce que j'essai de faire c'est par exemple de fournir une liste des fichiers à traiter (dans un fichier ne contenant que ça) , de lancer une macro qui irai chercher les fichiers en questions et qui les séparerait en autant de fichiers csv

par exemple, je fournie une liste des fichiers à traiter :
- fichier1.xlsx
- fichier2.xlsx
- (...)

je lance la macro et cela exporterai
- fichier1_onglet1.csv
- fichier1_onglet2.csv
- fichier2_onglet1.csv
- fichier2_onglet2.csv
- (...)

le début de macro que j'ai c'est :
------
Sub saveOnglet()
Dim ws
Dim newWk As Workbook

For Each ws In Worksheets
Set newWk = Workbooks.Add(xlWBATWorksheet)
ws.Copy newWk.Sheets(1)
newWk.SaveAs (ws.Name & ".xls")
newWk.Close
Set newWk = Nothing
Next ws

End Sub
--------

si vous avez des idées je suis ouvert à toutes les pistes :)
merci et bonne journée à tous
 

flyonets44

XLDnaute Occasionnel
Re : exporter les onglets d'un excel en autant de fichier plat

Bonjour
Tu crées un fichier maitre qui va servir à traiter tous tes fichiers et qui va stocker ta macro de traitement
dans un feuille et dans une colonne tu listes tous tes fichiers à ouvrir avec leur adresse précise de
préférence tous stockés dans un même dossier
ta macro va ouvrir chaque fichier, éxécuter le code que tu as écris, fermer le fichier et passer au suivant
voici un code que j'ai adapté il y a quelques temps

Sub GetAllWorksheetNames() ' 22.03.07
'Lister tous les dossiers d'un dossier, creer un lien hypertexte
'pour chaque fichier et lister les feuilles
'Les fichiers ne doivent pas être protégés en ouverture

Dim i As Integer, L As Integer
Dim Ih&, Iw&, Brow&, Trow&, Pfolder
Dim WbResults As Workbook
Dim WbCodeBook As Workbook
Dim WbCodeBookws As Worksheet
Dim WSheet As Worksheet
Dim MyFolderPath As String
Dim MySubFolderPath As String

On Error GoTo errorHandler
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False

Set WbCodeBook = ThisWorkbook
Set WbCodeBookws = ActiveSheet
'Raz du traitement précédent
'WbCodeBookws.Cells.ClearContents
ActiveWindow.FreezePanes = False

Range("A1") = "Nom Feuille": Range("B1") = "Numéro"
Range("C1") = "Nom Fichier": Range("D1") = "Chemin"
Range("A1:D1").Font.Bold = True
Range("A1:D1").Interior.ColorIndex = 33

Pfolder = Application.GetOpenFilename
If Pfolder <> Empty Then
Pfolder = Left(Pfolder, InStrRev(Pfolder, "\") - 1)
Else
MsgBox "Procedure abandonnée. Aucun fichier n'est sélectionné."
Exit Sub
End If


With Application.FileSearch
.NewSearch
.LookIn = Pfolder
.SearchSubFolders = True
.FileType = msoFileTypeExcelWorkbooks
If .Execute > 0 Then


For i = 1 To .FoundFiles.Count
L = InStrRev(.FoundFiles(i), "\")
MySubFolderPath = Left(.FoundFiles(i), L - 1)


If .FoundFiles(i) = ThisWorkbook.Path & "\" & ThisWorkbook.Name _
Or Mid(.FoundFiles(i), L + 1) = ThisWorkbook.Name Then
Set WbResults = ThisWorkbook
Else
Set WbResults = Workbooks.Open(.FoundFiles(i))
End If


'Recensement des noms de feuilles en colonne 1
Iw = 0
For Each WSheet In WbResults.Worksheets
If Iw = 0 Then Trow = WbCodeBookws. _
Cells(Rows.Count, 1).End(xlUp)(2, 1).Row
WbCodeBookws.Cells(Rows.Count, 1).End(xlUp)(2, 1) _
= WSheet.Name
Iw = Iw + 1
'numero de feuille en colonne 2
WbCodeBookws.Cells(Rows.Count, 1).End(xlUp)(1, 2) = Iw
Next 'wSheet
Brow = Trow + Iw - 1

'Copie du nom de fichier en colonne 3
WbCodeBookws.Range(WbCodeBookws.Cells(Trow, 3), WbCodeBookws.Cells(Brow, 3)) = Mid(.FoundFiles(i), L + 1)

'Installation du nom complet comme lien hypertexte en colonne 4
For Ih = Trow To Brow
ActiveSheet.Hyperlinks.Add _
Anchor:=WbCodeBookws.Cells(Ih, 4), _
Address:=.FoundFiles(i)
Next Ih


If WbResults.FullName <> ThisWorkbook.FullName Then _
WbResults.Close SaveChanges:=False
Next i
End If
End With


'Tri liste par répertoire, nomfichier, et numero de feuille
Range("A1").CurrentRegion.Sort Key1:=Range("D2"), _
Order1:=xlAscending, Key2:=Range("C2"), _
Order2:=xlAscending, Key3:=Range("B2"), _
Order3:=xlAscending, Header:=xlYes


'Formatage des sorties
WbCodeBookws.Activate
WbCodeBookws.Cells(2, 1).Select
ActiveWindow.FreezePanes = True
WbCodeBookws.Columns("A:D").AutoFit
Selection.AutoFilter


WrapSub:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
Exit Sub
Set WbResults = Nothing
Set WbCodeBook = Nothing
Set WbCodeBookws = Nothing

errorHandler:
MsgBox "Erreur de traitement... action abandonnée."
Resume WrapSub

End Sub
Bon courage
Flyonets
 

nayd_garlenn

XLDnaute Nouveau
Re : exporter les onglets d'un excel en autant de fichier plat

Merci Flyonets pour ta réponse rapide.
c'est une bonne piste en effet

Par contre je suis carrément novice : je comprends le principe mais je débug très mal en l’occurrence je ne réussi pas à faire tourner ta macro :-( même si je crois comprendre ce qu'elle fait.

Et surtout, mon problème est moins de faire une liste (que je peux avoir autrement) que d'alimenter la macro avec
- d'un coté les fichiers de 3 onglets à découper (fichier1.xls (...) fichier10.xls)
- de l’autre un fichier avec la liste des fichier à traiter (ex : en colonne A : fichier1.xls fichier3.xls ..)

J'aimerai lancer la macro depuis le fichier liste et que, en effet cela ouvre et cela traite les fichiers listés.

On a la théorie mais je ne sais pas écrire le code qui ferai ça.
Je n’ai que le code qui sauvegarde les onglets séparément mais je dois le lancer depuis le fichier à traiter :confused:
C’est l’automatisation de cette routine que je ne sais pas faire

Merci
 

flyonets44

XLDnaute Occasionnel
Re : exporter les onglets d'un excel en autant de fichier plat

Bonjour
Il faut d'abord que tu crées ton fichier liste en configurant la feuille de départ
faire simple, c'est à dire indiquer par colonne le nom du dossier , le nom des fichiers, etc
pour le reste on va voir après
A+
Cordialement
Flyonets
 

nayd_garlenn

XLDnaute Nouveau
Re : exporter les onglets d'un excel en autant de fichier plat

Bonjour Flyonets

Je viens de terminer un exemple de liste de fichier à traiter.
j'ai donc maintenant
- un fichier avec une liste
- une macro qui me crée des CSV à partir de mes excels sources

et je cherche à
- adapter ma macro pour que les csv de sortie aient pour nom : "fichier initial"_"nom de l'onglet"
- trouver un moyen de lancer d'un coup la macro "de découpage" sur tous les fichiers de la liste

sais tu comment faire ça ?

en PJ un exemple de liste de fichier à traiter au format suivant :

Nom des fichiers / extension / nom copmplet / Dossier /URL complete
Report_2011-06-28_1108273567$ .xlsx Report_2011-06-28_1108273567$.xlsx G:\donnees\projet_stats\ G:\donnees\projet_stats\Report_2011-06-28_1108273567$.xlsx

Merci de ton aide

nayd
 

Pièces jointes

  • listes_des_fichiers.xlsx
    10.8 KB · Affichages: 122

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16