formule find depuis wiki michel

seb33

XLDnaute Junior
RESOLU: formule find depuis wiki michel

bonjour

le wiki de michel(s) m'a super bien aidé pour travailler sur access depuis excel (un vrai travail de Titan ce wiki)

une seule me résiste encore et je n'arrive pas à voir où est l'erreur:
Sub Modifier_Ref()
Dim Conn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim fld As ADODB.Field
Dim table As String

Set Conn = New ADODB.Connection
table = "Table1"
Sheets("Installation").Activate

With Conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion
.Open "c:\\DBmodule.mdb"
End With

Set rsT = New ADODB.Recordset
'table nommée 'maTable'
rsT.Open table, Conn, adOpenKeyset, adLockOptimistic

With rsT
.MoveFirst
'recherche la valeur de la cellule A1 dans champ 'Matricule'
.Find ("Reference=" & Cells(2, 2))

'quand la valeur est trouvée , on modifie le champ 'leChamp'
.Fields("bonjour") = "xxxx"
.Update
End With

Conn.Close
End Sub

l'erreur est:"erreur type 3001: les arguments sont incorrect, en dehors des limites autorisées ou en conflit avec d'autres".

l'erreur apparaît sur la ligne .Find ("Reference="..) peut-être y en a-t-il plus lin, je n'ai pas dépassé cette commande.

A savoir qu'il y a bien une colonne Reference sur acces (j'y ai bien accès puisque j'arrive à ajouter des références) avec le bon orthographe
la référence choisie (cells(2,2)) existe bien avec les bonnes minuscules/majuscules).

merci d'avance à tous
seb
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : formule find depuis wiki michel

Bonsoir,

Il est + simple et + portable d'utiliser des requêtes SQL.

http://boisgontierjacques.free.fr/fichiers/Recordset.zip

Code:
ChDir ActiveWorkbook.Path
Dim rs As New ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=Access2000.mdb"
rs.Open "SELECT Salaire FROM client WHERE Nom_Client='Dupont'", cnn, adOpenStatic, adLockOptimistic
If Not rs.EOF Then
   rs!Salaire = 6000
   rs.Update
End If
rs.Close
cnn.Close

ou

Code:
  ChDir ActiveWorkbook.Path
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=Access2000.mdb"
  Sql = "UPDATE client SET Salaire=6000 WHERE Nom_Client='Dupont'"
  cnn.Execute Sql
  cnn.Close

JB
Formation Excel VBA JB
 
Dernière édition:

seb33

XLDnaute Junior
Re : formule find depuis wiki michel

Re-bruno

un minimum de recherche (google est ton ami):D m'ont permis de trouver la signification du chr(34)

et comme pressenti, bug sur la ligne suivante:

.Fields("bonjour") = "xxxx"

avec l'erreur bof ou eof = true (en fait comme si la colonne bonjour n'existe pas) alor squ'il n'y a aucun problème.

Bois gantier, j'ai testé, trop compliqué pour l'instant pour moi (je n'ai pas la connaissance de base, mais cela ne suppose pas que je ne vais pas l'acquérir plus tard, donc merci pour l'info)
 

seb33

XLDnaute Junior
Resolu: formule find depuis wiki michel

un grand merci à tous les 2.
Cela fonctionne pile poil comme je le souhaitais.
Voici la solution finale choisie:
Sub Modif_valeur_Access()

Dim conn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim new_value As String, Ref As String, table As String

ActiveSheet.Unprotect
Application.ScreenUpdating = False
table = "table1"

Set conn = New ADODB.Connection

With conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.Open "c:\\DBmodule.mdb"
End With
Set Rst = New ADODB.Recordset
Rst.Open table, conn, adOpenKeyset, adLockOptimistic

Ref = Sheets("Installation").Cells(2, 2).Value
new_value = Sheets("Installation").Cells(3, 2).Value
With Rst
.MoveFirst
.Find ("Reference=" & Chr(34) & (Ref) & Chr(34))
If Rst.EOF Or Rst.BOF Then
Rst.MoveLast
End If
.Fields("bonjour") = new_value
.Update
End With
Rst.Close
conn.Close

End Sub

petite question subsidiaire: si je veux changer tous les enregistrements d'une ligne (ici pour une référence donnée, tous les valeurs de réferences (bonjour, date, etc). existe-t-il une autre solution que la méthode bourrin que je m'apprête à utiliser à savoir reproduire à l'infini le bout de code:
Code:
.Fiels ("colonneàmodifier")="nouvellevaleur"
.update
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : formule find depuis wiki michel

Bonjour,

UPDATE client SET Salaire=5500, Ville='Bordeaux' WHERE Nom_Client='Dupont'

Code:
  repertoire = ThisWorkbook.Path & "\"
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & repertoire & "Access2000.mdb"
  msalaire = 5500
  mville = "Bordeaux"
  mnom = "Dupont"
  Sql = "UPDATE client SET Salaire=" & msalaire & ", Ville='" & mville & "' WHERE Nom_Client='" & mnom & "'"
  MsgBox Sql
  cnn.Execute Sql
  cnn.Close

JB
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 870
Membres
103 980
dernier inscrit
grandmasterflash38