Sauvegarder fichier XLS en plusieurs fichiers CSV

sophievba

XLDnaute Junior
Bonsoir le forum,

J'espère que vous avez tous passé un bon noël :)

Je viens vous solliciter pour un souci dans la finalisation d'un bout de macro.

A savoir, j'utilise un code qui me permet de formater mes cellules telles que je le souhaite, ensuite je sauvegarde mon fichier au format CSV, or je voudrais savoir s'il existe un moyen de sauvegarder plusieurs fichiers CSV en fonction du nombre de lignes.

Je m'explique lol :

Mon fichier contient 1200 lignes, je souhaiterai que toutes les 200 lignes une macro me crée un fichier CSV

- 200 premières lignes = fichier1.csv
- de la 201 ligne à la 400 ligne = fichier2.csv
- etc...

Est ce que cela est réalisable ?

Si oui, pour faire plus compliqué, est-il possible (afin de conserver le même nom de fichier pour chaque sauvegarde) de créer :

Dans le répertoire c:\toto\ un répertoire Fichier1 puis sauvegarder dans ce repertoire le fichier titi.csv, ensuite créer un répertoire Fichier2 et mettre titi.csv, etc ...

Je ne sais pas si ma demande est claire mais je ne vois pas comment l'illustrer dans un fichier exemple.

La fin de la macro que j'utilise en ce moment et qui me sauvegarde un seul fichier est :

Code:
ActiveWorkbook.SaveAs Filename:= _
    "C:\toto\titi.csv", FileFormat:=xlCSV, _
        CreateBackup:=False

Par avance merci et bonne fin d'année à tous.

Sophie.

Edit : Ma deuxième requête n'est pas primordiale, donc si cela est trop tordu le premier point me serait beaucoup plus utile.
 
Dernière édition:

sophievba

XLDnaute Junior
Re : Sauvegarder fichier XLS en plusieurs fichiers CSV

Re le forum,

En faisant des recherches sur le Web, j'ai trouvé ce bout de code de "Fvandermeulen " qui peut correspondre à ce que je souhaite faire mais je ne parviens à l'adapter pour qu'il sauvegarde mes fichiers en CSV dans le répertoire de mon choix (la sauvegarde actuelle se fait automatiquement dans le répertoire "Mes Documents":

Code:
Sub CopieNewFiles()
'
MyBook = ActiveWorkbook.Name 
MySheet = ActiveSheet.Name 
 
i = 1 
Début = 1 
fin = 200 
NbCopie = Application.RoundUp((Application.Subtotal(3, Sheets(MySheet).Range("a:a")) / fin), 0)
 
For i = 1 To NbCopie
    Range(Cells(Début, 1), Cells(fin, 20)).Copy 
    Workbooks.Add 
    ActiveSheet.Paste 
    ActiveWorkbook.SaveAs Filename:="Pasted_" & i  
    Windows(MyBook).Activate     
    Début = fin + 1
    fin = fin + 200
 
Next i
 
End Sub

Avez-vous une idée de ce que je dois modifier, SVP ?

Merci et bonne soirée.

Sophie.
 

kiki29

XLDnaute Barbatruc
Re : Sauvegarder fichier XLS en plusieurs fichiers CSV

Salut,à adapter à ton contexte
Code:
Option Explicit

Private Declare Function SHCreateDirectoryEx Lib "Shell32.dll" Alias "SHCreateDirectoryExA" _
                                             (ByVal hwnd As Long, ByVal pszPath As String, ByVal lngsec As Long) As Long
' Pour valeur retournée dans Rep
' Voir http://msdn.microsoft.com/en-us/library/bb762131(VS.85).aspx
' et   http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx
Private Sub CreationDossier(sDossier As String)
Dim Rep As Long
    Rep = SHCreateDirectoryEx(0&, sDossier, 0&)
End Sub
 
Sub Test()
Dim sDossier As String
    sDossier = "D:\repA\repB\repC\repD\repE\repF"
    CreationDossier sDossier
    ActiveWorkbook.SaveAs Filename:=sDossier & "\" & "Pasted_" & ......
End Sub
 

sophievba

XLDnaute Junior
Re : Sauvegarder fichier XLS en plusieurs fichiers CSV

Bonjour Le forum, bonjour Kiki29,

Merci pour ta réponse.

Je ne comprends pas tout.

A quoi correspondent les ..... dans le code ci-dessous ?

Code:
ActiveWorkbook.SaveAs Filename:=sDossier & "\" & "Pasted_" & ......

Car j'ai une erreur sur cette ligne et je ne sais pas ce que je dois indiquer.

Autre question :

Je mets ton bout de code à la suite du mien ou dois-je rajouter un module ?

(désolée, je ne maitrise pas le VBA)

Merci et bonne journée.

Sophie.
 

sophievba

XLDnaute Junior
Re : Sauvegarder fichier XLS en plusieurs fichiers CSV

Bonjour Jean-Marcel,


Merci de t'être penché sur mon cas.

Je viens de tester ce code qui fonctionne, mais qui ne fait pas tout ce dont je souhaite, c'est à dire :

- Est-il possible d'indiquer dans la macro le chemin du répertoire dans lequel je souhaite sauvegarder mes fichiers sans passer par la boite de dialogue ?

- Je souhaite que la macro me sauvegarde les fichiers au format CSV, or ton code me crée bien des fichiers découper mais au format XLS

- Les fichiers sauvegardés restent ouverts, comment dire en fin de macro que je souhaite qu'ils soient fermés après la sauvegarde ?


J'ai tenté cela mais sans succès :

Code:
ActiveWorkbook.Saved = True
Application.DisplayAlerts = False
ActiveWindow.Close

Merci beaucoup.

Sophie
 

sophievba

XLDnaute Junior
Re : Sauvegarder fichier XLS en plusieurs fichiers CSV

Re,


En effet je souhaite indiquer un chemin permanent :

Exemple : Sauvegarder tous les fichiers CSV dans C:\Toto\

Toutes les 200 lignes je souhaite qu'il me sauvegarde un fichier au format CSV dans le répertoire TOTO en conservant mon format de colonne et en fermant tous les fichiers sauvegardés à la fin de l'execution de la macro.

Merci encore.

Sophie.
 

sophievba

XLDnaute Junior
Re : Sauvegarder fichier XLS en plusieurs fichiers CSV

Re,


C'est beaucoup mieux dans le sens ou la macro enregistre bien tous mes fichiers dans le répertoire de destinataion choisi, ceux-ci se ferment bien automatiquement à la fin de la macro, cependant les fichiers sauvegardés restent au format XLS et non pas CSV.

As-tu une idée de ce qu'il manque ?

Merci.

Sophie.
 

sophievba

XLDnaute Junior
Re : Sauvegarder fichier XLS en plusieurs fichiers CSV

Re,

Oups, je suis allée trop vite, j'ai pas regardé dans le bon répertoire, j'en ai deux du même nom sur deux disques différents.

C'est tout bon, j'ai bien mes fichiers au format CSV.

Tout fonctionne à merveille.

Milles mercis Jean-Marcel et le forum.

Passez un bon réveillon.

Sophie.
 

sophievba

XLDnaute Junior
Re : Sauvegarder fichier XLS en plusieurs fichiers CSV

Re bonjour le forum,

Une dernière petite question au sujet de ce code amélioré par Jean-Marcel.

Lorsque j'ai 1250 enregistrements dans un fichier et que j'execute la macro, tout se passe bien sauf pour le dernier fichier sauvegardé.

Si le dernier fichier contient 50 enregistrements, dans ce fichier CSV sauvegardé il va me rajouter 150 lignes supplémetaires dans mon CSV afin d'atteindre les 200 lignes.

Est-il possible de lui dire de prendre que les lignes ayant des datas et ignorés les lignes vides restantes ?

Par avance, merci.

Sophie.
 

sophievba

XLDnaute Junior
Re : Sauvegarder fichier XLS en plusieurs fichiers CSV

Re le forum,


J'ai réussi à trouver le moyen de sélectionner que les lignes ayant des données, cependant l'execution de mon code est beaucoup plus lent.

Pourriez-vous me dire comment faire que le code ne rame pas, SVP ?

Code:
[A:A] = [A:A].Value
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
              
DisplayAlerts = False
ActiveSheet.UsedRange.Select
Application.Range("A1", Range("A65352").End(xlUp).SpecialCells(xlCellTypeVisible)).Select
Debug.Print Application.Range("A1", Range("A1").End(xlDown)).SpecialCells(xlCellTypeVisible).Address

J'ai rajouté :

Code:
Application.Calculation = xlCalculationManual
              Application.EnableEvents = True

Mais ca ne change rien.

Par avance, merci.

Sophie.
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 232
Membres
103 161
dernier inscrit
Rogombe bryan