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 d'import de fichier CSV [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut Problème d'import de fichier CSV
    Bonjour à tous,

    J'essaie d'importer un fichier CSV, via interface de navigation, dans une nouvelle table dynamique de ma base Access.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferText acImportDelim, "", "IMPORTCSV", Forms![General_ter]![EmbeddedForm]![Text78], True, ""
    ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferText acImportDelim, , "IMPORTCSV", Forms![General_ter]![EmbeddedForm]![Text78], True

    Malheureusement, à chaque tentative, je me retrouve avec une erreur, et notamment (notamment, parce que c'est celle que je ne comprends pas) :
    "3709: The search key was not found in any record"
    De ce que je comprends à priori de cette erreur, c'est qu'au moment de transférer les données du CSV, il n'arrive pas à retrouver le nom de la colonne dans la table de destination (problème de mappage?) ou carrément qu'il ne trouve pas la table de destination.

    Quoi qu'il en soit, je n'arrive pas à importer le fichier et j'avoue que je suis un peu pommé. Si quelqu'un a une idée...


    PS: par ailleurs, par curiosité, j'ai testé l'import de fichier texte via l'assistant (option qui ne peut être prise en compte, en vue d'une application finale client).
    Mais j'ai eu des erreurs de format: "Type Conversion Failure" et "Row Truncation".
    J'imagine que pour "Row Truncation", c'est que la valeur est trop longue, mais pour "Type Conversion Failure", je comprends pas. Si c'est un import depuis Excel, je le comprendrais, mais là, la donnée vient d'un fichier texte: comment une telle erreur peut avoir lieu?

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Bonjour

    L'écriture de ton TransfertText n'est pas bonne.
    expression.TransferText(TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)
    Commence par reprendre l'aide, en particulier pour l'argument FileName (tu y fais référence à un champ de formulaire...???)

    titi95
    Un problème bien posé est à moitié résolu

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    Ben justement, j'ai fait ça à partir de l'aide, et je vois pas où est le problème...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DoCmd.TransferText 
    acImportDelim, --->TransferType
    "", ---> SpecificationName
    "IMPORTCSV", --->TableName
    Forms![General_ter]![EmbeddedForm]![Text78], ---> champ qui contient le path d'un fichier (FileName, donc)
    True, ---> HasFieldName
    "" ---> HTMLTableName
    Dois-je copier la valeur du champ dans une variable de type string?
    Y a t-il un problème au niveau de SpecificationName?

  4. #4
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![General_ter]![EmbeddedForm]![Text78]
    [EmbeddedForm] est un sous-formulaire de [General_ter] ?

    titi95
    Un problème bien posé est à moitié résolu

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Oui, c'est ça.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    J'avais donc répondu trop vite sur l'écriture du paramètre FileName !!!

    Peux-tu préciser les structures de la table et du fichier CSV (Champs, types) ?

    titi95
    Un problème bien posé est à moitié résolu

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Pas de problème

    Comme je le dis au début, l'importation du CSV se ferait sur une nouvelle table dynamique.
    C'est à dire qu'on n'est pas sensé connaître la structure de la table, qui sera créée selon ce qui est importé.
    A priori, pour donner une idée, il devrait y avoir environ 80 colonnes... (!!)
    Quant au type des champs, j'aimerais autant qu'ils soient tous de types string (comme on devrait l'attendre d'un fichier texte, non?).
    Ai-je répondu à ta question?

  8. #8
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Vraiment désolé, mais mes essais fonctionnent parfaitement et je n'arrive pas à reproduire l'erreur 3709.

    L'affichage de l'erreur se fait bien sur le Transfertext (ligne surlignée en jaune) ?
    As-tu du code juste avant le Transfertext ? Lequel ?

    titi95
    Un problème bien posé est à moitié résolu

  9. #9
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Non, j'ai juste les déclarations et:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    On Error GoTo controlerror
     
    'Check if a file has been selected
    If IsNull(Forms![General_ter]![EmbeddedForm]![Text78].Value) Or Forms![General_ter]![EmbeddedForm]![Text78].Value = "" Then
        MsgBox "Please browse and select the file you want to import."
    Else




  10. #10
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Ah, j'ai cru voir écrit quelque part que la librairie ADOX est indispensable...
    Est-ce une piste?
    J'ai regardé dans Tools > References, et je ne vois aucune librairie ADOX. Il y a des librairies ADO, par contre... J'avoue que je maîtrise pas la gestion des librairies... Ça te dit quelque chose?

  11. #11
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    J'ai un doute sur la ligne qui génère l'erreur 3709 ; Transfertext ?
    Je repose donc ma question :
    L'affichage de l'erreur se fait bien sur le Transfertext (ligne surlignée en jaune) ?
    librairie ADOX
    ADO, DAO... je ne vois pas pour Transfertext.

    Tu a répondu qu'il n'y avait pas de code avant, mais des déclarations. Lesquelles ?
    Donc du code après ? Lequel ?

    titi95
    Un problème bien posé est à moitié résolu

  12. #12
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Oui, oui, l'erreur intervient bien à la lecture de cette ligne...

    Les déclarations sont des déclarations simples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim lExists As Long
    Dim sDATE_TEMP As String
    Dim sDATE_TEMP1 As String
    Dim sRetvalue As String
    Dim oDb1 As DAO.Database
    Dim oRst As DAO.Recordset
    Dim db As Database
    Dim iPosSlash As Byte 'Position of the last / in the file's path
    Dim i, i2 As Byte 'Loop var
    Dim sPath As String 'File's path
    Dim sFileName As String 'File's name
    Dim cChar As String 'Character got
    Dim iPosDot As Byte 'Position of the dot in the file's name
    Et après il y a beaucoup de code, mais qui n'a jamais prosé problème.

  13. #13
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Oui, oui, l'erreur intervient bien à la lecture de cette ligne...
    Moipacomprendreskispasse ! ???

    l'importation du CSV se ferait sur une nouvelle table dynamique
    Tu la supprimes bien avant chaque essai ?

    titi95
    Un problème bien posé est à moitié résolu

  14. #14
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Oui, oui, je supprime si elle existe.
    Bon, je comprends vraiment pas.

    Je vais voir si je peux pas créer un algo de barbare qui remplacerait cette fonction, mais bon...
    Sinon, la piste de la library est définitivement morte?

    Bon, si quelqu'un à une autre idée, ça m'aiderait beaucoup!

    titi, merci pour ton temps et tes efforts!

  15. #15
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2008
    Messages : 152
    Points : 110
    Points
    110
    Par défaut
    Bonjour BornToBe

    Je t'ai répondu par mail perso. Sans rentré dans les détails mon code qui fonctionne sous Access 2003 est le suivant, attention il faut d'abord supprimer la table (Table) si elle existe, sinon cela ne marchera pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DoCmd.TransferText acImportDelim, , Table, LeFichier, True   ' lecture TXT et creation nouvelle table
    LibereTable (NameFileTableError)                             ' Supprime table eventuelle d'erreur jointe
    Table = nom de la table à créer, LeFichier nom du fichier texte ou CSV à importer.
    Voila essai, et tiens moi au courant

  16. #16
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Bonjour Jean-Pierre, et merci beaucoup pour ta réponse rapide

    Je vais pas pouvoir consulter mon email avant ce soir, vu que là où je bosse, l'accès est bloqué.
    Par contre, ce que tu me dis ici correspond à ce que j'ai fait, ou alors j'ai une grosse paille dans l'oeil comme ils disent en Espagne ^_^

    Comme je te l'ai dit dans le message perso, ce qui m'avait interpellé, dans ton post, c'est que tu avais dit qu'il fallait avoir les librairies ADOX.
    Peux-tu m'éclairer sur ce point, s'il te plaît?

  17. #17
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 143
    Points
    143
    Par défaut
    Bon, finalement, je me suis démerdé.

    Tout ceci était dû à un fichier CSV en mauvais état. Ce qui est assez curieux car il a été généré depuis Excel.
    Bref, j'ai dû monter une petite macro dans excel, pour forcer le formatage.
    En tatillonnant, j'ai trouvé le bon formatage, ai enregistré la spécification d'importation et fais l'importation en appelant cette spec.
    L'importation est maintenant nickel et sans erreur.

    Le prochain pas sera de voir si je peux utiliser cette macro depuis Access afin que l'utilisateur final n'ait pas à le faire (même si le contexte me permettrait de le lui imposer ^^).

    Le problème est donc résolu. And for the record:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferText acImportDelim, "spec", "IMPORTCSV", sFile, True

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'import de fichier CSV via LOAD DATA
    Par Aenur56 dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/06/2012, 15h03
  2. [AC-2007] problème d'import de fichier csv
    Par clao260 dans le forum Access
    Réponses: 1
    Dernier message: 07/08/2010, 14h05
  3. import de fichier CSV : problème de caractères accentués
    Par mouaa dans le forum Administration
    Réponses: 2
    Dernier message: 08/08/2007, 07h45
  4. [Conseil] Import de fichier CSV vers MySQL
    Par ShinJava dans le forum JDBC
    Réponses: 6
    Dernier message: 15/03/2005, 19h14
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 15h18

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