× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 Import Txt sous Access via Macro
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
ted the Ors
  Posté le 27/01/2009 @ 17:40 
Aller en bas de la page 
Astucien

onjour,

Je cherche à importer des fichiers txt avec séparateur (;) dans une base de données Excel, en passant par une macro (module access). J'ai trouvé le code suivant sur le net:

Sub ImportSchemaTable()
Dim db As DAO.Database
Set db = CurrentDb()
db.Execute _
"SELECT * INTO NewContact FROM [Text;FMT=Delimited;HDR=Yes;DATABASE=C:\My documents;].[Contacts#txt];", _
dbFailOnError
db.TableDefs.Refresh
End Sub

C:\My documents : je remplace par le chemin du dossier dans lequel est contenu mon .txt
Contacts: je remplace par le nom du fichier txt (sans le .txt :aie:)

Ca marche bien, sauf pour le delimiteur (dans mon cas un ";") qui n'est pas pris en compte...De plus, la première ligne est interprété comme les noms de colonnes.

Comment indique t on le délimiteur dans cette macro?

D'avance merci!

Publicité
Marmotte18
 Posté le 27/01/2009 à 20:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour ,

Même s'il ne s'agit pas directement de ton problème, cela pourrait te donner des idées.

Voilà une macro qui amène un fichier texte avec séparateur ';' dans Excel :

Sub Macro1()

Workbooks.OpenText Filename:= _
"C:\ ... \Bureau\Nouveau Document texte.txt", Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 4)), TrailingMinusNumbers:=True
End Sub

ted the Ors
 Posté le 27/01/2009 à 21:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Marmotte18 a écrit :

Bonjour ,

Même s'il ne s'agit pas directement de ton problème, cela pourrait te donner des idées.

Voilà une macro qui amène un fichier texte avec séparateur ';' dans Excel :

Sub Macro1()

Workbooks.OpenText Filename:= _
"C:\ ... \Bureau\Nouveau Document texte.txt", Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 4)), TrailingMinusNumbers:=True
End Sub

Bonsoir,

C'est super gentil malheureusement l'import de fichier txt n'est pas géré de la meme facon en VBA et en VBE...

Par contre, j'ai fureter sur le net, et j'ai trouvé que la commande à utiliser était

DoCmd.TransferText acExportDelim, "spec", "Table1", "C:\Monfichier.txt", False

Le fichier spec contient les specifications de l'import...

Plus d'infos ici

Mon probleme est que mon fichier spec n'est pas trouvé (erreur 3625)

Marmotte18
 Posté le 27/01/2009 à 21:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ted the Ors,

Ne faudrait-il pas utiliser acImportDelim, au lieu de acExportDelim ?

Dans l'aide d'Accès, j'ai trouvé :

Cet exemple exporte les données de la table External Report (État externe) de Microsoft Access dans le fichier texte délimité April.doc en utilisant le format Sortie standard :

DoCmd.TransferText acExportDelim, "Standard Output", _
    "External Report", "C:\Txtfiles\April.doc"


Modifié par Marmotte18 le 27/01/2009 21:37
ted the Ors
 Posté le 27/01/2009 à 21:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Excellente remarque...

J'ai trouvé en continuant de chercher:

Private Sub Commande6_Click()
DoCmd.TransferText acImportDelim, (""), "Table1", "C\Monfichier.txt", False
End Sub

soit:

DoCmd.TransferText acImportDelim, (Séparateur), "Nom de la table à importer", "Chemin et fichier depuis lequel on importe", False (1er ligne n'est pas l'entete) ou True (1ere ligne est l'entete)

Je viens de faire l'essai sur un fichier de 300000 lignes, ca marche nickel!

Merci encore à la marmotte et ceux qui m'ont lus...

Bonne soirée à tous!

ted the Ors
 Posté le 28/01/2009 à 16:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

BOn en fait, ca marche très bien sous Office 2001, mais pas sous 2003...Si quelqu'un a une idée du pourquoi, je suis preneur!

Marmotte18
 Posté le 28/01/2009 à 19:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour ted the Ors,

J'ai essayé sur Access 2003 et cela fonctionne très bien. Tu trouveras ci-dessous la procédure qui tourne :

Private Sub Importer_Click()
DoCmd.TransferText acImportDelim, (";"), "Table1", "C:\Mes documents\ ...
\Document.txt", False
End Sub


Modifié par Marmotte18 le 28/01/2009 19:08
ted the Ors
 Posté le 28/01/2009 à 19:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

As tu creer ta table "Table1" au préalable?

Si oui comment as tu renseigné les caracteristiques des colonnes?

Parce que, perso, quand je fais l'import, j'ai une erreur (je n'ai pas le libellé exact, vu que c'est au TAF et que là, je suis @home) qui me dit que la colonne F1 de ma table n'est pas valide alors que ma table n'a pas de colonne F1...

Quand je crée une table avec une colonne intitulée F1, l'import se fait, mais il ne prend pas en compte le séparateur....

zen

Marmotte18
 Posté le 28/01/2009 à 19:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ted the Ors,

La table n'existe pas dans ma base données. C'est la procédure qui crée cette table !

NB : tu as bien noté la présence du caractère ';' dans mon code alors que chez toi, il n'y figurait pas !

Ci-joint ma base de données et le fichier .text correspondant : http://cjoint.com/?bEtI6aBsNQ Il faudra seulement changer le chemin pour aller au fichier dans le code VBE.



Modifié par Marmotte18 le 28/01/2009 19:44
Publicité
ted the Ors
 Posté le 28/01/2009 à 19:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Merci, j'essaierai demain !

Pour le caractère de séparation, effectivement, il était absent de mon code, mais j'ai pensé à le spécifier lors de mes essais!

Merci encore pour ton aide.

Excellente soirée à toi!

ted the Ors
 Posté le 29/01/2009 à 11:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Je vais devenir fou!

Ca ne fonctionne pas! J'ai essayé avec ton fichier et ta base, de refaire l'import, mais j'obtiens une table avec une seule colonne!

là je ne comprend pas!

Marmotte18
 Posté le 29/01/2009 à 12:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour ted the Ors,

J'ai refait tourner l'import et cela fonctionne impécablement bien ! La table est créée automatiquement et j'ai bien les 3 champs attendus.

Ne serait-ce pas une différence dans "outils" < "options" mais je ne vois pas quoi ?



Modifié par Marmotte18 le 29/01/2009 12:19
ted the Ors
 Posté le 29/01/2009 à 12:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ou peut etre du coté des références!

Quelles sont celles cochées chez toi?

Marmotte18
 Posté le 29/01/2009 à 12:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ted the Ors,

Qu'appelles-tu "références" ? Où se trouvent-elles ?

Quel est ton format de fichier par défaut ? (Outils < Options < avancé). Je te l'ai transmis en Access 2000 mais cela fonctionne chez moi aussi en Access 2002 - 2003 !

Par contre, j'ai constaté un problème : si on demande plusieurs fois l'import du fichier, il va ajouter autant de fois l'ensemble des enregistrements que l'on aura cliqué sur le bouton. => Il faut d'abord vérifier si le fichier existe avant de faire cette opération

  • S'il existe => ne rien faire
  • Sinon, accepter la création dudit fichier


Modifié par Marmotte18 le 29/01/2009 12:47
ted the Ors
 Posté le 29/01/2009 à 13:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Marmotte18 a écrit :

ted the Ors,

Qu'appelles-tu "références" ? Où se trouvent-elles ?

Quel est ton format de fichier par défaut ? (Outils < Options < avancé). Je te l'ai transmis en Access 2000 mais cela fonctionne chez moi aussi en Access 2002 - 2003 !

Pour les references, elles sont "reglables" via Outils/Reference dans l'éditeur MS VB.

Pour mon format par défaut, j'ai "Access 2002 - 2003".

Autre news, en ne changeant rien au code VB, et en remplacant dans le fichier le ; par , l'import se fait bien!

Marmotte18
 Posté le 29/01/2009 à 13:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ted the Ors,

Ci-dessous les informations demandées :

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
113,22 €SSD Crucial P1 1 To (3D NAND, NVMe, PCIe, M.2) à 113,22 € livré
Valable jusqu'au 15 Août

Amazon Italie fait une promotion sur le SSD Crucial P1 1 To (3D NAND, NVMe, PCIe, M.2) qui passe à 108,68 € (avec la TVA ajustée). Comptez 4,54 € pour la livraison en France soit un total de 113,22 € livré. On le trouve ailleurs à partir de 130 €. Ce SSD offre des vitesses de lecture/écriture séquentielle allant jusqu’à 2 000/1 750 Mo/s. Il est garanti 5 ans.


> Voir l'offre
139,99 €Disque dur portable externe WD Black P10 Game Drive 5 To à 129,99 €
Valable jusqu'au 17 Août

Amazon fait une promotion sur le disque dur externe portable WD Black P10 Game Drive 5 To qui passe à 129,99 € livré gratuitement au lieu de 180 €. Ce disque dur USB 3.1 est dédié pour gérer et transporter votre bibliothèque de jeux sur PC ou sur console. 


> Voir l'offre
16,24 €Clé USB 3.0 Kingston DataTraveler 100 G3 128 Go à 16,24 €
Valable jusqu'au 17 Août

Amazon propose la clé USB 3.0 Kingston DataTraveler 100 G3 128 Go à 16,24 €. Sa fermeture coulissante vous permettra de protéger le connecteur USB 3.0 (compatible USB 2.0). La livraison est gratuite.


> Voir l'offre

Sujets relatifs
Sous Access 2003 Macro spécifique...
Macro sous access
macro nombres stockés sous forme texte
Import Excel vers Access
ACCESS 97 sous Windows 7 ou 8 ?
macro sous excel 2007
Amélioration d'une macro sous excel 97 ou 2003
Execution Sous excell 2007 macro pas a pas
Macro sous word 2010
Macro sous Excel 2010
Plus de sujets relatifs à Import Txt sous Access via Macro
 > Tous les forums > Forum Bureautique