Erreur d'exécution '3265'

Adiakite -  
 Utilisateur anonyme -
Bonjour,

Je bosse sur un projet en VBA. Mon code me génère l'erreur suivante quand je compile pas à pas "Erreur d'exécution '3265' Erreur défini par l'application ou par l'objet" lorsque le curseur arrive à cette ligne "Fields("Magasin") = Range("B" & r).Value". J'ai cherché on me dit que cette erreur signifie "3265 : adErrItemNotFound Aucun élément de la collection ne correspond au nom ou à l'ordinal demandé. Un nom de champ ou de table incorrect a été spécifié." je vérifie dans ma base les noms sont apparemment correct. Quelqu'un pourrait-il m'aider. Voici mon code en entier:
Sub FromExcelToAccess()
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
Chemin = ActiveWorkbook.Path
Source = Chemin & "\gestion stock.mdb"
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= " & Source & ";"
' open a recordset
Set rs = New ADODB.Recordset
rs.Open "[Etat stock]", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' all records in a table
r = 2 ' the start row in the worksheet
Do While Len(Range("A" & r).Formula) > 0 ' repeat until first empty cell in column A
With rs
.AddNew ' create a new record
' add values to each field in the record
.Fields("Code article") = Range("A" & r).Value
.Fields("Magasin") = Range("B" & r).Value
.Fields("Emplacement") = Range("C" & r).Value
.Fields("Ref GE/Origine") = Range("D" & r).Value
.Fields("Libelle") = Range("E" & r).Value
.Fields("Qté en stock") = Range("F" & r).Value
.Fields("Qté mini") = Range("G" & r).Value
.Fields("Unité de mesure") = Range("H" & r).Value
.Fields("Coût unitaire moyen") = Range("I" & r).Value
.Fields("Coût total") = Range("J" & r).Value
.Update ' stores the new record
End With
r = r + 1 ' next row
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub

1 réponse

Utilisateur anonyme
 
Bonjour,

Ton code est sensiblement bon, mais l'inférence des types
étant ce quel est sous VBA, je te suggère d'être plus explicite
sur les types que tu récupères, le code suivant fonctionne
lorsque tous les champs de la BD sont de type - Texte -.

si :
"Fields("Magasin") = Range("B" & r).Value"

le type

"Fields("Magasin")

pourrait ne pas correspondre avec le type

Range("B" & r).Value"

Parfois, l'inférence étant ce quel est, le compilateur effectue
mal la promotion/démotion de types, il faut donc être plus explicite.

ex.:

.Fields("Date du jour").Value = CDate(Range("A" & r).Value)

regarde bien cette relation de type, il y a une erreur !

Voici le code testé sous Excel XP :-)

Option Explicit

Sub FromExcelToAccess()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim r As Long
    Dim Chemin As String
    Dim Source As String
    
    Chemin = ActiveWorkbook.Path
    Source = Chemin & "\gestion stock.mdb"
    
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Source & ";"
    
    ' open a recordset
    Set rs = New ADODB.Recordset
    rs.Open "[stock]", cn, adOpenKeyset, adLockOptimistic, adCmdTable
    
    Sheets("Donnees").Select
    r = 1
    
    ' all records in a tabler = 2
    ' the start row in the worksheet
    Do While Len(Range("A" & r).Value) > 0
    ' repeat until first empty cell in column A
        With rs
            .AddNew ' create a new record
                ' add values to each field in the record
            .Fields("Code article").Value = Range("A" & r).Value
            .Fields("Magasin").Value = Range("B" & r).Value
            .Fields("Emplacement").Value = Range("C" & r).Value
            .Fields("Ref GE/Origine").Value = Range("D" & r).Value
            .Fields("Libelle").Value = Range("E" & r).Value
            .Fields("Qté en stock").Value = Range("F" & r).Value
            .Fields("Qté mini").Value = Range("G" & r).Value
            .Fields("Unité de mesure").Value = Range("H" & r).Value
            .Fields("Coût unitaire moyen").Value = Range("I" & r).Value
            .Fields("Coût total").Value = Range("J" & r).Value
            .Update ' stores the new record
        End With
        r = r + 1 ' next row
    Loop

    rs.Close
    Set rs = Nothing
    
    cn.Close
    Set cn = Nothing
    
End Sub
'


Cdt

Lupin
0