Se connecter avec
S'enregistrer | Connectez-vous

[Résolu] MAJ d'une table access par excel en VBA

Dernière réponse : dans Programmation

Bonjour, je vous explique mon pb.
je souhaiterai mettre a jour une table acces à partir de mon fichier excel.
pour le moment en suivant quelque conseils de ce forum j'arrive à écrire dans ma table access mais toujours à la fin de la colonne concernée.
je souhaiterai en effet réécrire sur une valeur déjà existante pour la remplacer par une autre en fonction d'un numéro de dossier.
dans mon fichier excel j'ai une colonne "numéro de dossier" avec laquel je souhaite retrouver ma ligne dans access puis une colonne "Statut" qui me permettrait de definir un état de ce numéro de dossier.
voila le code que j'utilise pour le moment qui me permet d'écrire à la fin de ma colonne:
Citation :
Sub ADOFromExcelToAccess()

Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=C:\Tables\Table.mdb;"

Set rs = New ADODB.Recordset
rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic, adCmdTable

r = 3 ' the start row in the worksheet
Do While Len(Range("F" & r).Formula) > 0

With rs
.AddNew
.Fields("Statut") = Range("D" & 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


j'ai aussi essayé ça:

Dim cd As New ADODB.Command
cd.ActiveConnection = cn
cd.CommandText = "SET 'Table1' SET 'Statut' = " & Range("D" & r).Value & " " & "WHERE 'Num_Client' = " & Range("F" & r).Value & ""

mais finalement je n'arrive pas à le faire appliquer à ma base access
voila merci pour votre aide
Lassé par la pub ? Créez un compte

merci de ta réponse, j'ai adapté en mettant:
cd.CommandText = "UPDATE Table1 SET Statut = " & "Clos" & " WHERE Num_Client = " & "123" & ""
pour faire un test et rien ne se passe ma table ne se met pas à jour :( 
je n'arrive pas à trouver pourquoi ça bloque, si quelqu'un a une idée je suis preneur
merci d'avance

Expert Programmation

Lorsque tu mets une chaine de caractères dans une table, tu dois la mettre entre quotes ('), sinon la base pense que tu fais réfèrence à un champ de la table.
Tu dois donc faire:
  1. cd.CommandText = "UPDATE Table1 SET Statut = '" & "Clos" & "' WHERE Num_Client = " & "123"


Petit PS: le & "" final ne sert à rien dans tes requêtes :) 

j'ai adapté et réduit au max juste histoire de voir si j'arrivais a faire quelque chose dans ma base access et donc ça donne :

  1. Sub ADOFromExcelToAccess()
  2.  
  3. Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
  4. Dim cd As New ADODB.Command
  5. ' connect to the Access database
  6. Set cn = New ADODB.Connection
  7. cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=C:\Tables\Enregistrement.mdb;"
  8. ' open a recordset
  9. Set rs = New ADODB.Recordset
  10. rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic, adCmdTable
  11. cd.ActiveConnection = cn
  12.  
  13. cd.CommandText = "UPDATE Table1 SET Statut = '" & "Clos" & "' WHERE Num_Client = " & "123"
  14.  
  15. MsgBox (cd.CommandText) 'debug
  16.  
  17. rs.Close
  18. Set rs = Nothing
  19. cn.Close
  20. Set cn = Nothing
  21. End Sub


et donc il ne se passe toujours rien dans la table :( 
il y a un truc qui m'échappe mais je ne vois pas quoi...

oui je l'avais mis puis retiré et pour le coup oublié de remettre lol
je l'ai donc remis et j'ai le droit a une belle erreur:
Erreur d'exécution '-2147217900 (80040e14)':

Erreur de syntaxe dans la chaine dans l'expression 'Num_Client = '123'.

une idée ?
en tout cas merci pour votre aide ça m'aide à avancer :) 
Expert Programmation

Essaie:
cd.CommandText = "UPDATE [Table1] SET [Statut] = 'Clos' WHERE [Num_Client] = 123"


Et si ça ne marche pas, vérifie le type de données de Num_Client, pour vérifier que c'est bien un nombre
Lassé par la pub ? Créez un compte
Tom's guide dans le monde