OVH Cloud OVH Cloud

Importer une table en VBA

6 réponses
Avatar
Joël GARBE
Bonsoir à tous !

Je souhaite importer un fichier csv (n'ayant pas toujours le même nom) dans
une table (existante).

Mais je ne m'inéresse pas au 2 premières lignes du fichier csv. Par
ailleurs, j'aimerais pouvoir contrôler la correspondance des champs
csv-table Access.

J'ai cherché sur cerains sites, mais peut-être pas où il faut, alors,

Vous remerciant par avance de votre aide,

Bien cordialement,

Joël GARBE
www.joelgarbe.fr

6 réponses

Avatar
3stone
Salut,

"Joël GARBE"
Je souhaite importer un fichier csv (n'ayant pas toujours le même nom) dans
une table (existante).

Mais je ne m'inéresse pas au 2 premières lignes du fichier csv. Par
ailleurs, j'aimerais pouvoir contrôler la correspondance des champs
csv-table Access.



Soit tu t'écris une fonction qui lit le fichier ligne par ligne
et qui "Split" les données sur le séparateur;
Soit tu l'importe dans une table temporaire et tu utilise
une requête d'ajout à la table finale.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Joël GARBE
Merci Pierre,

Je vais aller voir sur les différents sites (dont le tien qui fait partie de
mes favoris) la façon de procéder pour lire un fichier ligne par ligne.

Je sais le faire sur Excel, mais pas sur Access !

J'espère qu'il n'y a pas trop de différences

Si jamais quelqu'un pouvait me mettre sur la voie...

Pour information, mon fichier csv n'est pas linéaire, il peut y avoir des
informations situées sur une ligne qui concerne un enregistrement de la
ligne du dessus.

Pas très clair peut-être, mais seule une analyse ligne par ligne du fichier
csv me permet de savoir ce qu'il en est...

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"3stone" a écrit dans le message de news:

Salut,

"Joël GARBE"
Je souhaite importer un fichier csv (n'ayant pas toujours le même nom)
dans
une table (existante).

Mais je ne m'inéresse pas au 2 premières lignes du fichier csv. Par
ailleurs, j'aimerais pouvoir contrôler la correspondance des champs
csv-table Access.



Soit tu t'écris une fonction qui lit le fichier ligne par ligne
et qui "Split" les données sur le séparateur;
Soit tu l'importe dans une table temporaire et tu utilise
une requête d'ajout à la table finale.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome






Avatar
3stone
Salut,

"Joël GARBE"

Je vais aller voir sur les différents sites (dont le tien qui fait partie de
mes favoris) la façon de procéder pour lire un fichier ligne par ligne.

Je sais le faire sur Excel, mais pas sur Access !

J'espère qu'il n'y a pas trop de différences

Si jamais quelqu'un pouvait me mettre sur la voie...

Pour information, mon fichier csv n'est pas linéaire, il peut y avoir des
informations situées sur une ligne qui concerne un enregistrement de la
ligne du dessus.

Pas très clair peut-être, mais seule une analyse ligne par ligne du fichier
csv me permet de savoir ce qu'il en est...



Si les lignes se sont _pas_ coupées par un "retour chariot", tu peux
utiliser "Line Input" pour récupérer la "phrase" complète.

Si ce n'est pas le cas, il faut une routine béton... et de bons repères
pour retrouver les biscuits ;-)

Tu peux toujours mettre un exemple (quelques lignes) de ton fichier
texte ici, on verra mieux.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Joël GARBE
Merci pour la proposition :

les premières lignes de mon fichier csv :
les données significatives comment en ligne 4
Quant une ligne commence par
;;;;
c'est que l'information se rapporte à la première ligne commençant par un
numéro située au-dessus...
une ligne complète du fichier csv est encadrée de guillemets
évidemment, si tu peux me donner la marche à suivre (une piste serait déjà
très bien pour moi...)
'================================ Etat de parc

"Code groupe;Code entreprise;N° compte client;N° d'appel GSM;N° Abonné;N°
carte SIM;Nom utilisateur;Réf. Commande;N° Contrat;Date
activation;Remarque;Types Abonnements;Services;Date d'effet;Date de fin;Type
terminal"
"001657;374201;60521471;0607171170;477313;1044721630025;Guillaume
HERMELIN;OF/DTRS/DDS/SVE/PCE;30348405;21/07/1997;;Forfait entreprise 10h
se;;;;"
";;;;;;;;;;;;Présentation du numéro;09/07/2003;;"
";;;;;;;;;;;;International;02/12/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;Cartes jumelles;01/06/2004;;"
";;;;;;;;;;;;Numéro Leader;01/06/2004;;"
";;;;;;;;;;;;Fact. détaillée 10CH S/WE;01/06/2004;;"
";;;;;;;;;;;;;;;NOKIA 6610"
"001657;374201;60521471;0608528225;20416921;2034883452168;DUMOUSSET;ANALYSTE
DSI / POE;30348405;15/03/2001;;Tarif interne (non factur;;;;"
";;;;;;;;;;;;Messagerie Vocale;15/03/2001;;"
";;;;;;;;;;;;Présentation du numéro;15/03/2001;;"
";;;;;;;;;;;;Monde;04/12/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;;;;MOTOROLA V500"
"001657;374201;60521471;0670641298;1742957;2942643662795;JEAN-JACQUES
PROST;DDS/SVE Expert Fonctionnel;30348405;23/09/1999;;Tarif interne (non
factur;;;;"
";;;;;;;;;;;;Messagerie Vocale;23/09/1999;;"
";;;;;;;;;;;;Présentation du numéro;23/09/1999;;"
";;;;;;;;;;;;Monde;05/12/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;;;;MOTOROLA V500"
"001657;374201;60521471;0673671583;20334160;2034883535376;YANN
PIERREFEU;CHEF PROJET DSI / POE;30348405;18/01/2001;;Tarif interne (non
factur;;;;"
";;;;;;;;;;;;Messagerie Vocale;18/01/2001;;"
";;;;;;;;;;;;Présentation du numéro;18/01/2001;;"
";;;;;;;;;;;;Monde;17/10/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;;;;MOTOROLA V600"
'==========================================
Merci d'avance...

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"3stone" a écrit dans le message de news:

Salut,

"Joël GARBE"

Je vais aller voir sur les différents sites (dont le tien qui fait partie
de
mes favoris) la façon de procéder pour lire un fichier ligne par ligne.

Je sais le faire sur Excel, mais pas sur Access !

J'espère qu'il n'y a pas trop de différences

Si jamais quelqu'un pouvait me mettre sur la voie...

Pour information, mon fichier csv n'est pas linéaire, il peut y avoir des
informations situées sur une ligne qui concerne un enregistrement de la
ligne du dessus.

Pas très clair peut-être, mais seule une analyse ligne par ligne du
fichier
csv me permet de savoir ce qu'il en est...



Si les lignes se sont _pas_ coupées par un "retour chariot", tu peux
utiliser "Line Input" pour récupérer la "phrase" complète.

Si ce n'est pas le cas, il faut une routine béton... et de bons repères
pour retrouver les biscuits ;-)

Tu peux toujours mettre un exemple (quelques lignes) de ton fichier
texte ici, on verra mieux.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome






Avatar
3stone
Salut,

"Joël GARBE"
les premières lignes de mon fichier csv :
les données significatives comment en ligne 4
Quant une ligne commence par
;;;;
c'est que l'information se rapporte à la première ligne commençant par un
numéro située au-dessus...
une ligne complète du fichier csv est encadrée de guillemets
évidemment, si tu peux me donner la marche à suivre (une piste serait déjà
très bien pour moi...)
'================================ > Etat de parc

"Code groupe;Code entreprise;N° compte client;N° d'appel GSM;N° Abonné;N°
carte SIM;Nom utilisateur;Réf. Commande;N° Contrat;Date
activation;Remarque;Types Abonnements;Services;Date d'effet;Date de fin;Type
terminal"
"001657;374201;60521471;0607171170;477313;1044721630025;Guillaume
HERMELIN;OF/DTRS/DDS/SVE/PCE;30348405;21/07/1997;;Forfait entreprise 10h
se;;;;"
";;;;;;;;;;;;Présentation du numéro;09/07/2003;;"
";;;;;;;;;;;;International;02/12/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;Cartes jumelles;01/06/2004;;"
";;;;;;;;;;;;Numéro Leader;01/06/2004;;"
";;;;;;;;;;;;Fact. détaillée 10CH S/WE;01/06/2004;;"
";;;;;;;;;;;;;;;NOKIA 6610"
"001657;374201;60521471;0608528225;20416921;2034883452168;DUMOUSSET;ANALYSTE
DSI / POE;30348405;15/03/2001;;Tarif interne (non factur;;;;"
";;;;;;;;;;;;Messagerie Vocale;15/03/2001;;"
";;;;;;;;;;;;Présentation du numéro;15/03/2001;;"
";;;;;;;;;;;;Monde;04/12/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;;;;MOTOROLA V500"
"001657;374201;60521471;0670641298;1742957;2942643662795;JEAN-JACQUES
PROST;DDS/SVE Expert Fonctionnel;30348405;23/09/1999;;Tarif interne (non
factur;;;;"
";;;;;;;;;;;;Messagerie Vocale;23/09/1999;;"
";;;;;;;;;;;;Présentation du numéro;23/09/1999;;"
";;;;;;;;;;;;Monde;05/12/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;;;;MOTOROLA V500"
"001657;374201;60521471;0673671583;20334160;2034883535376;YANN
PIERREFEU;CHEF PROJET DSI / POE;30348405;18/01/2001;;Tarif interne (non
factur;;;;"
";;;;;;;;;;;;Messagerie Vocale;18/01/2001;;"
";;;;;;;;;;;;Présentation du numéro;18/01/2001;;"
";;;;;;;;;;;;Monde;17/10/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;;;;MOTOROLA V600"



Il semble que le fichier possède malgré tout 16 "champs"
Il faut aussi vérifier si, dans la "ligne" délimitée par des guillemets,
ne se trouvent pas des retours chariot (chr(13) & chr(10))

Ensuite, tu devrais "nettoyer" le fichier de ses guillemets délimiteurs.

Un cht'it fonction...

Function SuppDQ()
Dim strLine As String
Open "C:TextFile.txt" For Input As #1
Open "C:BestText.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, strLine
strLine = Replace(strLine, """", "")
Print #2, strLine
Loop
Close #1
Close #2
End Function

Puis, tu l'importe dans une table temporaire en utilisant
les points-virgules comme séparateur.

Un début...


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Joël GARBE
Merci Pierre,

C'est un bon début que je vais approfondir.

Maintenant, il me reste à injecter les données dans une table, sachant qu'un
enregistrement est constitué, sur le fichier csv de plusieurs lignes (dont
le nombre est vatiable...)

Ce qui me manque, c'est la façon de prendre une par une les données du
fichier csv pour les injecter dans une table access.

Encore merci, et si tu as des idées pour la suite, je suis bien sur
preneur...

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"3stone" a écrit dans le message de news:
%
Salut,

"Joël GARBE"
les premières lignes de mon fichier csv :
les données significatives comment en ligne 4
Quant une ligne commence par
;;;;
c'est que l'information se rapporte à la première ligne commençant par un
numéro située au-dessus...
une ligne complète du fichier csv est encadrée de guillemets
évidemment, si tu peux me donner la marche à suivre (une piste serait
déjà
très bien pour moi...)
'================================ >> Etat de parc

"Code groupe;Code entreprise;N° compte client;N° d'appel GSM;N° Abonné;N°
carte SIM;Nom utilisateur;Réf. Commande;N° Contrat;Date
activation;Remarque;Types Abonnements;Services;Date d'effet;Date de
fin;Type
terminal"
"001657;374201;60521471;0607171170;477313;1044721630025;Guillaume
HERMELIN;OF/DTRS/DDS/SVE/PCE;30348405;21/07/1997;;Forfait entreprise 10h
se;;;;"
";;;;;;;;;;;;Présentation du numéro;09/07/2003;;"
";;;;;;;;;;;;International;02/12/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;Cartes jumelles;01/06/2004;;"
";;;;;;;;;;;;Numéro Leader;01/06/2004;;"
";;;;;;;;;;;;Fact. détaillée 10CH S/WE;01/06/2004;;"
";;;;;;;;;;;;;;;NOKIA 6610"
"001657;374201;60521471;0608528225;20416921;2034883452168;DUMOUSSET;ANALYSTE
DSI / POE;30348405;15/03/2001;;Tarif interne (non factur;;;;"
";;;;;;;;;;;;Messagerie Vocale;15/03/2001;;"
";;;;;;;;;;;;Présentation du numéro;15/03/2001;;"
";;;;;;;;;;;;Monde;04/12/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;;;;MOTOROLA V500"
"001657;374201;60521471;0670641298;1742957;2942643662795;JEAN-JACQUES
PROST;DDS/SVE Expert Fonctionnel;30348405;23/09/1999;;Tarif interne (non
factur;;;;"
";;;;;;;;;;;;Messagerie Vocale;23/09/1999;;"
";;;;;;;;;;;;Présentation du numéro;23/09/1999;;"
";;;;;;;;;;;;Monde;05/12/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;;;;MOTOROLA V500"
"001657;374201;60521471;0673671583;20334160;2034883535376;YANN
PIERREFEU;CHEF PROJET DSI / POE;30348405;18/01/2001;;Tarif interne (non
factur;;;;"
";;;;;;;;;;;;Messagerie Vocale;18/01/2001;;"
";;;;;;;;;;;;Présentation du numéro;18/01/2001;;"
";;;;;;;;;;;;Monde;17/10/2003;;"
";;;;;;;;;;;;Quid PC 5Mo/2H WIFI;14/04/2004;;"
";;;;;;;;;;;;;;;MOTOROLA V600"



Il semble que le fichier possède malgré tout 16 "champs"
Il faut aussi vérifier si, dans la "ligne" délimitée par des guillemets,
ne se trouvent pas des retours chariot (chr(13) & chr(10))

Ensuite, tu devrais "nettoyer" le fichier de ses guillemets délimiteurs.

Un cht'it fonction...

Function SuppDQ()
Dim strLine As String
Open "C:TextFile.txt" For Input As #1
Open "C:BestText.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, strLine
strLine = Replace(strLine, """", "")
Print #2, strLine
Loop
Close #1
Close #2
End Function

Puis, tu l'importe dans une table temporaire en utilisant
les points-virgules comme séparateur.

Un début...


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome