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 : Sélectionner tout - Visualiser dans une fenêtre à part
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