IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

pb importation fichier texte


Sujet :

Access

  1. #1
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 116
    Points : 105
    Points
    105
    Par défaut pb importation fichier texte
    bonjour,
    j'ai un souci d'importation d'un fichier text avec access 97. j'obtiens le message suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "external table isn't in expected format"
    mon fichier text est délimité par des";", le schema.ini (qui se trouve dans le meme dossier) contient donc et les champs selectionnés sont du meme type que ceux de la table de réception (j'ai fait un test avec un champ pour etre sur...

    merci de votre aide,
    b.

  2. #2
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 116
    Points : 105
    Points
    105
    Par défaut
    ...et le code de l'importation (pompé sur le site de microsoft...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim db As Database, tbl As TableDef
    Set db = CurrentDb()
    Set tbl = db.CreateTableDef("Linked Text")
     
    tbl.Connect = "Text;DATABASE=C:\Users\analyse_fichiers;TABLE=monfichier.txt"
    tbl.SourceTableName = "monfichier.txt"
    db.TableDefs.Append tbl
    db.TableDefs.Refresh

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Suggestion

    Généralement j'utilise l'assistant d'importation pour faire ce genre de manip.

    A part cela, es-tu sur que le code fournit est pour Access 97 ?

    Ensuite tu peux assez facilement remplacer import de fichier text par du code en utilisant Open, Line Input #, FreeFile() et quelques fonctions de chaine pour le découpage sur les ;.

    Si tu as de la misère avec cela, jsute dit-le je te donnerai un exemple de code.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Points : 47
    Points
    47
    Par défaut
    Salut,
    oui moi je voudrais bien voir un exemple de code pour l'importation de fichier texte.
    En effet je réalise une importation automatique sous VBA, mais le problème c'est que apres avoir importer le fichier, il me met toutes les données dans un seul champs...

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il y a un assistant d'import pour les fichiers textes
    si on choisit texte et délimité il suffit de préciser le séparateur pour obtenir les champs désirés
    l'option avancée permet de peaufiner l'import
    Elle est pas belle la vie ?

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bon voici mon code.

    Il supose que que tes chaines sont délimitées par des guillemets (") et tes données séparées par des vigules (,). Il fait un conversion DOS -> Windows pour certains caractères.

    Il importe tout en texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
     
    Private Sub ImporterTexte(prmChmFic As String, prmNomFic As String, prmNomTable As String)
        Debug.Print prmNomFic
     
        On Error GoTo Err_ImporterTexte
     
        Dim nomFic As String: nomFic = prmNomFic
        Dim nomTable As String: nomTable = prmNomTable
        Dim chmFic As String: chmFic = prmChmFic
        Dim numFic As Integer: numFic = FreeFile()
        Dim lf As String
        Dim i As Integer
     
        Dim db As Database: Set db = CurrentDb
     
        Open chmFic & nomFic For Input As numFic
     
        Line Input #numFic, lf: 'ligne d'entête
        Dim nomField As Variant
     
        nomField = Split(lf, ",")
        For i = LBound(nomField) To UBound(nomField)
            nomField(i) = CalculerNomField(CStr(nomField(i)), nomField)
        Next i
     
        'Lit une première fois les données pour déterminer leur longueur
        Dim tailleMaxField(255) As Integer
        Dim dataField(255) As String
     
        Do While Not EOF(numFic)
            Line Input #numFic, lf
            Debug.Print lf
            Call DecouperEnr(lf, dataField)
            For i = LBound(nomField) To UBound(nomField)
                tailleMaxField(i) = monMax(tailleMaxField(i), Len(CalculerDataField(CStr(dataField(i)))))
            Next i
        Loop
        Close #numFic
     
        'Creer la table associée
        Dim t As TableDef
        Dim f As Field
     
        Call db.TableDefs.Delete(nomTable)
     
        Set t = db.CreateTableDef(nomTable)
        For i = LBound(nomField) To UBound(nomField)
            Set f = New Field
            f.Name = nomField(i)
            f.Type = dbText
            f.Size = IIf(tailleMaxField(i) = 0, 255, tailleMaxField(i))
            f.AllowZeroLength = True
            Call t.Fields.Append(f)
        Next i
        Call db.TableDefs.Append(t)
        Set t = Nothing
     
        Dim descriptionChamp As String
        Set t = db.TableDefs(nomTable)
        For Each f In t.Fields
            descriptionChamp = RetrouverDescription(t.Name, f.Name)
     
            If IsNull(descriptionChamp) Then
                    descriptionChamp = "."
                Else
                    If descriptionChamp = "" Then
                        descriptionChamp = "."
                    End If
            End If
     
            Call f.Properties.Append(CurrentDb.CreateProperty("Description", dbText, descriptionChamp))
        Next
     
        Set t = Nothing
     
        'charge les données
        Dim r As Recordset
     
        Open chmFic & nomFic For Input As numFic
        Line Input #numFic, lf: 'ligne d'entête
     
        Set r = db.OpenRecordset(nomTable)
        Do While Not EOF(numFic)
            Line Input #numFic, lf
            Debug.Print lf
            lf = ConvertirAWindows(lf)
            Call DecouperEnr(lf, dataField())
            r.AddNew
            For i = LBound(nomField) To UBound(nomField)
                r.Fields(i) = CalculerDataField(CStr(dataField(i)))
            Next i
            r.Update
        Loop
        r.Close: Set r = Nothing
        Close #numFic
     
        db.Close: Set db = Nothing
     
    Exit_ImporterTexte:
        Exit Sub
     
    Err_ImporterTexte:
        Select Case Err.Number
            Case 3265
                'La table n'existe pas
                Resume Next
     
            Case Else
                MsgBox Err.Number & ", " & Err.description, vbExclamation
                Resume Exit_ImporterTexte
        End Select
    End Sub
     
    Private Function CalculerNomField(prmNomField As String, prmListeNomField As Variant) As String
        Dim result As String
        result = Mid(prmNomField, 2, Len(prmNomField) - 2): 'Supprime les guillemets autours du nom
     
        Dim c As String
        Dim i As Integer
     
        For i = 1 To Len(result)
            c = Mid(result, i, 1)
            If Not (("A" <= UCase(c) And UCase(c) <= "Z") Or ("0" <= c And c <= "9") Or (c = "_")) Then
                c = "_"
                Mid(result, i, 1) = c
            End If
        Next i
     
        'Verifie qu'on a pas déjà un champ avec le même nom
        Dim fieldUnique As Boolean
        Do
            fieldUnique = True
            For i = LBound(prmListeNomField) To UBound(prmListeNomField)
                If result = prmListeNomField(i) Then
                    fieldUnique = False
                    result = result & "x"
                End If
            Next i
        Loop While Not fieldUnique
     
        CalculerNomField = result
    End Function
     
    Private Function CalculerDataField(prmDataField As String) As String
        Dim result As String
        If Left(prmDataField, 1) = """" Then
                result = Mid(prmDataField, 2, Len(prmDataField) - 2): 'Supprime les guillemets autours de la chaine
            Else
                result = prmDataField
        End If
        result = Trim(result)
        CalculerDataField = result
    End Function
     
    Private Function monMax(prmInt1 As Integer, prmInt2 As Integer)
        If prmInt1 > prmInt2 Then
                monMax = prmInt1
            Else
                monMax = prmInt2
        End If
    End Function
     
    Private Function ConvertirAWindows(prmTexte As String)
        Dim i As Integer
        Dim c As String
        Dim result As String
     
        For i = 1 To Len(prmTexte)
            c = Mid(prmTexte, i, 1)
            result = result & dosAWindows(c)
        Next i
     
        ConvertirAWindows = result
    End Function
     
    Private Function dosAWindows(prmCharDos As String) As String
        Dim result As String
        Select Case prmCharDos
            Case Chr(144)
                result = "É"
            Case Chr(130)
                result = "é"
            Case Chr(135)
                result = "ç"
            Case Chr(131)
                result = "â"
            Case Else
                result = prmCharDos
        End Select
        dosAWindows = result
    End Function
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. Import fichier texte avec separateur milliers "."
    Par mgrsys dans le forum Access
    Réponses: 8
    Dernier message: 12/09/2006, 08h58
  2. Importer fichier texte dans base Access
    Par Mymi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/08/2006, 20h21
  3. probleme avec un import fichier texte dans mysql
    Par xodeax dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/07/2006, 13h24
  4. import fichier texte dans table contrainte
    Par philippe281281 dans le forum Outils
    Réponses: 5
    Dernier message: 14/06/2006, 17h01
  5. Réponses: 2
    Dernier message: 02/02/2006, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo