Erreur d'exécution '3265'
Adiakite
-
Utilisateur anonyme -
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
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
-
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