Importer un fichier texte (volumineux) dans une table Access

shredpit Messages postés 12 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 28 avril 2006 - 14 avril 2006 à 14:29
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 - 14 avril 2006 à 17:14
Bonjour,
je vous écrit car j'aimerais importer un fichier texte avec des champs délimités par des ";" dans une table déjà existante dema base de données Access. Ce fichier est assez volumineux :s (environ 15000 lignes). Comment peut-on le faire en faisant un code VB ?

Merci pour tout éclaircissement

5 réponses

cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
14 avril 2006 à 14:51
Question : Les données à importer dans les champs de la table sont elles de même nature (chaîne, numérique, date,...) et les champs comportent ils des espaces à droite (cas de certains fichiers où les longueurs de champs sont fixes quel que soit le contenu. Dans le cas où il y a des espaces à droite dans les champs, il y a lieu de les éliminer à l'aide de la fonction RTrim pour éviter certains désagréments à l'utilisation ultérieure des données (exemple, je recherche l'enregistrement avec le critère "TOTO" , mais je n'obtient aucune résultat car c'est "TOTO " qui est enregistré dans la base de données. A partir de ces informations, il existe plusieurs solutions pour importer les données dans la table.
0
shredpit Messages postés 12 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 28 avril 2006
14 avril 2006 à 14:58
voici comment se présentent les lignes:

2;141;160;20050102;000036;00000705123046200;TI;00; ;000000
2;611;110;20040102;000008;00004805123006201;GI;00; ;000000
2;021;180;20065102;010411;00001105563006202;HI;00; ;000000

il peut y avoir des champs vides
0
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
14 avril 2006 à 15:27
Sub ImportData(sFileCSV As String, sTableName As String)
Dim lFileCSV As Long, rImport As Recordset,sLine As String, sField As String
Dim Curdb As Database, n As Byte, m As Byte
Set Curdb=CurrentDb
Set rImport=Curdb.OpenRecordset(sTableName,dbOpenTable)
lFileCSV=FreeFile
Open sFileCSV For Input As #lFileCSV
Do
Line Input #lFileCSV, sLine
rImport.AddNew
For n=1 To Len(sLine)
If Mid(sLine,n,1)<>";" Then
sField=sField & Mid(sLine,n,1)
Else
If m<>6 And m<>8 Then
rImport.Fields(m)=Val(sField)
ElseIf m=6 Then
rImport.Fields(m)=sField
End If
sField=""
m=m+1
End If
'Je suppose que l'on enregistre pas le Champ n°9 qui ne contient aucune donnée
'Dernier Champ
If n=Len(sLine) Then
rImport.Fields(m-1)=Val(sFields)
sFields=""
m=0
End If
Next n
rImport.Update
Loop Until EOF(lFileCSV)
Close #lFileCSV
rImport.Close
End Sub
0
shredpit Messages postés 12 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 28 avril 2006
14 avril 2006 à 15:42
En fait je le dit pas (désolé :s) mais le fichier texte comporte 115 champs, et les champs vide sont à inclure aussi :s Pouvez vous m'expliquer un peu le code si possible (et si vous avez le temps)? Merci beaucoup pour votre aide
0

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

Posez votre question
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
14 avril 2006 à 17:14
Explications :
Je suppose que les champs de la table sont dans le même ordre que les champs délimités par des ";".
- J'ouvre le fichier CSV en mode Input (ligne par ligne),
- J'analyse chaque ligne caractère par caractère avec la fonction Mid(),
- Si le caractère n'est pas un ";", je cumule les caractères dans la variable sField,
- Si le caractère est un ";" :
1 - je copie le contenu de la variable sField dans le champ correspondant de la table,
2 - je remet la variable sField à chaîne vide,
3 - j'incrémente de +1 la variable m qui me sert à définir l'index du champ de la table,
- Si j'ai atteint la fin de la ligne :
1 - je copie le contenu de lavariable sField dans le dernier champ de la table,
2 - je remet la variable sField à chaîne vide,
3 - je remet la variable m à zéro pour revenir au premier champ de l'enregistrement suivant.

Les instructions rImport.AddNew endebut des opérations d'anlyse et rImport.Update en fin de ces opérations commandent l'ajout d'un enregistrement à la table.
0
Rejoignez-nous