Exportation access vers fichiers txt au format Fixe

cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 - 20 janv. 2005 à 15:34
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 - 21 janv. 2005 à 18:42
Bonjour à Tous,

Après avoir bu une bonne dose de café, et ne sachant plus ou chercher
je vous crie à l'aide.

Voila j'ai composer ce code:

Function ExportationDelim()



Dim Champ1 As String
Dim Champ2 As String
Dim bds As Database, qdf As QueryDef
Dim chSQL As String


'Définition des variables
'Champ1 = [Texte1]
'Champ2 = [Texte2]


'Activation de la base de donnée en cours
Set bds = CurrentDb
bds.QueryDefs.Refresh


' Si la requête NouvelleRequête existe, la supprime.
For Each qdf In bds.QueryDefs
If qdf.Name = "NouvelleRequete" Then
bds.QueryDefs.Delete qdf.Name
End If
Next qdf

chSQL = "SELECT [Lettre Voiture].*"
chSQL = chSQL + " FROM [Lettre Voiture]"
chSQL = chSQL + " WHERE ((([Lettre Voiture].N°Livraison)=[Forms]![Livraison clients]![N°Livraison]));"


' Crée un objet QueryDef.
Set qdf = bds.CreateQueryDef("NouvelleRequete", chSQL)

DoCmd.TransferText acExportFixed = 5, "export.ini", "NouvelleRequete", "C:\EDF\TRANSPORT.TXT", True

Set bds = Nothing

Cela me crée ma nouvelle table requete . J'arrive à l'exporter au format CSV
mais au format longueur fixe je n'y arrive pas du tout

mon fichier export.ini

à cette tête la;

[TRANSPORT.TXT]
ColNameHeader=True
CharacterSet=ANSI
Format=FixedLength
Col1=N°Livraison Integer
Col2="Nb Cages URCG" Integer
Col3=N°transport Char Width 50
Col4=Heure_livraison Char Width 50
Col5=N°tournée Char Width 50
Col6="Date livraison" Date
Col7=Type Char Width 50
Col8="Poids des contenants" Integer
Col9="Date préparation" Date
Col10=Nom Char Width 50
Col11="Donneur d'ordre" Char Width 50
Col12=AdresseTr Char Width 50
Col13=CodePostalTr Char Width 50
Col14=VilleTr Char Width 50
Col15=TéléphoneTr Char Width 50
Col16=TélécopieTr Char Width 50
Col17=Commentaires LongChar Attribute 32
Col18=Société Char Width 80
Col19=Adresse Char Width 100
Col20="Code postal" Char Width 5
Col21=Ville Char Width 60
Col22=Téléphone Char Width 24
Col23=Portable Char Width 24
Col24="Nb rolls" Integer
Col25="Poids rolls" Integer
Col26="Nb palette" Integer
Col27="Poids palette" Integer
Col28="Nb 1/2 palette" Integer
Col29="Poids 1/2 palette" Integer
Col30="Nb tourets" Integer
Col31="N° roll 1" Integer
Col32="N° roll 2" Integer
Col33="N° roll 3" Integer
Col34="N° grille 1" Integer
Col35="N° grille 2" Integer
Col36="N° grille 3" Integer
Col37="Nb grilles" Integer
Col38="Nb Couronnes" Integer
Col39="Nb Longueurs" Integer
Col40="Nb Colis divers" Integer
Col41="Poids total" Integer
Col42="Poids global livraison" Integer
Col43=Commentaire Char Width 100
Col44=Contrôleur Char Width 50

Qui peut me dire ou j'ai fauté SVP.

de plus j'essaye désespérément de me débarassé des guillemets mais en vain

Merci d'avance à Tous

couf

10 réponses

cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
20 janv. 2005 à 20:22
En fait ,
Lorsque je fais une exportation au format CSV
cela fonctionne
je remplace la ligne

DoCmd.TransferText acExportFixed = 5, "export.ini", "NouvelleRequete", "C:\EDF\TRANSPORT.TXT", True

par
DoCmd.TransferText acExportDelim, , "NouvelleRequete", "C:\EDF\SERNAM.TXT", True

Le problème me direz vous? ou plus tôt les problèmes
1) je n'arrive pas à me débarassez des guillemets dans mon résulatat.
2) je ne trouve pas mon fichier shema.ini
2) il me faut faire un cacul style col45 = ent(col20/1000) (hum!!!!!!!)
bref cela me simplifie plus la vie en format fixe.
Donc ma nouvelle question est pensez vous que cela peut venir d'un
mauvais paramétrage de mon ODBC ?
qui me sert à faire mes exportations

Merci d'avance
couf
1
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
20 janv. 2005 à 16:00
Deja je ne comprend pas ta requete :

chSQL = "SELECT [Lettre Voiture].*"
chSQL = chSQL + " FROM [Lettre Voiture]"
chSQL = chSQL + " WHERE ((([Lettre Voiture].N°Livraison)=[Forms]![Livraison clients]![N°Livraison]));"

T'es sur du Nom de ta Table ce ne serait pas [N°Livraison]" plutôt ??

It@li@
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
20 janv. 2005 à 16:23
Pourquoi,
la requête fonctionne,
c'est l'exportation qui pose problème

C'est comme si je disais select * from [lettre voiture]
cela fonctionne bien car cela me crée ma requête ( query nouvellerequete) sur access

couf
0
screquer Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 juin 2006
20 janv. 2005 à 17:13
Bonjour,

D'après la doc, le fichier export.ini doit être situé dans le même répertoire que ton fichier txt "c:\edf\export.ini" ???

Si tu n'y arrives pas avec l'ordre Docmd.transfertext, essaie d'abord de l'exécuter en passant dans une macro !!!

Pour de débarrasser de tes guillemets dans tes noms de champs,

Col8="Poids des contenants" Integer
Col8=Poids_des_contenants Integer

Salut ...
Version d'Access ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
screquer Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 juin 2006
20 janv. 2005 à 17:16
Bonjour,

D'après la doc, le fichier export.ini doit être situé dans le même répertoire que ton fichier txt "c:\edf\export.ini" ???

Si tu n'y arrives pas avec l'ordre Docmd.transfertext, essaie d'abord de l'exécuter en passant dans une macro !!!

Pour de débarrasser de tes guillemets dans tes noms de champs,

Col8="Poids des contenants" Integer
Col8=Poids_des_contenants Integer

Salut ...
Version d'Access ??
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
20 janv. 2005 à 17:22
Salut,

Ton acExportFixed = 5 me semble bizarre pourquoi pas simplement acExportFixed ?

Cordialement, CanisLupus
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
20 janv. 2005 à 17:48
Salut à tous,
Je me rends compte que j'ai fait plein d'impair,
La première chose c'est que j'utilise access2000
La seconde c'est que le message d'erreur est :
Erreur d'execution '3061':
Trop peu de paramètre. 0 attendu.
Jai bien copié mon fichier export.ini dans mon Bon répertoire.
Je suis entrain de devenir fou a cause de cela,
je trouve rien sur le net pour mon msg d'erreur.

Encore Merci d'avance

couf
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
20 janv. 2005 à 19:08
Je viens de repenser à ta question,

tu ne fais pas de :
DoCmd.OpenQuery "NouvelleRequete"
après ton
Set qdf = bds.CreateQueryDef("NouvelleRequete", chSQL)

C'est peut-être normal, je n'y connais rien en VBA access 2000 mais essaie quand même.

Cordialement, CanisLupus
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
21 janv. 2005 à 14:14
Comme j'ai commencé à essayer de te répondre, ton prob m'a pris la tête. Alors j'ai fouillé partout sur le WEB sans trouver de solution très explicite, sauf un site en Allemand qui m'a mis sur la piste. Alors voilà, j'ai fini par faire un truc qui fonctionne chez moi (Access 97), à tester avec Access 2000 :

1 - Un clic sur ma table (Table1) pour la sélectionner
2 - J'ai utilisé l'assistant d'Access (menu Fichier et Enregistrer sous/Exporter) et j'ai fait comme si j'exportais manuellement :
- choix du type de fichier ("Fichier texte .....")
- choix du format (delimited ou fixed)
- pour la taille des champs j'ai laissé ce qui était proposé
- au dernier moment (quand le bouton Suivant est devenu grisé), un clic sur le bouton "Avancé" puis sur le bouton "Enregistrer sous". Là j'ai tapé "Export_Table1".
3 - J'ai testé le code suivant :
DoCmd.TransferText acExportFixed, "Export_Table1", "Table1", "c:\temp\essai.txt", True
et, bingo, ça marche !

A noter :
Je n'ai pas trouvé non plus de schema.ini, par contre les infos sur l'export se trouvent dans la table système d'Access "MSysIMEXSpecs".
Dans le fichier exporté, la 1ère ligne (si tu as mis true en fin d'instruction) contient les noms des champs mais séparés par des virgules. Les autres lignes sont en taille fixe. C à d que si un de tes champs est défini en text 50 cars, tu auras 50 cars même si le champs est vide (des espaces).

Voilà, si ça peut t'aider .....

Cordialement, CanisLupus
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
21 janv. 2005 à 18:42
Salut,

Tout d'abord un grand merci à tous, Spécialemnt à CanisLupus (Tu es le meilleur je vais voter pour toi au prochaîne élection )

J'avais deux erreurs dans mon programme
la première
"WHERE ((([Lettre Voiture].N°Livraison)=[Forms]![Livraison clients]![N°Livraison]))"

en effet le moteur Jet de windows ne sais pas extraire de donnée d'une forme
donc on corrige comme cela
'"WHERE [Lettre Voiture].N°Livraison)="&[Forms]![Livraison clients]![N°Livraison]
j'ai donc éviter l'erreur

Erreur d'execution '3061':
Trop peu de paramètre. 0 attendu.

Ensuite je me suis servi

De la méthode de Canis lupus
c'est à dire
DoCmd.TransferText acExportFixed, "descpitifNR2", "NOUVELLEREQUETE", "c:\temp\TEST.txt", True
et bingo cela fonctionne!!!
Merci à tous .
Je vais m'abonner au forum pour essayer d'aider moi aussi car cela m'a rendu un énorme
service

couf
0