Fichier text et vba

Résolu
berbib -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,
J'ai besoin de vos lumières.
J'ai un fichier csv tiré d'un fichier excel.
Le but est de faire un import dans une base de données Access de ce fichier.
Donc mon problème est le suivant :
je n'arrive pas a traiter correctement ce fichier pour:
- Ouvrir le fichier
- Lire chaque ligne pour la mettre dans une variable.
- Récuperer la chaine de caractere de cette variable jusqu'au 1er ";" pour l'inserer dans ma table access.
Et ainsi de suite...

Merci de vos réponse je suis en galère.

4 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    un exemple ? , j'ai pas tester mais ça devrait t'aider...
    Dans un module public..
    Option Explicit 
    Public Chemin As String 
    Public Fichier As String 
    
    'Sélectionner un fichier par boite de dialogue 
    Function SelectionFichier() As Boolean 
    Dim nomfich As String, i As Integer 
        nomfich = Application.GetOpenFilename(FileFilter:="(*.*),*.tous" _ 
                , Title:="Sélectionnez le fichier à convertir") 
        If nomfich = "Faux" Then 'pas de sélection faite 
            Exit Function 
        End If 
        For i = Len(nomfich) To 2 Step -1 
            If Mid(nomfich, i, 1) = "\" Then Exit For 
        Next i 
        Chemin = Left(nomfich, i) 
        Fichier = Mid(nomfich, i + 1) 
        SelectionFichier = True 
    End Function 
    
    Sub OuvreFichier() 
    Dim F As String, Fich As Integer, TB, D 
        SelectionFichier 
        F = Chemin & Fichier 
        Fich = FreeFile 
        Open F For Input As #Fich 
        While Not EOF(Fich) 
            Line Input #Fich, D 
            TB = Split(D, ",") 'adapter au séparateur... 
            'Ici, la première donnée est dans T(0) 
            'Tu peu l'insérer où tu veux 
        Wend 
    End Sub

    Eventuellement tu peu remplacer SelectionFichier par le chemin et nom en dur dans le module.
    Syntaxe = OuvreFichier()
    A+
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Beh... entre temps tu a mis ton topic en résolu ? comment ?
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  3. berbib
     
    Après avoir bien reflechi et tourner sur le net... voila mon code.. sui fonctionne, peut etre pas tres académique :( mais bon... efficace.

    Merci a toi quand mème.

    Dim NumFic As Integer
    Dim strLigne As String
    Dim Niveau1 As String
    Dim requeteSelect6 As String

    Dim requeteInsert1 As String
    Dim Result As Integer
    Dim recset As Object
    Dim ID As Integer
    Dim DB As Database

    NumFic = FreeFile

    Open "c:\Classeur0.txt" For Input As #NumFic
    While Not EOF(NumFic)
    Line Input #NumFic, strLigne
    'Select Case i
    'Case 1
    pos = InStr(strLigne, ";")
    Niveau1 = Left(strLigne, pos - 1)
    strLigne = Mid(strLigne, pos + 1, Len(strLigne) - pos)
    requeteSelect1 = "Select ID_Niv1 from Article_Niv1 where Des_Niv1 = '" & Niveau1 & "';"
    requeteInsert1 = "INSERT INTO Article_Niv1 ( Des_Niv1 )VALUES ('" & Niveau1 & "');"
    Set DB = CurrentDb
    Set recset = DB.OpenRecordset("Select * from Article_Niv1 where Des_Niv1 = '" & Niveau1 & "';")
    Result = recset.RecordCount
    If Result = 0 Then
    DoCmd.RunSQL requeteInsert
    End If
    0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    D'ac, mais dans ton cas la fonction Split est plus appropriée.
    0