XL 2013 fichier csv en xlsx

dad62

XLDnaute Occasionnel
bonjour le forum,
j'ouvre un fichier csv avec excel pour lui apporter des modifications par une macro se trouvant dans PERSONAL.XLSB,
et je voudrai une astuce pour qu'a la fin de cette macro mon fichier s'enregistre dans le dossier d'origine du fichier et au format xlsx.

d'avance merci pour votre aide.
 

Staple1600

XLDnaute Barbatruc
Re : fichier csv en xlsx

Bonjour à tous

dad62
On peut voir à quoi ressemble ta macro, stp ?

NB: Tu as fais des recherches dans les archives du forum ? (comme le conseille le point 1) de la charte du forum)
car la réponse à ta question s'y trouve déjà (ce sujet ayant été abordé de nombreuses fois)
 

dad62

XLDnaute Occasionnel
Re : fichier csv en xlsx

VB:
 Sub Macro3()
'
' Macro3 Macro
'
' Touche de raccourci du clavier: Ctrl+ù
'
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
        TrailingMinusNumbers:=True
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Piece"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Qté"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "Ep"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "Larg"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "Long"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "Materiel"
    Columns("A:F").Select
    Selection.Columns.AutoFit
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Columns("A:A").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Dossier = ThisWorkbook.Path
    NomDuFichier = InputBox("nom du fichier: (ne pas oublier le '.xls')")
Chemin = Dossier & NomDuFichier
ActiveWorkbook.SaveAs Filename:=Chemin, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
   
End Sub

j'avais trouvé ce bout de code sur le forum mais ceci ne me convient pas il enregitre le fichier dans le dossier de la macro et il faut a chaque fois retaper le nom du fichier .

Dossier = ThisWorkbook.Path
NomDuFichier = InputBox("nom du fichier: (ne pas oublier le '.xls')")
Chemin = Dossier & NomDuFichier
ActiveWorkbook.SaveAs Filename:=Chemin, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
 

Staple1600

XLDnaute Barbatruc
Re : fichier csv en xlsx

Re

EDITION: une version remaniée du premier code
(ici on choisit le répertoire où se trouve le fichier CSV et le fichier XLSX est enregistré dans le même dossier que le CSV)
(test OK sur mon PC)
Code:
Sub mCSVtoXLSXbis()
Dim nomFIC, wbkCSV As Workbook
nomFIC = Application.GetOpenFilename(FileFilter:="Fichier CSV (*.csv), *.csv", Title:="Choisissez votre fichier CSV")
If nomFIC = False Then Exit Sub
Workbooks.OpenText nomFIC, DataType:=xlDelimited, Semicolon:=True, Local:=True
Set wbkCSV = ActiveWorkbook
With wbkCSV
.SaveAs .Path & "\" & "test2CSVtoXLS.xlsx", 51
.Close False
End With
End Sub
Pour ouvrir un fichier CSV et l'enregistrer en XLSX, on peut faire plus court
Un exemple pour test ci-dessous (test OK sur mon PC)
Code:
Sub mCSVtoXLSX()
Dim Chemin, wbkCSV As Workbook
Chemin = ThisWorkbook.Path & "\"
Workbooks.OpenText Chemin & "testCSV.csv", DataType:=xlDelimited, Semicolon:=True, Local:=True
Set wbkCSV = ActiveWorkbook
With wbkCSV
.SaveAs Chemin & "testCSVtoXLS.xlsx", 51
.Close False
End With
End Sub

NB: Tes recherches dans les archives du forum n'ont pas été fructueuses ? tu n'as pas trouvé d'exemples ?
(voir le NB de mon premier message)
 
Dernière édition:

dad62

XLDnaute Occasionnel
Re : fichier csv en xlsx

Re

dad62
Je te propose de d'abord répondre à mes questions (voir les NB dans mes précédents message) avant que je te poste la macro corrigée ... ;)

je ne comprend pas bien ce que tu veut dire,j,ai toujours fait des recherches avant de poster,et si le réponse est déjà dans le forum ,je formule certainement mal ma recherche. désolé pour le dérangement.
 

Staple1600

XLDnaute Barbatruc
Re : fichier csv en xlsx

Re

Voici donc le version trois
Code:
Sub mCSVtoXLSXter()
Dim nomFIC, nomXLS$, wbkCSV As Workbook
nomFIC = Application.GetOpenFilename(FileFilter:="Fichier CSV (*.csv), *.csv", Title:="Choisissez votre fichier CSV")
If nomFIC = False Then Exit Sub
Workbooks.OpenText nomFIC, DataType:=xlDelimited, Semicolon:=True, Local:=True
Set wbkCSV = ActiveWorkbook
With wbkCSV
nomXLS = Split(.Name, ".")(0) & ".xlsx"
.SaveAs .Path & "\" & nomXLS, 51: .Close False
End With
End Sub

Faire des recherches, c'est bien, le signaler dans son premier message c'est mieux, non ;)
Comment veux-tu qu'on devine que tu as fait des recherches avant de poser ta question si tu ne nous le dis pas :rolleyes:
 

Staple1600

XLDnaute Barbatruc
Re : fichier csv en xlsx

Re

dad62
Comme j'ai du temps libre à occuper
J'ai remanier ta première macro (au niveau de la mise en forme des données)
Est-ce que cela donne les bons résultats sur ton PC?
Code:
Sub test()
Columns(1).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Comma:=True
Range("A1:F1") = Array("Piece", "Qté", "Ep", "Larg", "Long", "Materiel")
Columns("A:F").Columns.AutoFit
With Range("A1").CurrentRegion
.HorizontalAlignment = xlCenter: .VerticalAlignment = xlBottom
End With
Columns(1).HorizontalAlignment = xlLeft
Columns(1).VerticalAlignment = xlBottom
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : fichier csv en xlsx

Re

Le plus simple serait de joindre un fichier csv brut.

Normalement, si tes fichiers CSV ont comme séparateur le point virgule, à l'ouverture par macro d'un fichier
(voir cette ligne dans la macro)
Workbooks.OpenText nomFIC, DataType:=xlDelimited, Semicolon:=True, Local:=True
les données sont déjà éclatées dans les colonnes
(donc pas besoin de faire un Données/Convertir)
Columns(1).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Comma:=True
surtout que là le séparateur n'est pas un point virgule mais une virgule.

Donc au final, disposer du fichier CSV avant traitement permettrait d'y voir plus clair.
 

Staple1600

XLDnaute Barbatruc
Re : fichier csv en xlsx

Re

Testes cette dernière version
Code:
Sub mCSVtoXLSXQuatro()
Dim nomFIC, nomXLS$, wbkCSV As Workbook
nomFIC = Application.GetOpenFilename(FileFilter:="Fichier CSV (*.csv), *.csv", Title:="Choisissez votre fichier CSV")
If nomFIC = False Then Exit Sub
Application.ScreenUpdating = False
Workbooks.OpenText nomFIC, DataType:=xlDelimited, Comma:=True
Set wbkCSV = ActiveWorkbook
With wbkCSV
.Sheets(1).Range("A1:F1") = Array("Piece", "Qté", "Ep", "Larg", "Long", "Materiel")
nomXLS = Split(.Name, ".")(0) & ".xlsx"
.SaveAs .Path & "\" & nomXLS, 51: .Close False
End With
Application.ScreenUpdating = True
End Sub

NB: On aurait économisé du temps et des lignes de codes si tu avais joint ton fichier dés le premier message ;)
 

dad62

XLDnaute Occasionnel
Re : fichier csv en xlsx

excellent,après plusieurs essais la macro fonctionne ,j'aijuste rajouté une ligne pour ajuster automatiquement les colonnes.
NB: On aurait économisé du temps et des lignes de codes si tu avais joint ton fichier dés le premier message ;)[/QUOTE]

dans ton message précédant tu disais que tu avais du temps ,cela t'aura occupé un peu cette après-midi ;).merci encore pour ton aide.
 

Discussions similaires

Statistiques des forums

Discussions
312 273
Messages
2 086 699
Membres
103 372
dernier inscrit
BibiCh