Insérer des enregistrements Excel sous Access via VBA
Bonjour,
Je souhaite insérer des données Excel dans une base de données Access via un code VBA. Mon excel contient un tableau avec 5 colonnes : date, réfproduit, marque, quantité, identifiant. Idem sur ma table Access.
Cependant mon code ne marche pas, j'ai l'erreur : "Erreur d'exécution '-2147217913 (80040e07)' - Type de données incompatible dans l'expression du critère".
Sauriez-vous m'aider s'il vous plait?
J'ai bien fait attention à mettre mes données Excel et Access sous le même format. Il semble que la ligne SELECT*FROM ..... WHERE pose problème.
Merci par avance pour votre aide.
Rose
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| Sub WritingWorksheetExcel_Access()
Dim DATABASE As String
DATABASE = "G:\AccessRose\Basededonnees1.accdb"
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")
Dim rs2 As Object
Set rs2 = CreateObject("ADODB.Recordset")
Dim confirm As Integer
Dim r As Integer
confirm = MsgBox("Voulez-vous mettre à jour la base Access ? ", vbOKCancel)
If confirm <> 1 Then
Exit Sub
End If
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=" & DATABASE & ";"
' open a recordset
'num de ligne = 2
r = 2
For r = 2 To 10000
If Range("A" & r).Value = "" Then
Exit For
End If
Set rs = New ADODB.Recordset
Dim statement As String
statement = "SELECT * FROM [AccessRose] " & _
" WHERE ( (Dates = '" & Range("A" & r).Value & Format(Dates, "dd/mm/yyy") & "') AND (RefProduit = '" & Range("B" & r).Value & "') AND (Marque = '" & Range("C" & r).Value & "') AND (Quantite = '" & Range("D" & r).Value & "') AND (Id = '" & Range("E" & r).Value & "'))"
rs.Open statement, _
cn, _
adOpenStatic, _
adLockOptimistic, _
adCmdText
If rs.EOF Then
' create a new record
' add values to each field in the record
rs.AddNew
End If
With rs
.Fields("Dates") = Range("A" & r).Value
.Fields("RefProduit") = Range("B" & r).Value
.Fields("Marque") = Range("C" & r).Value
.Fields("Quantite") = Range("D" & r).Value
.Fields("Id") = Range("E" & r).Value
.Update
End With
Next r
cn.Close
Set cn = Nothing
rs.Close
Set rs = Nothing
rs2.Close
Set rs2 = Nothing
End Sub |