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 :

Problème Import fichier .txt dans une table Access


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Problème Import fichier .txt dans une table Access
    Bonjour à tous,

    Bien qu'ayant cherché dans de nombreux forums mon problème, je n'ai pas trouvé exactement ce que je voulais.
    Je cherche à importer en VBA un fichier txt (fichier qui est sans nom de champ) dans une table access.
    Jusque là, je n'avais pas de problèmes, j'utilisais un shema d'import dans Access que j'appelais avec "TransferText acImportDelim, "schemaImport", "NomTable"...
    Mon problème est que ce fichier apparaît de cette manière:

    az 1 aa
    be 2 aa vr
    ce 3 aa vr ef
    de 1 aa
    ea 2 aa vr

    Le gros problème est qu'Access regarde pour chaque champ, la valeur du premier enregistrement, si l'enregistrement est vide, il considère que ce champ est vide, et donc il n'importe pas toutes les colonnes.
    Autrement dit, dans mon exemple ci-dessus, Access importe 3 colonnes au lieu de 5 où dans certains cas ces valeurs ne sont pas vides.
    J'ai essayé de lier mon fichier txt à une table access mais même problème!!!
    Je suis trés moyen en VBA donc je ne me suis pas lancé dans du code de fou car j'imagine (j'éspère) qu'il existe une fonction qui pourrait m'aider!!!
    Si quelqu'un à rencontré mon problème, je lui serais trés reconnaissant car je galère vraiment dessus!!!

    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Je n'avais jamais utilisé cette fonctionnalité, alors en lisant ton post je l'ai essayée.

    A mon avis il te suffit de recréer un schéma d'import en suivant ces instructions

    Je viens d'essayer et ça a marché
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #3
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Comme dis paidge, le script d'import est une solution qui doit marcher sauf si le nombre d'enregistrements qui contient un minimum de champs est trop nombreux en en-tête de fichier car l'outil d'import analyse de mémoire les 24 premières* lignes pour déterminer le type de la colonne ; en d'autres termes, si tu as les 35 premières lignes à 3 champs et les autres à 6 champs, tu n'auras que 3 champs dans ta table.

    Paliatif Simple :
    A vue comme ça je passerai par Excel avec le même procédé d'import via l'outil "Convertir"
    puis une table liée.
    Ca reste accessible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub OpenMyFile(ByVal TxtFileName As String)
    Dim strTargetPath                                      As String
     
        Workbooks.OpenText Filename:=TxtFileName, _
                           Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, _
                           FieldInfo:=Array(Array(0, 1), Array(2, 1), Array(4, 1), Array(7, 1), Array(10, 1)), _
                           TrailingMinusNumbers:=True
        strTargetPath = Left$(strTargetPath, InStrRev(strTargetPath, "\"))
        ActiveWorkbook.SaveAs strTargetPath  & "MaTableAccess.xls"
    End Sub
    Tipeu plus évolué :
    • Prendre FSO de ScriptingRuntime avec un TextStream
    • Ouvrir le fichier en lecture
    • Parcourir jusqu'à la fin (AtEndOfStream)
    • Pour chaque ligne lue, prendre le UBound(Split(.ReadLine, " ")) dans une Collection de Long avec gestion d'erreurs qui empêche la création de doublons
    • Fermer le fichier
    • Lire la collection et prendre la valeur Maxi (qui représente le nombre de champs le + grand)
    • Ouvrir ton fichier en mode Append et insérer une ligne en en-tête de fichier avec des valeurs quelconques en regard du nombre de champs maxi trouvé ci-avant
    • Fermer le fichier
    • L'importer avec ton processus sous Access


    Mais bon l'option simple reste de loin la plus facile pour toi.
    Il te faudra tout de même triturer du OLE pour instancier correctement et en silence ton instance Excel.

    Argy

    * je n'ai plus le nombre exact en-tête mais je sais qu'il est petit.
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour votre aide Paidge et Argy!!

    La methode de Paidge pour enregistrer la methode de spécification d'import est ce que j'utilisais pour faire mon import (trés utile d'ailleur) mais je me trouve exactement dans le problème que tu parles Argy: "l'outil d'import analyse de mémoire les 20 premières* lignes pour déterminer le type de la colonne ; en d'autres termes, si tu as les 35 premières lignes à 3 champs et les autres à 6 champs, tu n'auras que 3 champ dans ta table."

    Le fichier que j'essais d'importer contient trés peu de données dans les dernières colonnes, du coup je rencontre ce problème.

    Je vais essayer de le convertir en excel d'abord!!

    Merci encore pour votre aide

Discussions similaires

  1. [AC-2002] Importer fichier Excel dans une table Access
    Par Kalymar dans le forum Access
    Réponses: 4
    Dernier message: 28/05/2011, 15h09
  2. [AC-2000] Import fichier Excel dans une table Access déjà existante
    Par icecreams01 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/05/2010, 15h07
  3. [DDE]Import fichier .txt dans une base Access
    Par stoonman dans le forum Access
    Réponses: 3
    Dernier message: 23/03/2007, 19h08
  4. importer les noms de fichiers html dans une table access
    Par abane badis dans le forum Access
    Réponses: 3
    Dernier message: 14/11/2005, 17h25
  5. Réponses: 7
    Dernier message: 04/10/2005, 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