Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2919 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Importer plusieurs csv sous access avec fichier .ini

 

Sujet(s) à lire :
    - Visual C++
 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Importer plusieurs csv sous access avec fichier .ini

n°1907105
mmmxtina
Posté le 21-07-2009 à 10:35:33  profilanswer
 

Bonjour à tous!!!  
 
J'ai besoin d'exporter des fichiers csv sous access.  
En fait pour être plus précise, c'est une base de donnée qui pilote une autre base de donnée et qui lui dit d'importer ces fichiers csv.  
Donc au début j'utilisait le petit truc généré par l'aie Imortation/exportation de access, mais comme c'est une autre base de données qui exporte els fichier sil faut utilisé un fichier .ini  
 
Petit soucis, j'ai aps trop compris comment ça fonctionne, j'ai regardé sur internet et pour l'instant ça me dit quil ne toruve pas mon fichier .ini (que j'ai bien pris soin de mettre dans le dossier où se trouvent mes fichiers csv à exporter)  
voici le code:  
 

Code :
  1. Function FichDetailZone(fichierCSV, Intervenant As String)
  2.     Dim MonAccess As New access.Application
  3.     Dim oTbl As DAO.TableDef
  4.    
  5.     MonAccess.OpenCurrentDatabase "C:...\Tables-20_07_2009.mdb"
  6.     MonAccess.DoCmd.TransferText acImportDelim, "Schema.ini", "DetailZG_" & Intervenant, cheminCSV & fichierCSV, True   
  7. MonAccess.Quit acQuitSaveNone
  8.     Set MonAccess = Nothing
  9.     Set oTbl = CurrentDb.CreateTableDef("DetailZG_" & Intervenant)
  10.     oTbl.Connect = "MS Access;DATABASE=" & "C:\...\Tables-20_07_2009.mdb"
  11.     oTbl.SourceTableName = "DetailZG_" & Intervenant
  12.     CurrentDb.TableDefs.Append oTbl
  13. End Function


 
mon fichier .ini, qui s'appelle Schema.ini:  

Code :
  1. [*.csv]
  2. ColNameHeader=True
  3. CharacterSet=ANSI
  4. Format=FixedLength
  5. Col1=Type d'intervenant Char Width 50
  6. Col2=Identifiant Mercure de l'intervenant Integer
  7. Col3=Identifiant Mercure du Domaine Char Width 50
  8. Col4=Identifiant Mercure de la Compétence Char Width 50
  9. Col5=Identifiant Mercure de la Spécialité élémentaire Char Width 50
  10. Col6=Marque Char Width 50
  11. Col7="Date début convention" Date
  12. Col8="Date fin convention" Date
  13. Col9=Indicateur Spécialité principale Char Width 50
  14. Col10="Date début convention zone géographique" Date
  15. Col11="Date fin convention zone géographique" Date
  16. Col12=Code Insee Commune Char Width 50
  17. Col13=Code postal Char Width 50
  18. Col14=Code pays Char Width 50
  19. Col15=Seuil de mission (min) Char Width 50
  20. Col16=Seuil de mission (max) Char Width 50
  21. Col17=Indicateur Passage Lundi Char Width 50
  22. Col18=Indicateur Passage Mardi Char Width 50
  23. Col19=Indicateur Passage Mercredi Char Width 50
  24. Col20=Indicateur Passage Jeudi Char Width 50
  25. Col21=Indicateur Passage Vendredi Char Width 50
  26. Col22=Indicateur Passage Samdi Char Width 50
  27. Col23=Indicateur Passage Dimanche Char Width 50


 
ce fichier d'importation est utilisé sur tous els fichiers csv du répetoir c'est pour ça que j'ai mis *.csv au début!  
 
HELP!!  
merci beaucoup! ;)


Message édité par mmmxtina le 21-07-2009 à 10:36:41
mood
Publicité
Posté le 21-07-2009 à 10:35:33  profilanswer
 

n°1907135
SuppotDeSa​Tante
Aka dje69r
Posté le 21-07-2009 à 11:26:47  profilanswer
 

Bonjour
 
Pas besoin du schema.ini pour exporter en .csv
Vu que les .csv sont délimités.
 
Le plus simple, c'est que tu le fasses une premiere fois manuellement. Tu exportes ton fichier en .csv et tu enregistres le Format. Ensuite a la place de ton "schema.ini" tu mets le nom de ton format d'export.
 
Aucun souci chez moi, ca m'exporte bien ma table test de ma base toto.mdb en toto.csv

Code :
  1. Sub toto()
  2.     A = FichDetailZone("C:\Toto.csv", "uu" )
  3. End Sub
  4. Function FichDetailZone(fichierCSV, Intervenant As String)
  5.     Dim MonAccess As New Access.Application
  6.  
  7.  
  8.     MonAccess.OpenCurrentDatabase "C:\toto.mdb"
  9.     MonAccess.DoCmd.TransferText 2, , "test", fichierCSV, True
  10.     MonAccess.Quit acQuitSaveNone
  11.     Set MonAccess = Nothing
  12. End Function


---------------
Soyez malin, louez entre voisins !
n°1907143
mmmxtina
Posté le 21-07-2009 à 11:37:12  profilanswer
 

Bonjour dje69r!
 
je sais pas si j'ai été assez explicite:
j'ai 2 bases de données, A et B.
A pilote la bd B, le code ci dessu est dans A.
Alors A, ouvre B et lui dit d'imoorter ems fichiers csv avec un format d'importation précis. d'où le "MonAccess.DoCmd.TransferText" au lieu du "DoCmd.TransferText". donc c'est lancé à partir de A mais les actions effectuée sont sur B.
 
J'avais aussi enregistré un format d'exportation, mais comme celui-ci est contenu dans A, acces me lance une erreur me disant que ce format d'importation est introuvable dans B.
 
Pour ton test est-ce-que tu était dans cette configuration?
parceque hez moi ça ne fonctionne pas comme ça, c'est pour ça que 'jai voulu créer un fichier .ini.
 
merci beaucoup

n°1907149
SuppotDeSa​Tante
Aka dje69r
Posté le 21-07-2009 à 11:48:02  profilanswer
 

Zeeen appuies doucement sur les touches pour ne pas en louper :p
 
Et oui j'avais bien compris l'histoire des deux bases, sauf que moi j'ai fait un essai avec un export. Mais avec l'import ca marche de la meme maniere, mais il faut enlever le schema.ini
 
Je viens de refaire l'essai :
 

Code :
  1. Sub toto()
  2.     A = FichDetailZone("C:\toto.csv", "uu" )
  3. End Sub
  4. Function FichDetailZone(fichierCSV, Intervenant As String)
  5.     Dim MonAccess As New Access.Application
  6.  
  7.     MonAccess.OpenCurrentDatabase "C:\toto.mdb"
  8.     MonAccess.DoCmd.TransferText acImportDelim, , "test", fichierCSV, True
  9.     MonAccess.Quit acQuitSaveNone
  10.     Set MonAccess = Nothing
  11. End Function

J'ai bien ma table test qui se créé dans ma base externe toto.mdb à partir du fichier toto.csv
 
Si tu as la possibilité envoie moi ton fichier csv que je tente de l'importer (mon mail est dns mon profil)
 
 
Edit : Meme question que sur l'autre post ou j'ai repondu, quelle version d'Access ?


Message édité par SuppotDeSaTante le 21-07-2009 à 11:56:14

---------------
Soyez malin, louez entre voisins !
n°1907204
mmmxtina
Posté le 21-07-2009 à 14:01:05  profilanswer
 

J'ai la version Microsoft Access 2002 SP3 (j'ai regardé ça dans A propos d'Access...
c'est vraime,t bizarre, ça veut pas fonctionner chez moi!!!
argh!
 
je ne peux pas t'envoyer mes fichiers, je suis en stage en entreprise.  
car j'ai testé avec le parametrage si je le fais sur ma base, ça marche, mais si c'est l'autre base ça marche pas!! argh!
 
le code c'est :
 
Function FichDetailZone(fichierCSV, Intervenant As String)
    Dim MonAccess As New access.Application
    Dim oTbl As DAO.TableDef
     
    MonAccess.OpenCurrentDatabase "C:\Documents and Settings\gf3323\Bureau\ExtractMercure\Tables-21_07_2009.mdb"
    MonAccess.DoCmd.TransferText acImportDelim, "Importation_csv", "DetailZG_" & Intervenant, _
        fichierCSV, True
    MonAccess.Quit acQuitSaveNone
    Set MonAccess = Nothing
 
    'Set oTbl = CurrentDb.CreateTableDef("DetailZG_" & Intervenant)
    'oTbl.Connect = "MS Access;DATABASE=" & "C:\Documents and Settings\gf3323\Bureau\ExtractMercure\Tables-21_07_2009.mdb"
    'oTbl.SourceTableName = "DetailZG_" & Intervenant
    'CurrentDb.TableDefs.Append oTbl
 
End Function
 
je vois vraiment pas la différence avec le tien, ça plante au niveau de "Importation_csv", alors que quand j'utilise "Importation_csv" pour importer dabs la base A, ça fonctionne niquel!!

n°1907205
mmmxtina
Posté le 21-07-2009 à 14:02:21  profilanswer
 

c'est plus agréable à lire comme ça:
 

Code :
  1. Function FichDetailZone(fichierCSV, Intervenant As String)
  2.     Dim MonAccess As New access.Application
  3.     Dim oTbl As DAO.TableDef
  4.    
  5.     MonAccess.OpenCurrentDatabase "C:\Documents and Settings\gf3323\Bureau\ExtractMercure\Tables-21_07_2009.mdb"
  6.     MonAccess.DoCmd.TransferText acImportDelim, "Importation_csv", "DetailZG_" & Intervenant, _
  7.         fichierCSV, True
  8.     MonAccess.Quit acQuitSaveNone
  9.     Set MonAccess = Nothing
  10.     'Set oTbl = CurrentDb.CreateTableDef("DetailZG_" & Intervenant)
  11.     'oTbl.Connect = "MS Access;DATABASE=" & "C:\Documents and Settings\gf3323\Bureau\ExtractMercure\Tables-21_07_2009.mdb"
  12.     'oTbl.SourceTableName = "DetailZG_" & Intervenant
  13.     'CurrentDb.TableDefs.Append oTbl
  14. End Function


n°1907218
mmmxtina
Posté le 21-07-2009 à 14:15:15  profilanswer
 

trop bizarre!!!
ça fonctionne tu as raison!!!
j'avais pas bien vu ce que tu avais fait, tu n'as pas du tout paramétré les options d'importation en fait!
 
bon le problème c'est que quand c'est pas paramétré ya une colonne qui s'importe mal, car la plupart des éléments de cette colonne sont des entier, mais certains éléments sont moitié text-moitié entier..
du coup access la parametre direct en entier long, et ya des informations qui ne sont aps copié du coup..
 
comment faire... tu as une idéee?
merci (je me rapelle c'est surtout pour ça que j'avais crée mon Importation_csv)

n°1907227
SuppotDeSa​Tante
Aka dje69r
Posté le 21-07-2009 à 14:24:56  profilanswer
 

Un exemple de ce que contient cette colonne ?


---------------
Soyez malin, louez entre voisins !
n°1907234
mmmxtina
Posté le 21-07-2009 à 14:27:44  profilanswer
 

par exemple:
 
37233
2B033
2B096
83069
 
la pluspart c'est que du chiffre, mais sur 6000, tu peu en trouver une bonne centaine qui sont mélangé chiffre et lettre.

n°1907235
mmmxtina
Posté le 21-07-2009 à 14:29:54  profilanswer
 

ya que cette colonne qui emrde sinon ça va comme sur des roulettes, mais el pb, c'est que c'est quand mm important...
tu as essayé avec un echantillon dans ce genre?
car comme il ya enormément de ligne Access, regarde surement els premieres, et pense pas qu'à la 1500e ligne y aura une lettre, là ca genere des erreurs (ca plante pas heureusement, mais ca ne recopie pas l'information, et j'en n'ai besoin malheureusement)..

mood
Publicité
Posté le 21-07-2009 à 14:29:54  profilanswer
 

n°1907258
SuppotDeSa​Tante
Aka dje69r
Posté le 21-07-2009 à 14:47:55  profilanswer
 

Oui je vois le souci.
 
Dans ta base de départ, vois tu la table nommée MSysIMEXSpecs ?
 
Si ce n'est pas le cas, tu vas dans Outils, Option, Affichage, et tu coches Objets masqués et Objets système
 
Et dis moi combien tu as d'enregistrement dans cette table, et regarde si tu as le nom de ton format dans le champ SpecName
 
 
Je t'explique la finalité :
 
Ton format est stocké dans cette table.
Tu l'exportes en Toto
Une requete ajout pour l'ajouter a la table MSysIMEXSpecs de ta base distante (si il n'y est pas deja)
Tu importes avec le format prédéfini.


Message édité par SuppotDeSaTante le 21-07-2009 à 14:49:44

---------------
Soyez malin, louez entre voisins !
n°1907290
mmmxtina
Posté le 21-07-2009 à 15:50:17  profilanswer
 

re, désolée de répondre que maintenant, j'avais lan cé mon appli, je ne pouvais pas utilisé access.
 
alors j'ai fais ce que tu as dit et j'ai bien mon "Importation_csv "dans kla table MSysIMEXSpecs.
 
Par contre je n'ai aps compris, tu veux que je "l'importe en Toto?"
 
Tu peux m'expliquer comment on fait?
merci beaucoup!!!

n°1907293
SuppotDeSa​Tante
Aka dje69r
Posté le 21-07-2009 à 15:57:41  profilanswer
 

Toto c'etait le nom d'une table a la con.
 
Tu exportes ta table MSysIMEXSpecs de ta base1 en toto dans ta base2. Tu sais le faire vu que tu exportes deja des tables dans ton autre base.
Dans ta base2, tu ajoutes l'enregistrement de la table toto dans ta table MSysIMEXSpecs (Mais ne le faire qu'une fois, donc tester si la table est vide ou pas)
 
Sur ta base2 tu as donc maintenant ton format d'import. Il te suffit de mettre en parametre le nom de ton format d'import (specifié dans la colonne SpecName)

Code :
  1. MonAccess.DoCmd.TransferText acImportDelim, Ce_Qui_Apparait_Dans_NameSpec, "test", fichierCSV, True


 
En gros tu te créés un format d'import dans ta base1 que tu exportes dans ta base2 pour t'en servir pour importer ton csv


Message édité par SuppotDeSaTante le 21-07-2009 à 15:59:07

---------------
Soyez malin, louez entre voisins !
n°1907295
mmmxtina
Posté le 21-07-2009 à 16:03:17  profilanswer
 

c'est ouf ça fonctionne pas, j'hallucine!!!!
 
j'ai fais ce que tu as dis j'ai constaté que dans ma deuxieme base de données je n'avais pas la table dont tu m'a parlé, donc je l'ais carrément exporter sur le mm nom!
sans succès, ça me rend malade! je comprends pas!

n°1907300
mmmxtina
Posté le 21-07-2009 à 16:16:37  profilanswer
 

désolée....désolée...
ça fais depuis telment longtemps que je rame je ne comprend spas pourquoi ça me dépasse!!!
 
j'ai repris le bout de code sur un fichier access, tout neuf, sans succès
 
je te montre le code:
 

Code :
  1. Function test()
  2.     Dim MonAccess As New Access.Application
  3.    
  4.     MonAccess.OpenCurrentDatabase "C:\Documents and Settings\gf3323\Bureau\Nouveau dossier\test2.mdb"
  5.     DoCmd.CopyObject "C:\Documents and Settings\gf3323\Bureau\Nouveau dossier\test2.mdb", , acTable, "MSysIMEXSpecs"
  6.     MonAccess.DoCmd.TransferText acImportDelim, "Importation_csv", "DetailZG", _
  7.         "C:\Documents and Settings\gf3323\Bureau\BaseDonnees\gf1293_20090619152944.csv", True
  8.         '"Importation_csv"
  9.     MonAccess.Quit acQuitSaveNone
  10.     Set MonAccess = Nothing
  11. End Function


 
la table est bien copiée dans la base de données, au moment de la lancé ça me dit qu'il ne trouve pas Importation_csv.
donc j'ouvre labase de données test2, jécirs le code  

Code :
  1. DoCmd.TransferText acImportDelim, "Importation_csv", "DetailZG", _
  2.         "C:\Documents and Settings\gf3323


là ça marche (forcément)
 
Je relance le premier code,à partir dela base de données 1, et là ça marche..
 
mais ca ne fonctionne que si je fe fai le test au moins une fois à partir de la 2e BD...
je suis désespérée...
c'est un automatisme que je veux faireet là ça m'a l'air compromis.

n°1907301
mmmxtina
Posté le 21-07-2009 à 16:18:09  profilanswer
 

il manque un petit bout de code, j'ai mal fais mon copier coller... hi!

n°1907314
mmmxtina
Posté le 21-07-2009 à 16:37:45  profilanswer
 

Bon j'ai trouvé la solution, en fait, il faut fermé la base de donnée, et la rouvrir (la bse numero 2) afin quelle réalise qu'elle peut utilisée les nouvelles données.
 
donc j'ouvre je copie la table, je ferme la base de données.
je la réouvre et j'importe mes fichiers les doigts dans le nez!
merci beaucoup pour ton aide en tout cas!
bonne soirée!

n°1907319
SuppotDeSa​Tante
Aka dje69r
Posté le 21-07-2009 à 16:48:30  profilanswer
 

mmmxtina a écrit :

donc j'ouvre je copie la table, je ferme la base de données.

Que je ne m'endorme pas idiot, tu parles bien de la table MSysIMEXSpecs là ?  :pt1cable:  
 

mmmxtina a écrit :

merci beaucoup pour ton aide en tout cas!  
bonne soirée!

Pas de sushi, le forum c'est fait pour ca.  :jap:  
 

mmmxtina a écrit :

j'importe mes fichiers les doigts dans le nez!

Alors ca c'est vraiment pas beau pour une fille !!!!  :o  


---------------
Soyez malin, louez entre voisins !
n°1907512
mmmxtina
Posté le 22-07-2009 à 09:52:50  profilanswer
 

Bonjour dje69r et désolée de ne répondre que maintenant!
 

Citation :

Que je ne m'endorme pas idiot, tu parles bien de la table MSysIMEXSpecs là ?


 
oui oui c'est bien celle là, et en plus j'ai ajouté deux autres tables qui ne sont pas présentes quand on crée une base de données et là ça fonctionne vraiment niquel.
 
Le code:

Code :
  1. DoCmd.CopyObject nameTable, , acTable, "MSysIMEXSpecs"
  2. DoCmd.CopyObject nameTable, , acTable, "MSysIMEXColumns"
  3. DoCmd.CopyObject nameTable, , acTable, "MSysAccessXML"


 
la table MSysIMEXColumns définies le nom de la premieres lignes ainsi que le type de variables.
la table MSysAccessXML je ne sais pas trop mais je les prises au cas où.
 
donc du coup c'est bon ça fonctionne une fois cela copié et la table fermée pour l'enregistrement. on la réouvre et ça roule!
 

Citation :

mmmxtina a écrit :
 
 
j'importe mes fichiers les doigts dans le nez!
 
 
 
Alors ca c'est vraiment pas beau pour une fille !!!!  :o  
 


 
C'est vrai mais j'adore cette expression elle me faire rire!
merci beaucoup de ton aide! ;)

n°1907544
SuppotDeSa​Tante
Aka dje69r
Posté le 22-07-2009 à 11:02:14  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Importer plusieurs csv sous access avec fichier .ini

 

Sujets relatifs
Creer une base de donnée ACCESS vbaLancement de plusieurs commandes avec FOR les unes après les autres
Tri d'un fichier[résolu]recherche dans un fichier encodé en utf8
Creation de fichier composé de plusieurs autresgros fichier excel copier et inserer des lignes
Aide sur traitement du fichierrécupération d'un fichier txt en tableau php
Importer fichier csv dans une table 
Plus de sujets relatifs à : Importer plusieurs csv sous access avec fichier .ini


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR