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

VBA Access Discussion :

importer des données d'un fichier texte à access


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 100
    Points : 58
    Points
    58
    Par défaut importer des données d'un fichier texte à access
    Bonjour,

    J'ai un petit problème d'exportation de données et de débogage .
    Sur le code d'abord, il ne reconnais pas le chemin du fichier (bogue auniveau de l'ouverture Open Monfichiers n'est pas reconnu), ensuite j'aimerais savoir comment faire pour augmenter mes champs tous en étant sélective sur les données. Je m'explique j'ai des données intéressantes dans tout un fatras de données qui me sont inutiles.

    par exemple :
    marqueurs bla bla 2323
    bla bla bla
    bla bla séquence ici longueurs de séquence variables

    Dernier problème
    Comment concilier le fait que j'ai des données à extraire qui se répète: je me doute bien qu'il faut que je fasse une boucle avec un état d'arrêt
    Merci de votre aide


    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
    Option Compare Database
     
    Sub ImportTXT()
        Dim txtLine As String
        Dim MonFichier As String
        Dim dbs As DAO.Database
        Dim rst As DAO.Recordset
        Dim F As Integer
     
        MonFichier = "D:\Mes Documents\Soria\Annexe1.txt"
        Set dbs = CurrentDb
        Set rst = dbs.OpenRecordset("TableEssais", dbOpenDynaset)
        F = FreeFile
        Open MonFichier For Input As #F
            Line Input #F, marqueur
            Do While Not EOF(F)
            Line Input #F, sequence
            With rst
                .AddNew
                .Fields("marqueurs").Value = txtLine
                .Update
            End With
        Loop
        Close #F
        rst.Close
        Set dbs = Nothing
        Set rst = Nothing
    End Sub
    Une autre question, que signifie dans ce contexte #F. J'ai beau chercher, je ne vois pas.
    J'avoue, j'utilise des codes existants pour apprendre

  2. #2
    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
    Dans le temps, bien avant Windows et avant l'invention de l'objet et de toutes ces patentes modernes :-) on utilisait des 'canaux' de communication pour lire les fichiers. Ces canaux étaient identifiés non pas par un nom mais par un numéro. Donc ton #F est simplement le numéro du canal que tu utilises.

    Pour ton problème de données qui se répète, as-tu un moyen de savoir quand tu es sur un enr qui en contient ?

    Mets-tu ces informations dans une table spécifique ?

    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.

  3. #3
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 100
    Points : 58
    Points
    58
    Par défaut
    Qu'est ce que tu appelles une table spécifique ?
    J'avais pensé au départ à créer un filtre mais je ne vois pas comment .
    Ce qui me donnait de l'espoir c'est que le format est systématique:
    Nom du marqueur...
    blaa
    bla

    Séparés par des tirets, information perdu quand je transforme le pdf en texte.

    Nom du marqueur...
    blaa
    bla

  4. #4
    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
    Citation Envoyé par soria_t Voir le message
    Qu'est ce que tu appelles une table spécifique ?
    J'imagine que tu ne lis pas les données juste pour le plaisir :-) donc tu dois probablement les mettres quelque part dans ta base, non ?

    D'après ce que je comprend tu devrais avoir 3 tables :

    'Liste des marqueurs
    Table Marqueur
    ClefMarqueur
    NomMarqueur

    'Liste des attribut de marqueur
    Table AttributMarqueur
    ClefAttributMarqueur
    NomAttributMarqueur

    'Liste des valeurs attribuées à chacun des attributs de chaque marqueur.
    Table ValeurAttributMarqueur
    ClefMarqueur
    ClefAttributMarqueur
    ValeurElement

    J'avais pensé au départ à créer un filtre mais je ne vois pas comment .
    Ce qui me donnait de l'espoir c'est que le format est systématique:
    Nom du marqueur...
    blaa
    bla

    Séparés par des tirets, information perdu quand je transforme le pdf en texte.

    Nom du marqueur...
    blaa
    bla
    Pour la lecture de tes données :

    Il existe la commande Split qui te permets de découper une chaîne de caractères selon un séparateur que tu défini. ex :

    Mid(), Instr(), Left() et Right() sont aussi très utiles.

    Un point que je n'ai pas compris dans tes données, toutes tes séquences variables sont-elles sur une seule ligne ?

    Ton fichier a bien la structure suivante ?

    Un nom de marqueur
    Une séquence
    Un nom de marqueur
    Une séquence
    Un nom de marqueur
    Une séquence

    Peut-être pourrais-tu poster un extrait de tes données, je pense que cela aiderai.

    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.

  5. #5
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 100
    Points : 58
    Points
    58
    Par défaut
    Après avoir beaucoup plus bosser voilà ce que j'ai fais. Alors j'ai l'impression que ça ne marche pas mais je ne vois pas pourquoi.


    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
     
    Public Sub Importer(strNomFichier As String)
    Dim FSO As New Scripting.FileSystemObject
    Dim Fichier As Scripting.TextStream
    Dim strLigne As String
    Dim strNomMarqueur As String
    Dim strNomGene As String
    Dim strNomSeqF As String
    Dim strNomSeqR As String
    'Seqtype définit si ce sont des Snp ou des singletons ou tout autre type
    Dim strNomSeqType As String
    'Les deux suivants définissent la position en cartographie physique et génétique
    Dim strValCPhy As String
    Dim strValCGen As String
    Set Fichier = FSO.OpenTextFile(strNomFichier, ForReading)
    Dim Rst As DAO.Recordset
    Dim I As Integer
     
    'Charge la table en mémoire
    Set Rst = CurrentDb.OpenRecordset("TableTest2", dbOpenTable)
    'Charge mon fichier
    Fichier = "D:\Mes Documents\Soria\Annexe1.txt"
    'Tant que non fin de fichier
    While Not Fichier.AtEndOfStream
      'lit la ligne
       strLigne = Fichier.ReadLine
       'Si elle n''est pas fini
       If Trim(strLigne) <> "Fin" Then
       'Si c'est une ligne d'initiation
       If Left(strLigne, 15) = "Nom du marqueur" Then
          'Si on est sur un nouvel enregistrement, on le valide
          If Rst.EditMode = dbEditAdd Then Rst.Update
       Else
          'Sinon, si on est pas en mode ajout, on ajoute un nouvel enregistrement
          If Not Rst.EditMode = dbEditAdd Then
            Rst.AddNew
            'Fixe le numéro
            Rst.Fields("Numero") = Rst.RecordCount + 1
          End If
          'Récupère la position des
        I = InStr(1, strLigne, "marqueurs", vbTextCompare)
          If I > 0 Then
            'Récupère le nom du champ et la valeur
            strNomMarqueur = Trim(Mid(strLigne, I + 3))
            strNomGene = Trim(Mid(strLigne, I + 3))
            strNomSeqF = Trim(Mid(strLigne, I + 3))
            strNomSeqR = Trim(Mid(strLigne, I + 3))
            strNomSeqType = Trim(Mid(strLigne, I + 3))
            strNomValCPhy = Trim(Mid(strLigne, I + 3))
            strNomValCGen = Trim(Mid(strLigne, I + 3, 15))
            'Remplit la table
            Rst.Fields(strNomChamp).Value = strValeur
        End If
        End If
        End If
    Wend
    'Ferme tout
    Fichier.Close
    Rst.Close
    Set Rst = Nothing
    Set Fichier = Nothing
    Set FSO = Nothing
    End Sub
    voila le format de mes données :
    Nom du marqueur :Données
    Nom du gene :Données
    Programme : inutile
    séquence :
    F:Données
    R:Données
    beaucoup de bla bla
    Carto physique:Données
    Carto genetique:Données
    Le problème des données est qu'elle n'ont pas de longueur fixe.

    Merci beaucoup pour ta patience

  6. #6
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 100
    Points : 58
    Points
    58
    Par défaut
    Effectivement il y a belle et bien plusieurs tables et il faut que je divise les données entre elles.
    Et elles se subdivisent bien commme tu le penses
    Bon je vais vois si il est plus intéressant d'ouvrir plusieurs fichiers dans un programme ou plusieurs programmes traitant un fichier (sources d'erreurs non?)

  7. #7
    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
    Je n'ai pas lu tout ton code mais c'est sur que la ligne :

    Fichier = "D:\Mes Documents\Soria\Annexe1.txt"

    est à enlever. Il faut que tu mettes "D:\Mes Documents\Soria\Annexe1.txt" dans strNomFichier.

    Personnelement je me fait toujours une petite procédure de que j'appel Test_NomDeMaFonction que j'appele pour faire des essais ans ton cas cela donnerai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private sub Test_Importer()
        call Importer("D:\Mes Documents\Soria\Annexe1.txt")
    end sub
    Bon je vais voir si il est plus intéressant d'ouvrir plusieurs fichiers dans un programme ou plusieurs programmes traitant un fichier (sources d'erreurs non?)
    Non, je ne recommande pas d'ouvrir plusieurs fois le fichier d'entrée car cela ne se justifie pas dans ton cas. Tu sais sur quelle ligne tu es au fur et à mesure il te suffit juste d'ouvrir plusieurs recordsets de sortie et d'y mettre les information que tu as lues. Comme tu as toutes les informations nécessaires pour chaque table cela ne devrait pas être un gros travail.

    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.

Discussions similaires

  1. Importer des données depuis un fichier texte
    Par Tofalu dans le forum Contribuez
    Réponses: 1
    Dernier message: 28/07/2013, 10h55
  2. [AC-2003] Importer des données depuis un fichier texte
    Par Piedbaguette dans le forum Modélisation
    Réponses: 21
    Dernier message: 07/07/2011, 18h23
  3. Réponses: 3
    Dernier message: 24/05/2008, 18h56
  4. Importation des données d'un fichier texte
    Par Koukouknizou dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/11/2007, 22h30
  5. Réponses: 2
    Dernier message: 05/01/2006, 00h29

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