VBA : lire fichier texte sans convertir en nombre

Le
Eric S
Bonjour,

Dans une macro VBA, je veux lire un fichier texte qui contient sur
chaque ligne plusieurs colonnes séparées par des point-virgules et
contenant entre autre des nombres avec le point comme séparateur
décimal. Exemple :

LUKLA;27.6881160736084;86.7318649291992;LUKLA;2862;18;0;150;150;GENERAL

Je veux que les nombres restent sous forme de texte avec le point comme
séparateur décimal dans ma feuille excel.

Ce que je fais :

Do While Not EOF(1)
Input #1, Ligne
I = I + 1
' le nom
P = InStr(Ligne, ";")
Sheets("Feuil2").Cells(I + 2, 6) = Mid(Ligne, 1, P - 1)
Ligne = Mid(Ligne, P + 1)
' Latitude
P = InStr(Ligne, ";")
Sheets("Feuil2").Cells(I + 2, 2) = "'" + Mid(Ligne, 1,
P - 1)
Ligne = Mid(Ligne, P + 1)
[]


Ca fonctionne bien avec Excel 2000. Par contre, Excel XP avec la virgule
comme séparateur décimal dans les paramètres régionaux de WinXP, ça me
convertit la latitude en nombre à virgule. Comment éviter ça?

Eric
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
JB
Le #3649991
Bonjour,

Remplacer Input # 1,ligne par Line Input #1, ligne

Cordialement JB
Eric S
Le #3649621
Bonsoir,

C'est censé faire quoi Line Input?

J'ai essayé sous Excel 2000, ma macro fonctionne toujours, c'est déjà ça ;-)
Je verrai demain au boulot ce que ça donne sur Excel XP.


Merci

Eric
Clément Marcotte
Le #3649541
Bonjour

C'est censé faire quoi Line Input?


Lire une ligne complète du fichier texte et pas juste un élément à la fois.

"Eric S" 441da3c1$0$13234$
Bonsoir,


J'ai essayé sous Excel 2000, ma macro fonctionne toujours, c'est déjà ça
;-)
Je verrai demain au boulot ce que ça donne sur Excel XP.


Merci

Eric



Eric S
Le #3649531
C'est sensé faire quoi Line Input?



Lire une ligne complète du fichier texte et pas juste un élément à la fois.


Ben, c'est déjà ce que faisait ma macro avant. Alors, même si la
nouvelle méthode est plus propre et peut prévenir des effets de bord
dans le futur, je doûte que ça résolve mon problème initial.

Eric


Clément Marcotte
Le #3649441
Bonjour,

Essaie de SPLITter ta ligne.

Tu peux regarder cela:

http://groups.google.com/group/microsoft.public.fr.excel/msg/1007759e1d215822?q=readline+excel+97+split+group:microsoft.public.fr.excel+author:clement.marcotte%40sympatico.ca&hl=fr&lr=&scoring=d&rnum=1

(Version Excel 97 et +, sans split(), Excel 2000 + avec Split()
"Eric S" 441dae6e$0$13245$
C'est sensé faire quoi Line Input?



Lire une ligne complète du fichier texte et pas juste un élément à la
fois.


Ben, c'est déjà ce que faisait ma macro avant. Alors, même si la nouvelle
méthode est plus propre et peut prévenir des effets de bord dans le futur,
je doûte que ça résolve mon problème initial.

Eric





Clément Marcotte
Le #3649311
Bonjour,

C'est l'escogriffe d'Excel qui change le symbole décimal à l'affichage. J'ai
repris ma macro avec File System Object, mais tu pourrais sans doute juste
adapter la tienne.

Je mets le format de cellule à texte, avant de "coller" les données
SPLIttées, et le point est conservé. Si tu mets la ligne du Format en
commentaire, tu vas voir sortir les virgules dans Excel.

Mais là, je ne me suis pas cassé la tête, toutes les cellules utilisées sont
au format texte...

(Testé avec Excel 2002 - SP3 et Windows XP - SP2)

Sub ouvriffichiertexterecalcitrant()
Dim fso As Object, fichier As Object, laligne
Dim lefichier As Object, ligneseparee
Dim i As Long, j As Integer
Set fso = CreateObject("scripting.filesystemobject")
Set fichier = fso.GetFile("C:Documents and SettingsClément MarcotteMes
documentsfichier.csv")
Set lefichier = fichier.OpenAsTextStream(ForReading)
i = 1
Do While Not lefichier.AtEndOfStream
laligne = lefichier.ReadLine
ligneseparee = Split(laligne, ";")
For j = 0 To UBound(ligneseparee)
MsgBox ligneseparee(j)
Cells(i, j + 1).NumberFormat = "@"
Cells(i, j + 1).Value = ligneseparee(j)
Next
i = i + 1
Loop
End Sub
"Clément Marcotte" de news:
Bonjour,

Essaie de SPLITter ta ligne.

Tu peux regarder cela:

http://groups.google.com/group/microsoft.public.fr.excel/msg/1007759e1d215822?q=readline+excel+97+split+group:microsoft.public.fr.excel+author:clement.marcotte%40sympatico.ca&hl=fr&lr=&scoring=d&rnum=1

(Version Excel 97 et +, sans split(), Excel 2000 + avec Split()
"Eric S" 441dae6e$0$13245$
C'est sensé faire quoi Line Input?



Lire une ligne complète du fichier texte et pas juste un élément à la
fois.


Ben, c'est déjà ce que faisait ma macro avant. Alors, même si la nouvelle
méthode est plus propre et peut prévenir des effets de bord dans le
futur, je doûte que ça résolve mon problème initial.

Eric









Eric S
Le #3648441
Tout compte fait, l'astuce que j'utilisais au départ (mettre un
apostrophe) fonctionne :

Sheets("Feuil2").Cells(I + 2, 2) = "'" + Mid(Ligne, 1, P - 1)

Simplement, j'ai oublié de la mettre partout dans mon code. Mais j'ai
quand même tenu compte de vos remarques pour avoir un code plus fiable
et moins bidouille. D'une part, le NumberFormat :

Sheets("Feuil2").Cells(I + 2, 2).NumberFormat = "@"
Sheets("Feuil2").Cells(I + 2, 2) = Mid(Ligne, 1, P - 1)

D'autre part, Line Input.

Par contre, je n'ai pas retenu Split principalement car ce n'est pas
supporté sur Excel97 mais aussi parce que je fais des traitements
condionnels suivant le premier élément de chaque ligne. J'ai préféré
conserver mon code.

Encore merci pour l'aide.

Eric
Poster une réponse
Anonyme