Adodb word access

Résolu
huascaran01 Messages postés 35 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 25 août 2012 - 8 août 2011 à 15:28
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 14 août 2011 à 11:32
Bonjour,

J'utilise dans mon boulot une base access et un word 2003. J'utilise la base pour faire du publipostage mais, à partir de word, j'envoie aussi des info dans accesse.
Jusqu'à présent, j'avais uniqument utilisé une macro qui envoyait des info sous forme d'un nouvel enregistrement dans access.
Le bout de macro était le suivant :


Dim rsT As ADODB.Recordset
Dim fd As ADODB.Field
Dim maTable As String

Set Conn = New ADODB.Connection
Set rsT = New ADODB.Recordset
If valeurtache = 229 Then
maTable2 = "T_Tâche_2"
tachexéc = "True"
End If


With Conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.Open "C:\base\cabinet.mdb"
End With

With rsT
.ActiveConnection = Conn
.Open maTable2, LockType:=adLockOptimistic
.AddNew
.Fields("Code_tâche_nécessaire").Value = TN
.Fields("Code_dossier").Value = valeurdossier
.Fields("Date_réalisation").Value = datetache
.Update
End With


rsT.Close
Conn.Close

Je voudrais pouvoir utiliser la macro pour modifier un enregistrement de cette table (plus concrètement, je voudrais modifier l'enregistrement sélectionné pour qu'un champ case à cocher soit affecter de "true").
Je suppose que je vais devoir virer le Addnew mais franchement je suis bloqué.
Si quelqu'un peut m'aider, ce serait génial.

Merci à tous

12 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 août 2011 à 09:07
Dim fd As ADODB.Field
Dim maTable As String 
Inutiles (je pensais pas que c'était utile de le préciser vu qu'on voit clairement qu'on ne mentionne jamais leur nom). Ou alors y'a encore d'horribles bouts de code avec rs.Update

Ici le SQL est forcé à "Update T_Tâche_2 Set tâche_exécutée=True where N°Tâche=valeurtache;". Pour faire simple, il ne s'occupe pas des variables dont tu aurais pu parler dedans (logique, vu que c'est une bête chaine entre Dguillemets). Tu dois concaténer avec &. Pas besoin de mettre la valeur du champ dans une variable si tu ne t'en sers que là : .Execute "UPDATE T_Tâche_2 SET tâche_exécutée=True WHERE N°Tâche=" & ActiveDocument.MailMerge.DataSource.DataFields(NumDetache).Value . Il faut absolument que dans la BDD, ce champ est un entier. J'espère que tu as un Option Explicit en tête de module/form sinon le reste du code ça doit pas être du joli. T'as plusieurs subs comme ça ?

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 août 2011 à 11:32
Utilise Réponse acceptée à mes réponses qui t'ont aidé, ça permettra peut-être à d'autres gens de gagner du temps (et le topic sera marqué comme résolu, plus facile pour ceux qui aident). Bon dimanche

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
9 août 2011 à 01:03
Après le .Open, fais .Execute "UPDATE maTable2 SET tonChamp=True WHERE critere=x;"

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
huascaran01 Messages postés 35 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 25 août 2012
9 août 2011 à 10:25
Merci beaucoup pour l'aide mais en fait, ça ne marche pas. Il me refuse le .execute

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
9 août 2011 à 20:03
Quelle erreur obtiens-tu ?


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
huascaran01 Messages postés 35 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 25 août 2012
9 août 2011 à 20:23
j'obtiens une erreur 461 erreur de compilation - membre de méthode ou de données introuvable.

J'avais pourtant adapter le code de la façon suivante :


Dim Conn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim fd As ADODB.Field
Dim maTable As String
Set Conn = New ADODB.Connection
Set rsT = New ADODB.Recordset

maTable2 = "T_Tâche_2"
datetache = Date
TN = 230
TB = 15
With Conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.Open "C:\base\cabinet.mdb"
End With

With rsT
.ActiveConnection = Conn
.Open maTable2, LockType:=adLockOptimistic
.Execute "update maTable2 set tâche_exécutée =true where NTâche=872"
.Update
End With

rsT.Close
Conn.Close

Le NTâche est un code artificiel pour tenter de modifier l'enregistrement 872. Evidemment dans la version non test, le NTâche est déterminé par une recherche dans la macro.
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
9 août 2011 à 20:40
Désolé de ne pas avoir précisé, je parlais du .Open de la connexion (le reste du code est inutile, à part la fermeture de la connexion et la destruction de l'objet). Pour info, tu peux faire l'insertion de la même façon via un INSERT INTO.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
huascaran01 Messages postés 35 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 25 août 2012
9 août 2011 à 21:06
rien de mieux.
J'ai pourtant modifié comme ça :


With rsT
.ActiveConnection = Conn
.Execute "update maTable2 set tâche_exécutée =true where NTâche=872"
.Update
End With

et toujours le même message. Erreur de compilation.
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
10 août 2011 à 19:29
.Open de la connexion = .Open après .Provider =xxx

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
huascaran01 Messages postés 35 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 25 août 2012
13 août 2011 à 12:17
ça marche. Merci infiniment pour ton aide.
huascaran01 Messages postés 35 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 25 août 2012
13 août 2011 à 23:09
En fait, j'ai encore un plantage.
Mon code est le suivant :


valeurtache = Val(ActiveDocument.MailMerge.DataSource.DataFields(NumDetache).Value)

Dim Conn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim fd As ADODB.Field
Dim maTable As String
Set Conn = New ADODB.Connection
Set rsT = New ADODB.Recordset
With Conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.Open "C:\base\cabinet.mdb"
.Execute "Update T_Tâche_2 Set tâche_exécutée=True where N°Tâche=valeurtache;"
End With

Superplantage.
Valeurtache est un champ d'une base access. Dans mon exemple, la valeur du champ est 871.
Si je suis ma macro, j'ai bien une valeurtache de 871. Quand j'arrive au .execute...plantage.
Si dans cette partie, je remplace le valeurtache par 871, ça marche.
Mais ce que je voudrais, c'est évidemment que mon execute utilise la valeur récupérée ailleurs.
Si tu as une idée....
huascaran01 Messages postés 35 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 25 août 2012
14 août 2011 à 10:27
oui, tu as raison, j'étais très distrait. Tout fonctionne. Merci. Pour mes codes, tu as sans doute raison. Au fur et à mesure que je développe, je rajoute du code souvent de façon anarchique et c'est pas très joli.
En tout cas merci beaucoup pour ton aide.
Rejoignez-nous