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 :

Import fichier csv dans plusieurs tables


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Import fichier csv dans plusieurs tables
    Bonjour tout le monde,

    Je suis en train de réaliser un p'ti truc avec access me permettant d'exploiter des données stockées dans un fichier csv créé par un logiciel tier.
    Je me retrouve avec 3 "problèmes"

    1) Le fichier est "crypté" via un xor 'a' (ou 0x61 comme vous voulez), donc avant de l'exploiter j'ai besoin d'appliquer un xor sur tout le fichier. On va dire que ce problème est résolu, même si actuellement je ne le fait pas en vba, ce ne doit pas être bien sorcier.

    2) Le fichier a été exporté à priori à partir d'un os allemand, conclusion les montants ont la forme suivante : => 6.329,07 et le caratère de séparation est ;
    (note : Je me suis aperçu que c'était dépendant des paramètres "Region And Language" de windows. Par exemple, si je suis en configuration "English (United States)" je dois passer par l'assistant d'excel pour l'ouvrir, en revanche si je passe en German (Germany), il me suffit de double cliquer sur le fichier .csv pour que le fichier s'ouvre sans aucun problème, même pour l'interprétation des montants.)

    3) Ce fichier contient 61 colones, avec des répétitions de partout. Mon modèle access me permettant de stocker ça est lui, sur plusieurs tables.

    J'aurai voulu savoir ce que vous me conseilleriez pour importer au mieux ce fichier dans mes tables de manière automatisée pour l'utilisateur.

    En ce qui concerne l'import du fichier, Je n'arrive pas à obtenir ce que je souhaite avec DoCmd.TransferText (ni avec l'assistant d'importation en fait). Il n'arrive jamais à interpréter correctement les montants (à cause du "." qui sépart les milliers), à moins bien sur de passer en configuration "allemande" dans mes paramètre régionaux (Mais je ne peux pas demander aux utilisateurs de faire cette manip)...
    J'ai donc testé avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        db.Execute _
        "SELECT * INTO test FROM [Text;FMT=Delimited;HDR=No;DATABASE=......;].[fichier#csv];", _
        dbFailOnError
    Et un fichier schema.ini. Car dans ce fichier je peux préciser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CurrencyThousandSymbol=.
    CurrencyDecimalSymbol=,
    Sauf que là l'importation échoue sur les lignes qui comportent un guillemet dans les champs de type "Text". Du genre :
    bla;bla"lalala";bla
    Et sinon je ne sais pas trop comment m'y prendre pour importer le fichier dans "plusieurs" tables. Je comptais l'importer dans un premier temps dans une seule table (avec l'une des 2 méthodes d'audessus) puis avec un script transférer les records un à un dans les tables, mais peut-être il y a-t-il un autre moyen?

    Bref si vous aviez des conseils sur n'importe lequel de mes "problèmes" ce serait top

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    Dans ces cas là (fichier tout pourri en entrée), je lie le fichier en considérant toutes les colonnes comme du texte et ensuite, je traite le fichier séquentiellement en appliquant à chaque donnée les transformations nécessaires pour les faire rentrer dans le bon format.
    Dans le cas présent, tu pourras en plus en profiter pour insérer tes données dans les bonnes tables.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    C'est à dire que tu utilises un transfertext pour importer tout dans une table séparée (chaque colones étant de type Text), et que tu parcours ensuite chaque enregistrement de cette table en te débrouillant pour à la fois parser les valeurs "bizares" (typiquement ici les montants) et en plus bien les "ranger" dans mes tables?
    Ou est-ce que tu sous-entendais de parser le fichier csv à la main ligne par ligne en se débrouillant pour le découpage des colones? (ce que j'hésite à faire étant donné que je vais devoir en première étape faire un premier parcours de tout le fichier pour le déchiffrer).

    En tout cas merci de ta réponse, j'avoue que le principe de tout importer en text n'est pas bete, j'esperai "juste" qu'un truc déja tout fait existe :p (l'air de rien les fichiers csv depuis le temps que ça existe.. tous ces problèmes de formats je pensai que c'était vraiment simple à gérer)

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    Au choix, soit j'utilise un schema.ini.
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    XXXXXXXX]
    ColNameHeader = True
    CharacterSet = ANSI
    Format = delimited(;)
    TextDelimiter="
    Col1=DateJour text 
    Col2=CodSociete text 
    Col3=LibSociete text 
    Col4=Matricule Text
    Col5=AncienMatricule Text
    Col6=Nom Text
    Je fais un select sur ma table liée et je traite enregistrement par enregistrement.
    Soit je lis le fichier ligne à ligne et je fais un split de chaque ligne avant de traiter les données.
    Ca dépend de l'humeur du moment.

Discussions similaires

  1. [AC-2003] Importer fichier csv dans une table
    Par baryonyx dans le forum VBA Access
    Réponses: 4
    Dernier message: 30/05/2013, 10h15
  2. Import plusieurs fichiers csv dans une table
    Par snoopo dans le forum Import/Export
    Réponses: 4
    Dernier message: 17/02/2012, 16h07
  3. Réponses: 7
    Dernier message: 29/09/2008, 15h44
  4. Importer un fichier CSV dans une table mySQL
    Par crazydiver_e2 dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/01/2007, 10h47
  5. Impossible d'importer un fichier csv dans une table sous MySQL
    Par manue85 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 20/04/2006, 12h06

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