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 csv dynamique dans access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut Import csv dynamique dans access
    Bonjour,
    Je vous sollicite aujourd’hui car j’ai beau cherché sur internet une solution à mon problème, mais malheureusement je ne la trouve pas.
    Je possède plusieurs tables csv dans différents répertoire que je souhaite relier à ma base acess, ces tables sont bien dynamique et c’est mon problème (se sont des exports machines avec le nombre de colonne variable c-a-d pour la même table si aujourd’hui j’ai 28 colonnes demain je peux avoir que 25….) donc je ne peux pas fixer mon entête avec la commande : SpecificationName, car mes requêtes ne marcheront pas vu que le nombre de colonne change.
    Bien évidemment je ne peux pas importer ces tables sur plusieurs machines manuellement
    Voici le code et 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
    29
    30
    31
    Sub import()
     
    'delete table
     
     
     
    Dim dbs As DAO.Database, tdf As DAO.TableDef
    Dim tbl As Object
     
    Set dbs = CurrentDb()
    For Each tbl In dbs.TableDefs
    If Len(tbl.Connect) > 0 Then
    'table attachée
    Debug.Print tbl.Name
    dbs.Execute "Drop Table [" & tbl.Name & "]"
     
     
    End If
    Next
     
    Set tdf = Nothing
    Set dbs = Nothing
     
    'import table
     
    DoCmd.TransferText TransferType:=acLinkDelim, SpecificationName:="GenericTabSpecification", TableName:="TABLE1", _
        FileName:="c:\bureau\bac\table1.csv", HasFieldNames:=False
     
    DoCmd.TransferText TransferType:=acLinkDelim, SpecificationName:="GenericTabSpecification", TableName:="TABLE2", _
        FileName:="c:\bureau\bac1\table2.csv", HasFieldNames:=False
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Comme un fichier CSV est en fait un fichier texte avec séparateur je te propose peut-être une solution qui devrait fonctionner quelque soit le nombre d'éléments de ton fichier, en voici les étapes :

    1. Lire ton fichier texte en splitant la ligne dans un tableau.
    2. Lors de la boucle de lecture, lorsque tu es sur la première ligne tu crées dynamiquement ta table par DAO, tu as le nombre de champs (Ubound du tableau), et les entêtes de champ, puisqu'elles font parties de la première ligne de lecture.
    3. Une fois que ta table est crée, tu peux à l'aide d'une requête ajout et du parcours du fichier remplir ton tableau.


    Il s'agit donc d'une idée.

    Philippe

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut Re
    Bonjour Philippe,
    Merci de ta réponse j'ai deja testé cette solution ,le problème c'est le temps d'execution très important à cause de la boucle.
    Parcontre quand j'active le filedname et je n'enregistre pas l'en-tête dans avancé pendant l'import , j'ai bien l'en-tête présent mais à la 2 éme ligne de la table liée .s'il n'ya pas de solution,ma question est ce que c'est possible de requêters ces tables avec des requêtes ou l'en-tête est en 2 eme ligne ??
    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 040
    Par défaut
    Bonjour,
    Une proposition (que j'ai utilisée par le passé) est de préparer la table cible avec un maximum de colonnes en format TEXTE
    par exemple 50 colonnes en texte dans ton cas.
    tu crées aussi un schéma d'importation qu puisse importer ces 50 colonnes (donc te créer un fichier bidon pour cela)
    ainsi ta commande DoCmd.TransferText marchera correctement pour tous les fichiers qui auront moins de 50 champs.

    Il te reste à identifier le nombre de colonnes et retrouver leur nom d'entete et leur type final. Mais ça tu peux peut-être le faire à côté.

    Cdlt

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut
    Citation Envoyé par micniv Voir le message
    Bonjour,
    Une proposition (que j'ai utilisée par le passé) est de préparer la table cible avec un maximum de colonnes en format TEXTE
    par exemple 50 colonnes en texte dans ton cas.
    tu crées aussi un schéma d'importation qu puisse importer ces 50 colonnes (donc te créer un fichier bidon pour cela)
    ainsi ta commande DoCmd.TransferText marchera correctement pour tous les fichiers qui auront moins de 50 champs.

    Il te reste à identifier le nombre de colonnes et retrouver leur nom d'entete et leur type final. Mais ça tu peux peut-être le faire à côté.

    Cdlt
    Bonjour ,
    Je crois que je n'ai pas bien compris votre solution , tu peux détailler ou me donner un exemple svp
    Merci,

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 040
    Par défaut
    Tu crées une table qui sera la table de tes importations soit T_tmp_importCSV
    avec 50 champ Champ01, Champ02 ... Champ50 de type TXT(250)

    Ensuite tu crées un fichier CSV de quelques lignes avec 50 champs saisis.
    Cela te permet de créer en le sauvegardant le nouveau schéma d’importation (à la place deton "GenericTabSpecification") vers la table T_tmp_importCSV
    A toi de voir si tu veux retrouver les valeurs de la ligne d'entête (si présente dans le fichier CSV).

    Ensuite, tu n'a plus qu'à lancer la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferText acImportDelim, "specif_import_CSV", "T_tmp_importCSV ", strCsvFullFileName
    Alors, tu dois trouver tes valeurs importées dans la table T_tmp_importCSV.
    Est-ce clair ?

Discussions similaires

  1. [XL-2010] Rechercher tous les fichiers csv d'un repertoire et les importer en table dans Access
    Par Nestea dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/11/2011, 14h43
  2. Importer Feuil Excel dans Access
    Par beurnoir dans le forum Access
    Réponses: 4
    Dernier message: 21/10/2009, 16h46
  3. Import de fichier CSV automatique dans Access
    Par Jmar dans le forum Access
    Réponses: 4
    Dernier message: 20/01/2006, 10h48
  4. Pb import table dbf dans Access
    Par besly dans le forum Access
    Réponses: 10
    Dernier message: 28/12/2005, 20h51
  5. Importer Feuil Excel dans Access
    Par beurnoir dans le forum Access
    Réponses: 2
    Dernier message: 27/10/2005, 14h13

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