CSV & XLS : ouverture et conversion

jhofman

XLDnaute Occasionnel
Bonjour à tous

Je n'aarive pas à comprendre la logique de EXCEL lors de l'ouverture de fichier CSV (en direct ou via VBA). Parfois les données sont automatiquement "converties" et réparties dans els différentes colonnes, parfois non. comment être certain que excel réagiera dans un sens ou un autre

merci de vos réponses je suis assez dérouté...
Jhofman:)
 

mromain

XLDnaute Barbatruc
Re : CSV & XLS : ouverture et conversion

bonjour jhofman,

perso, je me suis créé une macro pour éviter ce problème. la voici
Code:
Sub ImportCsv(destSheet As Worksheet, csvFilePath As String, Optional delimiter As String = ";")
Dim myFso As FileSystemObject, csvFile As TextStream, i As Integer, j As Integer, tabStr() As String
Set myFso = CreateObject("Scripting.FileSystemObject")
Set csvFile = myFso.OpenTextFile(csvFilePath)
While Not csvFile.AtEndOfStream
    i = i + 1
    tabStr = Split(csvFile.ReadLine, delimiter)
    For j = LBound(tabStr) To UBound(tabStr)
        destSheet.Range("A" & i).Offset(0, j) = tabStr(j)
    Next j
Wend
End Sub
et voici comment l'utiliser
Code:
Sub test()
Dim feuilleDestination As Worksheet, fichierCsv As String
Set feuilleDestination = ThisWorkbook.Sheets("Feuil1")
fichierCsv = "E:\XLS\test\document.csv"

ImportCsv feuilleDestination, fichierCsv
End Sub
de plus, cette macro permet aussi de préciser le "délimiteur" (";" par défaut).
par exemple, si les données du fichier csv (ou texte) sont séparée par "-*-"
Code:
ImportCsv feuilleDestination, fichierCsv, "[B][COLOR=Red]-*-[/COLOR][/B]"
a+
 

mromain

XLDnaute Barbatruc
Re : CSV & XLS : ouverture et conversion

Bonjour jhofman, JM, kiki,

Voici la macro modifiée :
Si l'élément à importer ressemble à une date - de la forme xx/yy/zzzz, la macro essaye de le transformer en date
xx > le mois
yy > le jour
zzzz > l'année
Code:
[COLOR=BLUE]Sub[/COLOR] ImportCsv(destSheet [COLOR=BLUE]As[/COLOR] Worksheet, csvFilePath [COLOR=BLUE]As String[/COLOR], [COLOR=BLUE]Optional[/COLOR] delimiter [COLOR=BLUE]As String[/COLOR] = ";")
[COLOR=BLUE]Dim[/COLOR] myFso [COLOR=BLUE]As Object[/COLOR], csvFile [COLOR=BLUE]As Object[/COLOR], ligne [COLOR=BLUE]As Integer[/COLOR], colonne [COLOR=BLUE]As Integer[/COLOR], tabStr() [COLOR=BLUE]As String[/COLOR]
[COLOR=BLUE]Set[/COLOR] myFso = CreateObject("Scripting.FileSystemObject")
[COLOR=BLUE]Set[/COLOR] csvFile = myFso.OpenTextFile(csvFilePath)
[COLOR=BLUE]While Not[/COLOR] csvFile.AtEndOfStream
    ligne = ligne + 1
    tabStr = Split(csvFile.ReadLine, delimiter)
    [COLOR=BLUE]For[/COLOR] colonne = [COLOR=BLUE]LBound[/COLOR](tabStr) [COLOR=BLUE]To UBound[/COLOR](tabStr)
        [COLOR=GREEN]'si l'élément ressemble à une date, la "reformater"[/COLOR]
        [COLOR=BLUE]If[/COLOR] tabStr(colonne) [COLOR=BLUE]Like[/COLOR] "??/??/????" [COLOR=BLUE]Then[/COLOR]
            destSheet.Range("A" & ligne).Offset(0, colonne) = DateSerial(Right(tabStr(colonne), 4), Left(tabStr(colonne), 2), Mid(tabStr(colonne), 4, 2))
        
        [COLOR=GREEN]'sinon, copier l'élément tel quel[/COLOR]
        [COLOR=BLUE]Else[/COLOR]
            destSheet.Range("A" & ligne).Offset(0, colonne) = tabStr(colonne)
        [COLOR=BLUE]End If[/COLOR]
    [COLOR=BLUE]Next[/COLOR] colonne
[COLOR=BLUE]Wend[/COLOR]
[COLOR=BLUE]End Sub[/COLOR]

a+
 

tototiti2008

XLDnaute Barbatruc

Discussions similaires

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 822
dernier inscrit
holale