problème macro import fichier text excel

problème macro import fichier text excel - VB/VBA/VBS - Programmation

Marsh Posté le 08-02-2011 à 11:27:48    

bonjour,
 
Voici mon problème :
 
j'ai réalisé la macro suivante pour ouvrir un fichier texte de plus de 65000 lignes:
 
Sub test3()
Dim numfichier As Integer
Dim strligne As String
numfichier = FreeFile()
filename = Application.GetOpenFilename("Fichier Texte(*.txt),*.txt" )
If filename = "" Then End
Open filename For Input As numfichier
i = 1 'ligne
j = 1 'colonne
While Not EOF(numfichier)
    Line Input #numfichier, strligne
     
       'séparer la ligne lu en deux par l'espace
       
       pos = InStr(strligne, " " )
       Cells(i, j).Value = Mid(strligne, 1, pos)
       Cells(i, j + 1).Value = Mid(strligne, pos)
       
       ' chagement de colonne à la ligne 60000
        If i = 60000 Then
            j = j + 2
            i = 1
        End If
    i = i + 1
Wend
Close numfichier
End Sub

 
elle fonctionne très bien pour l'ouverture, mais le problème viens quand je sépare mes lignes à l'aide de l'espace.
Exemple:
 
sur une ligne du fichier texte j'ai  0,0001 -0,5861 et dans le fichier Excel j'obtiens : 1er colonne 0,0001 et 2e colonne -0,5861.
 
Par contre, quand j'ai 0,0056 -1,56982, dans le fichier Excel j'obtiens 0,0056 et 156982 sans la virgule.
 
En gros, dès que je suis supérieur ou égale à 1, il ne tient plus compte de la virgule.
 
Donc je viens chercher un peu d'aide.
 
Merci
 
Nico

Reply

Marsh Posté le 08-02-2011 à 11:27:48   

Reply

Marsh Posté le 08-02-2011 à 13:10:37    

Nico  
 
Attention dans excel par défaut la virgule est un séparateur des centaines et des milliers  (Format US 100,000,000.99) la virgule est en fait le « . »
Si tu ne change pas le setting d’excel remplace dans ton fichier texte les « , » par des « . »
De plus les nombres que tu auras dans les cellules auront le format définit « format cell -> number  
 
Mcdx

Reply

Marsh Posté le 08-02-2011 à 14:04:12    

pourtant dans mon cas je suis bien en virgule pour le séparateur des décimales et non des milliers.
Sinon j'ai trouvé une petite astuce:
 
format(Mid(strligne, 1, pos),"###0.00000" )
 
et dans ce cas les nombres utilise le séparateur point pour les décimales et cela fonctionne
 

Reply

Marsh Posté le 08-02-2011 à 14:04:27    

Salut,un échantillon du fichier texte à traiter par exmple via http://cjoint.com/ serait utile

Reply

Marsh Posté le 08-02-2011 à 14:19:20    

voici le lien vers un échantillon de mon fichier texte à traiter :
http://cjoint.com/?1ciosx4t4Zd

Reply

Marsh Posté le 08-02-2011 à 14:47:41    

Salut,de façon je dirais bestiale
en affectant un bouton à LectureTxt, ShTst étant le CodeName de la feuille recevant les données
il y aura lieu peut-être lieu d'utiliser un IsNumeric  
 
Pour le CodeName voir son utilité sur http://www.ozgrid.com/VBA/excel-vba-sheet-names.htm
Pour améliorer (peut-être) les performances via ADO voir http://excel.developpez.com/faq/?page=ChapFichiersTxt


Option Explicit
 
Sub LectureTxt()
Dim Fichier As Variant
    ChDir ThisWorkbook.Path
    Fichier = Application.GetOpenFilename("Fichier TXT (*.txt), *.txt" )
    If Fichier <> False Then Lire Fichier
End Sub
 
Private Sub Lire(ByVal NomFichier As String)
Dim sChaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Const Separateur As String * 1 = " "
 
    ShTst.Cells.Clear
    Application.ScreenUpdating = False
 
    Close
    NumFichier = FreeFile
 
    iRow = 0
    Open NomFichier For Input As #NumFichier
    Do While Not EOF(NumFichier)
        iCol = 1: iRow = iRow + 1
        Line Input #NumFichier, sChaine
        Ar = Split(sChaine, Separateur)
        For i = LBound(Ar) To UBound(Ar)
            ShTst.Cells(iRow, iCol) = CDbl(Ar(i))
            iCol = iCol + 1
        Next i
    Loop
    Close #NumFichier
 
    Application.ScreenUpdating = True
End Sub


Message édité par kiki29 le 08-02-2011 à 15:03:26
Reply

Marsh Posté le 08-02-2011 à 15:15:34    

c'est un peu compliqué pour moi, je ne fais que débuter en VB, cependant je te remercie pour ton aide et je vais regarder cela de plus près, malgréer que mon astuce fonctionne.
 
Nico

Reply

Marsh Posté le 08-02-2011 à 15:32:00    

Re,le fichier zippé sur http://cjoint.com/?0cipFYKiROD

Reply

Marsh Posté le 11-02-2011 à 10:27:04    

merci ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed