Excel-Access : Erreur d'exécution 3021

Eric 45

XLDnaute Occasionnel
Bonjour à tous

Je débute dans les jonctions VBA Excel-Access.
J'aimerai modifier un enregistrement, par VBA, du champs "statut_add" dans "ma_table"
Les champs de ma table sont :
- ID
- nom
- numero_add
- num_dep
- statut_add
- .......

La recherche se fait dans le champ "numero_add", dont le Type de données est "Texte", avec comme critère la cellule B10. Celle-ci est soit un nombre soit un texte.
Dans le code ci-dessous (extrait Wiki excel-download), le nombre ne me pose pas de problème.
Code:
Sub test_modifi_bdd()
Dim Conn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim fld As ADODB.Field
Set Conn = New ADODB.Connection
With Conn
    .Provider = "Microsoft.JET.OLEDB.4.0"
    .Open ThisWorkbook.Path & "\bdd_sauvegarde_adresse.mdb"
End With
Set rsT = New ADODB.Recordset
'table nommée "maTable"
rsT.Open "ma_Table", Conn, adOpenKeyset, adLockOptimistic
With rsT
    .MoveFirst
    ' recherche la valeur de la cellule B10 dans champ "numero_add"
    ' pour Cells(10, 2) => numérique
    '.Find ("numero_add=" & Cells(10, 2))
 
    ' pour Cells(10, 2) => texte
    .Find ("numero_add=" & Chr(34) & Cells(10, 2) & Chr(34))
 
    'quand la valeur est trouvée , on modifie le champ "statut_add" dont le Type de données est "Texte"
    ' quand Cells(10, 2) => numérique pas de problème
    ' mais quand Cells(10, 2) => texte cela ne fonctionne pas
    .Fields("statut_add") = Chr(34) & Cells(10, 4) & Chr(34)
    .Update
End With
Conn.CloseEnd Sub
Quand j'ai un "texte" j'ai une erreur :
-******
Erreur d'exécution 3021
BOF ou EOF est egal à True ou l'enregistrement actuel a été supprimé.
L'opération demandée nécessite un enregistrement actuel
-******
sur la ligne
Code:
.Fields("statut_add") = Cells(10, 4)
Je suppose que la ligne :
Code:
.Find ("numero_add=" & Chr(34) & Cells(10, 2) & Chr(34))
n'est pas bien codée et/ou peut-être celle qui me renvoie l'erreur

Où est mon erreur ? (ou mes erreurs)
Merci d'avance pour vos réponses
Eric
 

Herdet

Nous a quitté
Repose en paix
Re : Excel-Access : Erreur d'exécution 3021

Code:
.Fields("statut_add") = Cells(10, 4)
.Find ("numero_add=" & Chr(34) & Cells(10, 2) & Chr(34))
Eric
Bonjour,
Je pense qu'il faudrait d'abord convertir les valeurs en nombre ou texte car Access est très rigide coté format, normal pour une BDD.
.Find ("numero_add=" & CDbl(Cells(10, 2))) ' Cdbl en double ou Cint en integer voir l'aide Excel
et
.Fields("statut_add") = CStr(Cells(10, 4))

A+
Robert
 

Eric 45

XLDnaute Occasionnel
Re : Excel-Access : Erreur d'exécution 3021

Bonjour à tous
Bonjour Herdet


Merci de t'être penché sur mon problème.


Mon explication n'était pas tout à fait "précise", car quand je spécifiais le contenu de la cellule "Cells(10, 4)", il fallait comprendre (exemple):


numérique cela peut être : 40225, donc pas de problème,
mais pour le texte cela peut être : arbre,


ta solution par "CDbl(Cells(10, 2))" ne peut donc pas fonctionner.


Bon dimanche


Eric
 

Discussions similaires

Réponses
11
Affichages
439

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 900
Membres
103 404
dernier inscrit
sultan87