Vb changer import de donnée Xls Vs CSV/ TXT

anthooooony Messages postés 28 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 17 avril 2013 - 23 août 2012 à 18:45
anthooooony Messages postés 28 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 17 avril 2013 - 28 août 2012 à 10:05
Bonjour,

J'ai réussi à exploiter une macro Excel pour faire un import de donnée massif de dossier excel vers une table access jusque la ça va.
Le problème c'est que l'exemple marche pour des fichiers xls et lorsque je mets des fichiers csv(à terme c est ce format que prédominera) la macro ne s execute pas.

j'ai essayé de changer
Fichier Dir(Repertoire & "\*.xls")
par
Fichier Dir(Repertoire & "\*.csv")
mais ça ne marche pas. Je ne suis pas très fort en Vb il se peut que ce que je viens d'écrire était une betise, mais je me suis dit que ça aurait pu marché.. mais non..

Ci dessous le code qui marche bien avec les fichiers EXCEL.

Sub tranfertFeuilleClasseursFermes_VersAccess_V02()
'Nécessite d'activer la référence Microsoft ActiveX Data Objects x.x Library
'Nécessite d'activer la référence Microsoft ADO ext x.x for DLL and Security
'
Dim Cn As New ADODB.Connection
Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
Dim oConn As ADODB.Connection
Dim j As Integer
Dim Fichier As String, Repertoire As String, Feuille As String
Dim oCat As ADOX.Catalog

'------------------------------------------------------
'Connection à la Base Access
Set oConn = New ADODB.Connection
oConn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
"Data Source= 'C:\Documents and Settings\RC1194\Desktop\Test appli\maBase.mdb';"

'les données seront placés dans Table1
Set oRS = New ADODB.Recordset
oRS.Open "Select * from Table1", oConn, adOpenKeyset, adLockOptimistic
'------------------------------------------------------

'Boucle sur les classeurs Excel du répertoire cible
Repertoire = "C:\Documents and Settings\RC1194\Desktop\Test appli\sauvegarde"
Fichier = Dir(Repertoire & "\*.xls")

Do While Fichier <> ""
'Connection au classeur Excel
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Repertoire & "" & Fichier & ";" & _
"Extended Properties=""Excel 8.0;"""


'-------------------------
Set oCat = New ADOX.Catalog
Set oCat.ActiveConnection = Cn
'Récupére le nom de la Feuille:
'Attention: l'index correspond à un ordre alphabétique croissant
'et les plages de cellules nommées sont intégrées.
Feuille = oCat.Tables(0).Name
'-------------------------


'requête pour extraire les données de la Feuil1
oProdRS.Open "SELECT * FROM [" & Feuille & "]", Cn, adOpenStatic

' --- Transfert les données dans la base ---
Do While Not (oProdRS.EOF)
oRS.addNew
For j = 0 To oRS.Fields.Count - 1
oRS.Fields(j) = oProdRS.Fields(j).Value
Next j
oRS.Update
oProdRS.moveNext
Loop
'-------------------------------------------


Set oCat = Nothing
oProdRS.Close
'Fermeture de la connection au classeur Excel
Cn.Close
Fichier = Dir
Loop

'oRS.Close
Set oRS = Nothing
'Fermeture de la connection Access
oConn.Close
Set oConn = Nothing
End Sub



Je vous remercie d'avance pour l'aide que vous pourriez m'apporter.


Anthooooony
A voir également:

5 réponses

Utilisateur anonyme
23 août 2012 à 19:02
Bonjour,

Regarde icipour la chaîne de connexion à utiliser.

Sinon fouille là-dedans.
0
anthooooony Messages postés 28 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 17 avril 2013
23 août 2012 à 19:16
merci
je suis parti du travail j ai regarde le contenu du premier lien je pense que c est ca
je regarde demain a mon arrive
merci encore
0
anthooooony Messages postés 28 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 17 avril 2013
24 août 2012 à 10:12
Bonjour,


Ca n'a pas marché, j'ai regardé le lien que tu as indiqué.
J'ai changé l'extention de xls vers txt

ensuite j'ai copié

cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
       "Data Source=c:\somepath;" & _ 
       "Extended Properties=""text;HDR=Yes;FMT=Delimited;"";"


j'ai comme erreur d'exécution '2147467259(80004005)'
il met l'adresse du fichier txt en me disant qu il n est pas un chemin d acces valide. Assurez vous que le nom du chemin d acces est correct et qu'une connexion est établie avec le serveur sur lequel réside le fichier.

grrr

Je continue à chercher

a bientot


Sub tranfertFeuilleClasseursFermes_VersAccess_V02()
'Nécessite d'activer la référence Microsoft ActiveX Data Objects x.x Library
'Nécessite d'activer la référence Microsoft ADO ext x.x for DLL and Security
'
Dim Cn As New ADODB.Connection
Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
Dim oConn As ADODB.Connection
Dim j As Integer
Dim Fichier As String, Repertoire As String, Feuille As String
Dim oCat As ADOX.Catalog

'------------------------------------------------------
'Connection à la Base Access
Set oConn = New ADODB.Connection
oConn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
"Data Source= 'C:\Documents and Settings\RC1194\Desktop\Test appli1\maBase.mdb';"

'les données seront placés dans Table1
Set oRS = New ADODB.Recordset
oRS.Open "Select * from Table1", oConn, adOpenKeyset, adLockOptimistic
'------------------------------------------------------
 
'Boucle sur les classeurs Excel du répertoire cible
Repertoire = "C:\Documents and Settings\RC1194\Desktop\Test appli1\sauvegarde"
Fichier = Dir(Repertoire & "\*.txt")

Do While Fichier <> ""
    'Connection au classeur Excel
       Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & Repertoire & "" & Fichier & ";" & _
       "Extended Properties=""text;HDR=Yes;FMT=Delimited;"";"
   
        '-------------------------
    Set oCat = New ADOX.Catalog
    Set oCat.ActiveConnection = Cn
    'Récupére le nom de la Feuille:
       'Attention: l'index correspond à un ordre alphabétique croissant
       'et les plages de cellules nommées sont intégrées.
    Feuille = oCat.Tables(0).Name
    '-------------------------
   
   
    'requête pour extraire les données de la Feuil1
    oProdRS.Open "SELECT * FROM [" & Feuille & "]", Cn, adOpenStatic
   
    ' --- Transfert les données dans la base ---
Do While Not (oProdRS.EOF)
        oRS.addNew
        For j = 0 To oRS.Fields.Count - 2
            oRS.Fields(j) = oProdRS.Fields(j).Value
        Next j
        oRS.Update
        oProdRS.moveNext
    Loop
    '-------------------------------------------
   
   
    Set oCat = Nothing
    oProdRS.Close
    'Fermeture de la connection au classeur Excel
    Cn.Close
Fichier = Dir
Loop

'oRS.Close
Set oRS = Nothing
'Fermeture de la connection Access
oConn.Close
Set oConn = Nothing
End Sub

0
Utilisateur anonyme
25 août 2012 à 02:49
Bonjour,

Tu peux aussi aller voir par là.
0

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

Posez votre question
anthooooony Messages postés 28 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 17 avril 2013
28 août 2012 à 10:05
j'ai un message 3265..
0
Rejoignez-nous