rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut :

[VBA] fichier texte dans table Access

Posté par _goni, le lundi 12 février 2007 à 14:41:40
Bonjour,
Je dois trouver un moyen pour pondre un petit bout de code qui me permetterait de stocker un fichier texte dans une table Access. Ca doit pas être trop compliqué vu que le nombre de champs est fixe et que j'ai un ";" (point virgule) comme séparateur de champ. Le nombre de ligne par contre n'est pas fixe.

Pouriez vous me diriger vers un site qui m'explique comment faire ou me donner ce petit bout de code s'il vous plait ?

Merci d'avance. Benoit.
Enlèves tes doigts sales de mon clavier.
Configuration: Windows XP
Internet Explorer 6.0
Répondre à _goni  Signaler ce message aux modérateurs Aller au dernier message

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le lundi 12 février 2007 à 16:40:35
Je suis désolé de faire remonter mon message mais j'ai vraiment besoin d'aide pour ce problème. Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

3


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
blux, le lundi 12 février 2007 à 17:20:48
Salut,

il faut déjà commencer par créer un format d'importation (menu fichier/données externes/importer, aller dans la procédure et enregistrer le format d'import). C'est le truc le plus ch... à faire car il faut presque aller au bout de la procédure...

On peut ensuite récupérer le contenu d'un fichier et le mettre dans une table avec :
DoCmd.TransferText acImportDelim, "nom_du_format_d_import", "nom_de_la_table_destination", "c:\monfichier.txt"
Ca irait ?
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le lundi 12 février 2007 à 17:53:12
En fait, l'idéal serait que ce soit entièrement automatisé donc aucune manip manuel du fichier text. C'est possible ? Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 08:38:14
C'est ce que j'ai dit, ou alors je n'ai pas été clair...

- tu crées un format d'import, et tu l'enregistres, une fois pour toutes
- tu t'en sers avec du VBA autat de fois que tu veux

Pas de manipulation du fichier texte...

Ca te va ? Ou j'ai rien compris... :-)
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 09:25:37
Salut,
J'avais pas compris le coté permanant de la manip à effectuer. Je vais mettre ca en place ce matin. En tout cas, je te remercie pour ton aide et je te tiens au courant Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 10:13:31
Je n'arrive pas à créer un format d'importation. Sais tu ou je peux trouver la marche à suivre ? Je cherche sur Goofle en meme temps Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 10:35:41
- Fichier/données externes/importer
- tu choisis ton fichier .txt sur disque
- il t'ouvre l'assistant d'importation
- et là, tu cliques sur 'avancé'
- tu saisis tes paramètres (séparateurs, type de données, champs à ne pas importer...)
- tu cliques sur 'enregistrer sous', tu donnes un nom
- tu reprends le nom dans ton VBA

Si tu souhaites ensuite réouvrir/modifier/renommer le format d'import, tu cliques sur le bouton 'paramètres' quand tu es dans les spécifications...
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 10:47:34
Le problème c'est qu'il ne m'ouvre pas l'assistant. Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 10:58:04
Réinstaller ACCESS avec les assistants par défaut ?
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 11:01:30
Je peux pas, c'est ma boite qui gère l'installation d'access et ça leur prendrait deux semaines pour me faire ça. Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 11:23:19
Je viens de jeter un oeil dans l'aide, ils parlent d'un fichier schema.ini qu'on peut mettre dans le même rép que le fichier à importer.

Des infos ici :

http://office.microsoft.com/fr-fr/access/HP010321661036.aspx­
http://www.dotnet-fr.org/sections.php3?op=viewarticle&artid=­59
http://cerig.efpg.inpg.fr/dossier/analyse-trafic/page09.htm
http://www.vbfrance.com/...

Après, je peux plus rien pour toi ! :-)
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 11:35:46
Si je te donne un exemple de fichier texte, pourais tu me guider dans ma démarche ?

Disons que mon fichier texte s'appel : bal_GL_IFRS_passif_bilan_provision.txt

et ce fichier ce present sous la forme suivante : EXERCICE;MEGA ENTITE;COMPTE ASSOCIE;Nom COMPTE ASSOCIE;PRODUIT Cnp;Nom PRODUIT;TARIF Cnp;ETAT Cnp;Solde N 12 avec 998 BASE (R+P)

Le séparateur de champ est le ";" Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 11:42:01
J'aimerais bien comprendre ce que je fais en fait. Et sur tes liens, je ne capte rien. Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 12:27:55
Ben on décrit comment est le fichier :

[Import_MonFichier.txt]
ColNameHeader = False
CharacterSet = ANSI
Format = delimited(;)
Col1="exercice" integer width 4
Col2="mega entite" char width 50
Col3="compte associe" integer width 8
etc etc...

Ici :
- pas d'entête de colonne
- codage ANSI
- format délimité avec ; comme séparateur
- description de chaque colonne (nom, type, taille)

Et pour l'import tu fais une requête...

http://www.vbfrance.com/...
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 13:47:39
Voila ce que j’ai fais
.
Shema.ini :
[Import_MonFichier.txt] 
ColNameHeader = False 
CharacterSet = ANSI 
Format = delimited(;)
Col1="EXERCICE" integer width 4 
Col2="MEGA ENTITE" char width 50 
Col3="COMPTE ASSOCIE" char width 50 
Col4="Nom COMPTE ASSOCIE" char width 50 
Col5="PRODUIT Cnp" char width 50 
Col6="Nom PRODUIT" char width 50
Col7="TARIF Cnp" char width 50 
Col8="ETAT Cnp" char width 50 
Col9="Solde N 12 avec 998 BASE (R+P)" char width 50


Code d’exécution :
Set db = CurrentDb()
db.Execute _
"SELECT * INTO " & maTable & " FROM [Text;;;DATABASE=B:\A\B\FC\APPLI_FC25\Appli annexe IFRS;].[bal_GL_IFRS_passif_bilan_provision.txt];", _
dbFailOnError
db.TableDefs.Refresh


Erreur :
Erreur d'exécution '3141':
Dans l'instruction SELECT, un mot réservé ou un argument est mal orthographié ou absent, ou la ponctuation est incorrecte


Je ne vois pas trop ce que je fais de mal. Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 15:21:35
Je verrais bien un loup avec :

[Text;;;DATABASE="B:\A\B\FC\APPLI_FC25\Appl...

Je remplacerais par :

[Text;;;DATABASE=B:\A\B\FC\APPLI_FC25\Appli annexe\bal_GL_IFRS_passif_bilan_provision.txt";]

ou un truc comme ça, voire une chaine qui contient le nom du fichier, pour ne pas avoir à gérer les "

Str = "B:\A\B\FC\APPLI_FC25\Appli annexe\bal_GL_IFRS_passif_bilan_provision.txt"
[Text;;;DATABASE=" & Str & ";]"
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 15:40:13
Je tombe à ce moment la sur une erreur :
Erreur d'exécution '3078':
Le moteur de base de données Microsoft Jet ne peut pas trouver la table ou la requête source 'False'. Assurez-vous qu'elle existe et qu'elle est correctement orthographiée. 
Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 15:50:52
T'as mis quoi exactement ?

Parce que j'ai dû oublier un "...

http://www.connectionstrings.com/default.aspx?carrier=textfi­le

http://msdn.microsoft.com/...
Chez Krosoft, y disent qu'il faut mettre le nom du fichier en premier dans schema.ini...
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 15:54:52
le code :
    Dim Str As String
    Set db = CurrentDb()
    db.Execute _
    Str = "B:\A\B\FC\APPLI_FC25\Appli annexe\bal_GL_IFRS_passif_bilan_provision.txt"
    [Text;;;DATABASE=" & Str & ";] " "
    db.TableDefs.Refresh


Le .ini :
[Import_MonFichier.txt] 
ColNameHeader = "False"
CharacterSet = ANSI 
Format = delimited(;)
textDelimiter="none"
Col1="EXERCICE" char width 50
Col2="MEGA ENTITE" char width 50
Col3="COMPTE ASSOCIE" char width 50
Col4="Nom COMPTE ASSOCIE" char width 50
Col5="PRODUIT Cnp" char width 50
Col6="Nom PRODUIT" char width 50
Col7="TARIF Cnp" char width 50
Col8="ETAT Cnp" char width 50
Col9="Solde N 12 avec 998 BASE (R+P)" char width 50
Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 16:03:55
Ca ne peut pas marcher, tu n'as pas de select et le nom du fichier doit être dans le schema.ini...
Dim Str As String
Str = "B:\A\B\FC\APPLI_FC25\Appli annexe\bal_GL_IFRS_passif_bilan_provision.txt"
Set db = CurrentDb()
db.Execute _
"SELECT * INTO " & maTable & " FROM [Text;;;DATABASE=" & str &"];", _
dbFailOnError
db.TableDefs.Refresh
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 16:15:46
Je retombe sur l'erreur précédente :

Erreur d'exécution '3141':
Dans l'instruction SELECT, un mot réservé ou un argument est mal orthographié ou absent, ou la ponctuation est incorrecte
Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

22


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 16:43:22
Dim Str As String
Str = "B:\A\B\FC\APPLI_FC25\Appli annexe IFRS;].[bal_GL_IFRS_passif_bilan_provision.txt];"
Set db = CurrentDb()
db.Execute _
"SELECT * INTO " & maTable & " FROM [Text;;;DATABASE=" & str , _
dbFailOnError
db.TableDefs.Refresh
Avec le nom du fichier dans schema.ini
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

23


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 16:47:05
Toujours la même erreur.

schema.ini :
[bal_GL_IFRS_passif_bilan_provision.txt] 
ColNameHeader = "False"
CharacterSet = ANSI 
Format = delimited(;)
textDelimiter="none"
Col1="EXERCICE" char width 50
Col2="MEGA ENTITE" char width 50
Col3="COMPTE ASSOCIE" char width 50
Col4="Nom COMPTE ASSOCIE" char width 50
Col5="PRODUIT Cnp" char width 50
Col6="Nom PRODUIT" char width 50
Col7="TARIF Cnp" char width 50
Col8="ETAT Cnp" char width 50
Col9="Solde N 12 avec 998 BASE (R+P)" char width 50
Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

24


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 16:49:50
Je sèche...
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

25


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
_goni, le mardi 13 février 2007 à 16:53:26
Tu sèche tout de même bien après moi.
Je te remercie pour tout ce temps que tu viens de passer pour moi. C'est vraiment cool et ça m'avance déjà beaucoup.
Merci. Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni

26


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
blux, le mardi 13 février 2007 à 17:19:55
J'aime pas rester sur un échec..
J'ai testé chez moi, c'est les ordres sql qui vont pas !!! J'ai pas regardé assez finement :
db.Execute "INSERT INTO import SELECT * FROM [Text;;;DATABASE=C:\Documents and Settings\moi\Mes documents;].[import.txt];", dbFailOnError
Ca marche nickel !
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

27


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
 _goni, le mardi 13 février 2007 à 17:30:00
Je dirais juste qu'il n'y a pas assé de mecs comme toi.
Peace et merci Benoit.
Enlèves tes doigts sales de mon clavier.
Répondre à _goni