Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2010, 15h26   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 12
Points : 1
Points : 1
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
sylviobarca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 16h33   #2
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
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é
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 16h49   #3
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
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 :
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.
__________________
Ils comptent sur vous...

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.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 17h17   #4
Invité de passage
 
Inscription : décembre 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 12
Points : 1
Points : 1
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
sylviobarca est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h42.


 
 
 
 
Partenaires

Hébergement Web