Conversion de fichier CSV en XLS

Asnor

XLDnaute Nouveau
Bonjour,

J'ai plusieurs fichiers CSV que je souhaite convertir en xls. Si je le fais "à la main" c'est à dire j'ouvre le fichier, je fais enregistrer sous je choisis xls pas de problème. J'ai bien à la fin dans mon fichier xls une information par cellule.
Si je le fais au moyen d'une macro soit en rédigeant une moi même soit en utilisant l'enregistreur de macro j'obtiens un résultat différent en règle générale dans la première colonne de chaque ligne du fichier xls j'obtiens valcolonne1 ; valeur colonne2 ; etc.

Parce qu'en me relisant je me trouve pas du tout clair, je mets en pièce jointe un exemple avec le fichier original, sa variante enregistrée à la main, sa variante enregistrée au moyen de la macro.
Bien sûr je voudrais arriver à obtenir le résultat "à la main" avec ma macro parce que j'ai beaucoup, beaucoup de fichiers.

Ci après le code que j'utilise, qui est une adaptation d'un code proposé sur ce forum


Code:
Sub convertisseur()

Dim maitre As String  ' déclaration de la variable de type chaîne
Dim lefichier As String

Dim b As Long
Dim t As Integer
Dim recherche As String
Dim nvfi As String


Application.ScreenUpdating = False      ' désactive l'affichage
maitre = ActiveWorkbook.Name    ' le nom du classeur actif est affecté à maître
lefichier = Dir("C:\Traitement\*.csv")



While lefichier <> ""
    
    Workbooks.Open "C:\Traitement\" & lefichier   ' ouverture du fichier
    ChDir "C:\Traitement"
    ActiveWorkbook.SaveAs Filename:="C:\Traitement\" + Mid(ActiveWorkbook.Name, 1, Len(ActiveWorkbook.Name) - 4) & ".xls", FileFormat:=xlExcel5, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
    nvfi = ActiveWorkbook.Name
    Workbooks(nvfi).Close  ' fermeture du fichier
    
    lefichier = Dir()   ' pour affecter le nom de fichier suivant
    Workbooks(maitre).Activate
    
Wend

Application.ScreenUpdating = True   ' active l'affichage

End Sub

En remerciant par avance les âmes charitables qui voudront bien se pencher sur mon cas.

Cordialement Asnor

PS : j'ai essayé de faire une recherche sur le forum mais CSV est trop court comme critère de recherche. Toutes mes excuses donc si je viens poser une question moulte fois résolue.
 

Pièces jointes

  • Traitement.zip
    40.3 KB · Affichages: 274
  • Traitement.zip
    40.3 KB · Affichages: 272
  • Traitement.zip
    40.3 KB · Affichages: 275

kiki29

XLDnaute Barbatruc
Re : Conversion de fichier CSV en XLS

En adaptant à ton contexte
Code:
Option Explicit

Sub Tst()
Dim Fichier As Variant
    ChDir ThisWorkbook.Path
    Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
    If Fichier <> False Then Lire Fichier
End Sub

Private Sub Lire(ByVal NomFichier As String)
Dim chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur As String * 1
Dim Debut As Long, Fin As Long

    Separateur = ";"
    Cells.Clear
    Application.ScreenUpdating = False

    Close
    NumFichier = FreeFile

    iRow = 0
    Open NomFichier For Input As #NumFichier
        Do While Not EOF(NumFichier)
            iCol = 1: iRow = iRow + 1
            Line Input #NumFichier, chaine
            Ar = Split(chaine, Separateur)
            For i = LBound(Ar) To UBound(Ar)
                Cells(iRow, iCol) = Ar(i)
                iCol = iCol + 1
            Next i
        Loop
    Close #NumFichier

    Application.ScreenUpdating = True
End Sub
 

Asnor

XLDnaute Nouveau
Re : Conversion de fichier CSV en XLS

merci merci la solution proposée par Kiki marche bien, enfin il me reste à l'adapter à ma situation pour convertir des fichiers à la volée. Enfin il me reste surtout à comprendre pourquoi sa solution marche et pas la mienne :) puis comprendre son code :D
 

Asnor

XLDnaute Nouveau
Re : Conversion de fichier CSV en XLS

Coucou le forum,

Bon j'ai intégré le code de KiKi au mien et j'ai un petit problème, tous les cellules contenant du texte sont entourées de guillemet ( ""). Y compris les cellules vides .
Voyez vous une solution à ce problème pour qu'au moment de a conversion il n'y ait pas ce problème.

EDIT : en fait il semble que tout soit importé en texte les nombres également mais sans les guillemets pour ces derniers.

"Mon" ( y en a tellement peu de moi) code donne ceci :

Code:
Sub convertisseur()

Dim maitre As String  ' déclaration de la variable de type chaîne
Dim lefichier As String

Dim b As Long
Dim t As Integer
Dim recherche As String
Dim nvfi As String


Application.ScreenUpdating = False      ' désactive l'affichage
maitre = ActiveWorkbook.Name    ' le nom du classeur actif est affecté à maître
lefichier = Dir("C:\Traitement\*.csv")



While lefichier <> ""
    
    Workbooks.Open "C:\Traitement\" & lefichier   ' ouverture du fichier
    ChDir "C:\Traitement"
    Lire lefichier
    ActiveWorkbook.SaveAs Filename:="C:\Traitement\" + Mid(ActiveWorkbook.Name, 1, Len(ActiveWorkbook.Name) - 4) & ".xls", FileFormat:=xlExcel5, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
    nvfi = ActiveWorkbook.Name
    Workbooks(nvfi).Close ' fermeture du fichier
    
    lefichier = Dir()   ' pour affecter le nom de fichier suivant
    Workbooks(maitre).Activate
    
Wend

Application.ScreenUpdating = True   ' active l'affichage

End Sub
Private Sub Lire(ByVal NomFichier As String)
Dim chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur As String * 1
Dim Debut As Long, Fin As Long

    Separateur = ";"
    Cells.Clear
    Application.ScreenUpdating = False

    Close
    NumFichier = FreeFile

    iRow = 0
    Open NomFichier For Input As #NumFichier
        Do While Not EOF(NumFichier)
            iCol = 1: iRow = iRow + 1
            Line Input #NumFichier, chaine
            Ar = Split(chaine, Separateur)
            For i = LBound(Ar) To UBound(Ar)
                Cells(iRow, iCol) = Ar(i)
                iCol = iCol + 1
            Next i
        Loop
    Close #NumFichier

    Application.ScreenUpdating = True
End Sub

par avance merci
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise