Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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+
 

jhofman

XLDnaute Occasionnel
Re : CSV & XLS : ouverture et conversion

Romain


mon problème est la gestion des dates principalement les dates ambigües anglais/francaise comme 01/12/2010 <-> 12/01/2010 !!
et ton module ne permet pas de lever le probleme
 

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

jhofman

XLDnaute Occasionnel
Re : CSV & XLS : ouverture et conversion

Bonjour


Merci à tous pour votre aide



Romain ta macro donne des résultats suivants
21/09/2009 >> 09-septembre-10
22/09/2009 >> 09-octobre-10

pas facile !!

je recherche toujours...
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…