![]() |
|
Forum
|
|
|
#1 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: janvier 2008
Messages: 15
|
Bonjour !
Voilou j'ai beaucoup de fichiers excel avec de nombreuses feuilles. Je souhaiterais mettre le contenu de ces fichiers sur une base de donnée MySQL. Pour cela, passer par le format CSV est parfait. Mon soucis est que faire enregistrer sous... pour chaque feuille sur chaque classeur c'est la galère... J'ai trouvé quelquechose du genre : Code:
Sub ConvertXLStoCSV()
Dim strXLSFile As String
Dim strCSVFile As String
'Change Input and Output folders to relevant location
Const strInputFolder As String = "C:\Temp\XLS\"
Const strOutputFolder As String = "C:\Temp\CSV\"
strXLSFile = Dir(strInputFolder & "*.xls")
Do While strXLSFile <> ""
strCSVFile = Left(strXLSFile, InStrRev(strXLSFile, ".")) & "csv"
Workbooks.Open strInputFolder & strXLSFile
ActiveWorkbook.SaveAs strOutputFolder & strCSVFile, xlCSV
ActiveWorkbook.Close False
strXLSFile = Dir
Loop
Merci beaucoup et excellent après-midi ! Fabs |
|
|
|
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
XLDnaute Accro
Date d'inscription: mai 2008
Messages: 1 855
|
bonjour douane,
j'ai pas eu le tps de vérifier, je repars au taf. en espérant que ça t'aidera : Code:
Sub ConvertXLStoCSV()
Dim curSheet As Worksheet, csvLine As String, csvSeparator As String, myFso, csvFile, i As Integer, j As Integer
Dim strXLSFile As String
Dim strCSVFile As String
csvSeparator = ";"
'Change Input and Output folders to relevant location
Const strInputFolder As String = "C:\Temp\XLS\"
Const strOutputFolder As String = "C:\Temp\CSV\"
Set myFso = CreateObject("Scripting.FileSystemObject")
strXLSFile = Dir(strInputFolder & "*.xls")
Do While strXLSFile <> ""
Workbooks.Open strInputFolder & strXLSFile
For Each curSheet In ActiveWorkbook.Sheets
With curSheet
strCSVFile = Left((strXLSFile & "_" & .Name), InStrRev(strXLSFile, ".")) & "csv"
Set csvFile = myFso.CreateTextFile(Filename:=strCSVFile, overwrite:=True)
For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
'initialiser la ligne CSV
csvLine = vbNullString
'boucler sur les 4 colonnes
For j = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column
'créer la ligne
csvLine = csvLine & IIf(csvLine = vbNullString, vbNullString, csvSeparator) & .Cells(i, j).Text
Next j
'écrire la ligne dans le fichier
csvFile.WriteLine csvLine
Next i
csvFile.Close
End With
Next curSheet
ActiveWorkbook.Close False
strXLSFile = Dir
Loop
End Sub
a+ |
|
|
|
|
|
#3 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: janvier 2008
Messages: 15
|
Salut,
Merci beaucoup pour ta réponse super rapide ! Par contre je ne sais pas si ça fonctionne, je me mange un grand "dépassement de capacité" entre les dents comme erreur de la macro... Trouver un vrai ordinateur est peut-être nécessaire hm... Edit : Je sèche sur cette histoire, faudrait-il changer le type des variables ? Dernière modification par Douane ; 15/04/2009 à 14h53. |
|
|
|
|
|
#5 (permalink) |
|
XLDnaute Accro
Date d'inscription: mai 2008
Messages: 1 855
|
Bonjour Douane
j'ai fait une petite modif, ce code marche chez moi : Code:
Sub ConvertXLStoCSV()
On Error GoTo erreur
Application.ScreenUpdating = False
Dim curSheet As Worksheet, csvLine As String, csvSeparator As String, myFso, csvFile, i As Integer, j As Integer
Dim strXLSFile As String, strInputFolder As String, strOutputFolder As String
Dim strCSVFile As String
csvSeparator = ";"
'Change Input and Output folders to relevant location
strInputFolder = ThisWorkbook.Path & "\"
strOutputFolder = ThisWorkbook.Path & "\"
Set myFso = CreateObject("Scripting.FileSystemObject")
strXLSFile = Dir(strInputFolder & "*.xls")
Do While strXLSFile <> ""
If Not strInputFolder & strXLSFile = ThisWorkbook.Path & "\" & ThisWorkbook.Name Then
Workbooks.Open strInputFolder & strXLSFile
For Each curSheet In ActiveWorkbook.Sheets
With curSheet
strCSVFile = Left((strXLSFile), InStrRev(strXLSFile, ".") - 1) & "_" & .Name & ".csv"
Set csvFile = myFso.CreateTextFile(Filename:=strCSVFile, overwrite:=True)
For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
'initialiser la ligne CSV
csvLine = vbNullString
'boucler sur les 4 colonnes
For j = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column
'créer la ligne
csvLine = csvLine & IIf(csvLine = vbNullString, vbNullString, csvSeparator) & .Cells(i, j).Text
Next j
'écrire la ligne dans le fichier
csvFile.WriteLine csvLine
Next i
csvFile.Close
End With
Next curSheet
ActiveWorkbook.Close False
End If
strXLSFile = Dir
Loop
erreur:
Application.ScreenUpdating = True
End Sub
nomClasseur_nomFeuille.csv a+ |
|
|
|
|
|
#6 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: janvier 2008
Messages: 15
|
Joint Technologies ltd Blog Archive Batch convert XLS to CSV
J'ai trouvé ceci qui marche niquel. Merci encore pour le coup de main ! |
|
|
|
|
|
#8 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: juin 2010
Messages: 35
|
Bonjour à tous,
J'ai testé la macro proposé dans le lien de Douane et j'ai une erreur à la ligne: logWks.Cells(oRow, "b").Value = .Name me disant que la méthode Name de l'objet Worksheet a échoué Quelqu'un sait réparer ça? |
|
|
|
| ANNONCES | |
![]() |
| Liens sociaux |
| Tags |
| convertir, csv, macro, mysql |
| Outils de la discussion | |
|
|
Discussions similaires
|
||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| Macro pour un TCD sur plusieurs feuilles | franck70 | Forum Excel | 7 | 24/09/2009 09h52 |
| Pb pour convertir plusieurs feuilles Excel ds un PDF | Jul95 | Forum Excel | 11 | 28/08/2009 17h00 |
| Macro excel pour convertir plusieurs pdf et y récupérer des données | Fatifleur | Forum Excel | 1 | 09/07/2008 16h20 |
| une macro pour plusieurs feuilles | archi | Forum Excel | 15 | 18/10/2006 19h34 |
| Macro pour plusieurs feuilles... | tinel | Forum Excel | 5 | 07/07/2005 20h37 |