mais j'obtiens une erreur dépassement de capacité sur la ligne :
For n = 1 To Len(sLine)
Champs de la table Access 2003:
HEURE
NOMA
NOMB
COURT
NATURE
Id
Sur WordPad les enregistrements de la table importée (Fichier Excel Csv) se présentent de cette façon :
DATE ; HEURE ; NOM ; NOM ; COURT ; NATURE
Samedi 05 Décembre 2009;09h 00;DURAND;;N°7;Adhérent
Et sur la ligne For n = 1 To Len(sLine) le survol de la souris donne:
"DATE ; HEURE ; NOM ; NOM ; COURT ; NATURE Samedi 05 Décembre 2009; 0....
Nota : ce n'est pas une erreur de ma part le fichier à importer contient deux fois le champ NOM et il n'est pas volumineux.
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 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
Merci pour votre aide.
Salutations
A voir également:
[Déplacé .Net --> VBA] Importer un fichier Excel Csv dans une table Acess
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 30 déc. 2009 à 16:23
Merci d'utiliser la colorisation syntaxique disponible (3ème icone à partir de la droite) parce que c'est chiant, fatiguant ... et je n'ai pas personnellement le temps de faire du copier/coller.
Pour séparer tes données, utilise un simple Split avec le caractère ;
Tu y gagneras en clarté et en efficacité.
Au moment de l'erreur :
Que vaut 'n' ?
Que vaut Len(sLine) ?
Un Line Input ne fonctionne que si chaque ligne se termine bien par un retour chariot Chr$(13) ou un retour chariot + retour ligne Chr$(13) & Chr$(10)
Si tes lignes ne sont séparées que par un Chr$(10), Line Input lira le fichier entier, d'où, peut-être, cette erreur de dépassement.
D'autre part, je ne suis pas familier de .Net, mais il me semble que la méthode Open et Line Input que tu utilises est une méthode VB6. VB.Net a un nouvel objet FileStream avec des méthodes surement plus efficaces.
DAVIMIKA
Messages postés118Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention10 janvier 2014 31 déc. 2009 à 00:12
Bonsoir Jack,
Merci pour ta réponse, je tiendrais compte de tes remarques pour mes prochains post, par contre je précise que je suis en Vba Access et que j'ai jamais fait d'importation de fichier.