Importation fichier

Bonjour à tous

J'ai trouvé la macro suivante , mais elle fait un saut de ligne dés qu'elle voit un chiffre avec une virgule??

14,2 j'ai 14 en A1 et 2 en A2, comprend pas .. si quelqu'un a un idée

Sub LireFichierTxt()
Dim Ligne As String, NoLigne As Long, NoCol As Integer
Dim Tableau, Chemin, NomFich
   ' Cells.Select
   ' Selection.ClearContents
Chemin = "C:\"
NomFich = "x.txt" 'ou .txt
    i = 0
    Open Chemin & NomFich For Input As #1
    While Not EOF(1)
        Input #1, Ligne

        Tableau = Split(Ligne, "+") ' si le séparateur est un ";", sinon tu changes
        NoLigne = NoLigne + 1
        For NoCol = 0 To UBound(Tableau)
            If (NoCol = 0 Or NoCol = 2) Then '(Importation colonnes A, C au format "texte")
            Cells(NoLigne, NoCol + 1).NumberFormat = "@"
            'les date à importer sont au format francais jj/mm/aaa dans le fichier txt, DONC
            'en théorie nous devrions mettre pour la colonne A : NumberFormat="dd/mm/yyyy"
            'mais, il ne faut surtout pas etre coherent !!!, mais plutot indiquer le format mm/dd/yyyy, pour que certaines dates ne soient pas inversées
            End If
             Cells(NoLigne, NoCol + 1).Value = Tableau(NoCol)
        Next
    Wend
    Close #1
End Sub

Merci de votre aide

Bonjour,

Ne serait-il pas plus simple d'ouvrir le fichier texte dans un classeur par la méthode OpenText ?

Cordialement.

Merci MFerrand pour t'a réponse,j'ai essayer le code suivant

Workbooks.OpenText Filename:="C:\xls\Classeur1.xls", StartRow:=1, _
    DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter _
        :=False, Semicolon:=True, DecimalSeparator:="."

mon problème vient de l'importation des dates , avec le code ci-dessus les dates sont inversées entre le mois et le jours

a la base j'utilise le code suivant pour importer mes fichiers txt mais celui ci inverse aussi les dates

Function Lire(ByVal NomFichier As String)

Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur  As String * 1

    '  Séparateur Tabulation
    Separateur = "+"

    'Cells.Clear
    NumFichier = FreeFile
    iRow = 1

    Open NomFichier For Input As #NumFichier
        Do While Not EOF(NumFichier)
            iCol = 1
            Line Input #NumFichier, Chaine
            Ar = Split(Chaine, Separateur)
            For i = LBound(Ar) To UBound(Ar)
                Sheets("Import").Cells(iRow, iCol) = Ar(i)

                iCol = iCol + 1
            Next
            iRow = iRow + 1
        Loop
    Close #NumFichier
End Function

toujours ces problèmes de dates entre format français et anglais

Greg

bonjour

sans voir ton fichier txt ses dur de te répondre

A+

Maurice

Le paramètre FieldInfo permet de définir comment analyser des formats de dates... A essayer !

re,

Voici un fichier texte en exemple, quand je l'importe avec ma fonction "lire" il inverse les dates, quand je l'importe avec la macro "LireFichierTxt" il ne m'inverse pas les dates mais prend les ","comme saut de ligne et avec OpenText il inverse aussi les dates!!

Merci encore pour t'on aide

Greg

10exemple.txt (440.00 Octets)

Sur ce fichier :

Sub OuvrirTxt()
    Workbooks.OpenText "E:\Documents\___exemple.txt", xlWindows, , xlDelimited, _
     xlTextQualifierNone, other:=True, otherchar:="+", fieldinfo:=Array(Array(1, 4)), _
     DecimalSeparator:=","
End Sub

Nom du fichier et chemin à remplacer...

Bonjour

voila une macro pour ton modèle de fichier TXT

tu lance ChoixFicTxt

A+

Maurice

Private Sub ChoixFicTxt()
Dim dossier As FileDialog
ChoixChemin = ActiveWorkbook.Path & Application.PathSeparator
   Set dossier = Application.FileDialog(msoFileDialogFilePicker)
      With dossier
         .AllowMultiSelect = False
         .InitialFileName = ChoixChemin
         .Title = "Choix d'un fichier TXT"
         .Filters.Clear
         .Filters.Add "Fichier Csv ", "*.txt*", 1
            If .Show = -1 Then
               Chemin = .SelectedItems(1)
               LireMan Chemin
            End If
      End With
   Set dossier = Nothing
End Sub

Sub LireMan(NomFichier)
Dim Ar() As String
   With Application
      .ScreenUpdating = False
      .EnableEvents = False
      .Calculation = xlManual
   End With
Rows("1:" & Rows.Count).Clear
Sep = "+"
Lig = 1
' -----------------------------------------
On Error Resume Next
   Open NomFichier For Input As #1
        Do While Not EOF(1)
            Line Input #1, Chaine
               Ar = Split(Chaine, Sep)
               Col = 1
                  For X = LBound(Ar) To UBound(Ar)
                     Select Case Col
                        Case 1
                           If IsDate(Ar(X)) Then
                              Cells(Lig, Col).Value = CDate(Ar(X))
                            Else
                               Cells(Lig, Col).Value = Ar(X)
                            End If
                        Case Else
                           Tmp = Application.Trim(Ar(X))
                              If IsNumeric(Tmp) Then
                                 Cells(Lig, Col).Value = CDbl(Tmp)
                                Else
                                 Cells(Lig, Col).Value = Tmp
                              End If
                     End Select
                     Col = Col + 1
                  Next
            Lig = Lig + 1
        Loop
    Close #1
' -----------------------------------------
   With Application
      .ScreenUpdating = True
      .Calculation = xlCalculationAutomatic
      .EnableEvents = True
      .CutCopyMode = False
      .Goto [A1], True
   End With
End Sub

Bonjour,

Merci à vous deux.

MAurice t'on code fonctionne parfaitement bien !! j'ai plus qu'a le décortiquer pour le comprendre.

Merci encore

bonne journée

Greg

Bonjour

petite modife car tu a des espace qui se balade

A+

Maurice

Sub LireMan(NomFichier)
Dim Ar() As String
   With Application
      .ScreenUpdating = False
      .EnableEvents = False
      .Calculation = xlManual
   End With
Rows("1:" & Rows.Count).Clear
Sep = "+"
Lig = 1
' -----------------------------------------
On Error Resume Next
   Open NomFichier For Input As #1
        Do While Not EOF(1)
            Line Input #1, Chaine
               Ar = Split(Chaine, Sep)
               Col = 1
                  For X = LBound(Ar) To UBound(Ar)
                      Tmp = Application.Trim(Ar(X))
                     Select Case Col
                        Case 1
                           If IsDate(Tmp) Then
                              Cells(Lig, Col).Value = CDate(Tmp)
                            End If
                           If IsNumeric(Tmp) Then
                              Cells(Lig, Col).Value = CDbl(Tmp)
                             Else
                              Cells(Lig, Col).Value = Tmp
                           End If
                        Case Else
                              If IsNumeric(Tmp) Then
                                 Cells(Lig, Col).Value = CDbl(Tmp)
                                Else
                                 Cells(Lig, Col).Value = Tmp
                              End If
                     End Select
                     Col = Col + 1
                  Next
            Lig = Lig + 1
        Loop
    Close #1
' -----------------------------------------
   With Application
      .ScreenUpdating = True
      .Calculation = xlCalculationAutomatic
      .EnableEvents = True
      .CutCopyMode = False
      .Goto [A1], True
   End With
End Sub
Rechercher des sujets similaires à "importation fichier"