Rechercher : dans
Par :

[VBA] fichier texte dans table Access

Dernière réponse le 13 fév 2007 à 17:30:00 _goni, le 12 fév 2007 à 14:41:40 
 Signaler ce message aux modérateurs

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

1

_goni, le 12 fév 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

2

blux, le 12 fév 2007 à 17:20:48
  • +1

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

3

_goni, le 12 fév 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

4

blux, le 13 fév 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

5

_goni, le 13 fév 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

6

_goni, le 13 fév 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

7

blux, le 13 fév 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

8

_goni, le 13 fév 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

9

blux, le 13 fév 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

10

_goni, le 13 fév 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

11

blux, le 13 fév 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

_goni, le 13 fév 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

_goni, le 13 fév 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

blux, le 13 fév 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

_goni, le 13 fév 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

blux, le 13 fév 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

_goni, le 13 fév 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

blux, le 13 fév 2007 à 15:50:52

T'as mis quoi exactement ?

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

http://www.connectionstrings.com/default.aspx?carrier=textfile

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

_goni, le 13 fév 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

blux, le 13 fév 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

_goni, le 13 fév 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

blux, le 13 fév 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

_goni, le 13 fév 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

blux, le 13 fév 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

_goni, le 13 fév 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

blux, le 13 fév 2007 à 17:19:55
  • +2

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

 _goni, le 13 fév 2007 à 17:30:00
  • +1

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