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
420

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260