× 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
14,99 €Hub Aukey USB C 6 en 1 (USB 3.0, HDMI 4K, lecteur SD et MicroSD) à 14,99 €
Valable jusqu'au 06 Octobre

Amazon fait une promotion sur le Hub Aukey USB C 6 en 1 qui passe à 14,99 €. Ce Hub à brancher sur un port USB C vous permettra d'ajouter 3 ports USB 3.0, un lecteur de cartes mémoire SD et MicroSD ainsi qu'un port HDMI 4K à votre ordinateur portable ou votre smartphone.


> Voir l'offre
299,27 €Mini PC T-BAO TBOOK MN25 (Ryzen 5 2500U, 16Go RAM, 512Go SSD NVME) à 299,27 € avec le code BG7D2MN16
Valable jusqu'au 04 Octobre

Banggood propose actuellement le mini PC T-BAO TBOOK MN25 à 299,27 € (avec livraison et assurance comprises) avec le code promo BG7D2MN16. Ce mini PC au format NUC d'Intel possède un processeur Ryzen 5 2500U avec chip graphique Vega 8, 16 Go de RAM DDR4 et un SSD NVME de 512 Go. Il dispose d'une connectique complète : un emplacement 2,5 pouces libre (pour ajouter un disque dur ou un SSD supplémentaire, le WiFi5, le bluetooth 4.1, 4 ports USB 3.0, 2 ports USB 2.0, un port HDMI 2.0, un DisplayPort, un port Ethernet Gigabit et tourne sous Windows 10 que vous pourrez mettre en français. Ce mini PC fait 12,8 x 12,8 x 5 cm et pèse 1,2 kg. Il est livré avec une alimentation européenne. Branchez ce mini PC sur une TV ou un écran et vous avez un ordinateur discret et performant.

Ce marchand sérieux se trouvant en Chine, la livraison peut prendre une vingtaine de jours. Vous pouvez payer par carte bancaire ou par Paypal (conseillé pour bénéficier de la garantie Paypal).


> Voir l'offre
14,90 €Windows 10 Pro 32/64 bits OEM à 14,90 €
Valable jusqu'au 08 Octobre

Le vendeur sérieux LicenSE-ONLine propose sur Amazon la clé d'activation pour Windows 10 professionnel en français 32 bits / 64 bits à 14,90 €. Cette clé livrée par email fonctionne avec l'outil d'installation et de création de support de Microsoft que vous pouvez télécharger ici ou directement avec l'ISO de Windows 10 Pro. De quoi installer légalement Windows 10 Pro sur un PC. Pour en savoir plus sur l'achat et l'installation d'une clé OEM de Windows 10, suivez les indications de notre dossier pratique.


> 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