Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2825 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  problème macro import fichier text excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème macro import fichier text excel

n°2055035
bloodnico
Posté le 08-02-2011 à 11:27:48  profilanswer
 

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

mood
Publicité
Posté le 08-02-2011 à 11:27:48  profilanswer
 

n°2055063
mcdx
Posté le 08-02-2011 à 13:10:37  profilanswer
 

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

n°2055077
bloodnico
Posté le 08-02-2011 à 14:04:12  profilanswer
 

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
 

n°2055078
kiki29
Posté le 08-02-2011 à 14:04:27  profilanswer
 

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

n°2055083
bloodnico
Posté le 08-02-2011 à 14:19:20  profilanswer
 

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

n°2055094
kiki29
Posté le 08-02-2011 à 14:47:41  profilanswer
 

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
n°2055108
bloodnico
Posté le 08-02-2011 à 15:15:34  profilanswer
 

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

n°2055119
kiki29
Posté le 08-02-2011 à 15:32:00  profilanswer
 

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

n°2056004
bloodnico
Posté le 11-02-2011 à 10:27:04  profilanswer
 

merci ^^


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  problème macro import fichier text excel

 

Sujets relatifs
SOS : résolution problème d'algorithmeProblème C++ : Syntax error : missing ';'
[ A SUPPRIMER : Solution trouvée]probleme en assembleur
Encore un problème avec les Socket avec Ada[VBA WORD] Macro pour faire apparaitre l'assistant
[ACCESS] Problème jointure entre requêtesSPIP: afficher le fichier css selectionné
problème operateur =[Java/JEE] [Résolu] Comportement Calendar selon Locale
Plus de sujets relatifs à : problème macro import fichier text excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR