amirdiakite
Messages postés8Date d'inscriptionmercredi 19 janvier 2011StatutMembreDernière intervention23 mai 2012
-
18 mai 2012 à 13:33
amirdiakite
Messages postés8Date d'inscriptionmercredi 19 janvier 2011StatutMembreDernière intervention23 mai 2012
-
21 mai 2012 à 15:58
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
Bonjour,
Max: C'est bien adLockOptimistic et ça fonctionne puisqu'il enregistre la Range("A" & r)
Amir: ce ne serait pas :
.Fields("magasin") = Range("B" & r).Value
Parce que access fait la différence entre les majuscules et minuscules.
Il faut également éviter les accents et autres caractères bizarres dans les noms de champ.
Salut Max,
Ah ok excuse, je me suis "gouré" de copier/coller...
Je ne crois pas non plus, j'ai toujours utilisé adOpenKeyset moi aussi, je pense plutôt à une histoire de nom de champs qui ne respecte pas la case dans son cas...
amirdiakite
Messages postés8Date d'inscriptionmercredi 19 janvier 2011StatutMembreDernière intervention23 mai 2012 21 mai 2012 à 10:34
Bonjour à tous,
je remercie tous ceux qui ont répondu à ma requête. j'ai essayé la solution de LIBRE_MAX pour le adOpenDynaset, puisque le curseur se bloque toujours au même endroit. Aussi j'ai vérifié les noms de champs ils correspondent suivant la remarque de ACIVE, mais il n'y a pas de problèmes à ce niveau. Je continue toujours de cherché mais ça coince toujours.
Merci et bien à tous.
Re:
Eh bien, procédons par élimination...
Annule l'enregistrement "Magasin" pour voir
A noter que tu dois ouvrir en suite la base manuellement et supprimer l'enregistrement, sinon tu auras un champ vide.
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
Et la tu vas voir si tout le reste fonctionne ou pas.
amirdiakite
Messages postés8Date d'inscriptionmercredi 19 janvier 2011StatutMembreDernière intervention23 mai 2012 21 mai 2012 à 15:58
@Acive: j'ai déjà essayé cette option mais j'ai toujours le mêmes problème au même endroit Fields("Code article") = Range("A" & r).Value. J'ai même annulé tous les autres champs pour laisser seulement le champs "code article". Quand je compile pas à pas j'ai toujours le même problème au même endroit Fields("Code article") = Range("A" & r).Value .