Ouverture d'un fichier texte

Jacou

XLDnaute Impliqué
Bonjour au forum et bonne année (puisque nous sommes encore en Janvier).

J'ai un petit souci pour ouvrir un fichier "csv".
Dans ce fichier les données sont séparées par un point-virgule. Lorsque j'ouvre ce fichier directement dans Excel, j'obtiens une feuille où chaque donnée est isolée dans une cellule. En revanche lorsque j'ouvre ce même fichier par une instruction Visual basic, plusieurs données sont dans la même cellule.
Les trois méthodes ci-dessous me donne le même résultat :

Workbooks.OpenText Filename:= _
"G:\fic-essai.csv", _
DataType:=xlDelimited, semicolon:=True
ActiveWindow.Close

Workbooks.OpenText Filename:= _
"G:\fic-essai.csv", _
DataType:=xlDelimited, Other:=True, OtherChar:=";"
ActiveWindow.Close

Workbooks.Open Filename:= _
"G:\fic-essai.csv"
ActiveWindow.Close
je vous joins le fichier d'origine et les deux résultats obtenus (enregistrés au format xls).

J'attends vos réponses avec impatience. Merci d'avance pour votre aide.

Jacou
 

Pièces jointes

  • fic-essai.zip
    14.4 KB · Affichages: 18

Staple1600

XLDnaute Barbatruc
Re : Ouverture d'un fichier texte

Bonsoir


Avec cette macro, cela semble fonctionner

Code:
Sub macro_csv()
Dim w As Workbook
Set w = Workbooks.Open("C:\temp\fic-essai.csv")
    With w
    .Sheets(1).Copy
    With ActiveWorkbook
        With .Sheets(1)
         Application.DisplayAlerts = False
        .Range([A1], [A65536].End(xlUp)).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
             TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
             Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
             :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
             Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
             ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
             (20, 1), Array(21, 1), Array(22, 1), Array(23, 1))
         End With
         .SaveAs "C:\temp\test_fic-essai.xls", xlNormal
     .Close True
    End With
     .Close True
    End With
End Sub
 

Jacou

XLDnaute Impliqué
Re : Ouverture d'un fichier texte

Re bonsoir,
merci pour ta proposition JM. Mais cela, ne fonctionne qu'avec la première ligne qui ne contient que du texte. si bien que lors de l'ouverture, les 36 données sont contenues dans la cellule A1 séparées par des points-virgules.
en revanche pour les autres lignes on perd une partie des données. en effet les 23ème et 24ème données contiennent un nombre décimal avec une virgule qui semble être considérée comme le séparateur. Si bien que les 22 premières données + la partie entière de la 23ème sont dans la cellule A2, la partie décimale de la 23ème et la partie entière de la 24ème sont dans la cellule B2 et le reste dans la cellule C2.
ta solution efface donc tout ce qu'il y a après la virgule de la 23ème donnée.

j'ai fait un essai avec :
Sub macro_csv()
Dim w As Workbook
Set w = Workbooks.Open("C:\temp\fic-essai.csv", , , , , , , , , , , , , True, True)
End Sub

et là celà semble fonctionner.
Merci encore pour ton aide. celà m'a permis de comprendre ce qui se passait et de trouver la solution.

Très bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
312 466
Messages
2 088 678
Membres
103 918
dernier inscrit
comite des fets allonzier