Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA : lire fichier texte sans convertir en nombre

7 réponses
Avatar
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

7 réponses

Avatar
JB
Bonjour,

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

Cordialement JB
Avatar
Eric S
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
Avatar
Clément Marcotte
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" a écrit dans le message de news:
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



Avatar
Eric S
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


Avatar
Clément Marcotte
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" a écrit dans le message de news:
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





Avatar
Clément Marcotte
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" a écrit dans le message
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" a écrit dans le message de news:
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









Avatar
Eric S
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