Probleme d'écriture avec ADODB
Bonjour,
Je viens vers vous car je rencontre un problème très agassant.
Je souhaite lire et écrire dans un fichier excel fermé. J'utilse donc la méthode ADODB.recordset.
Or elle ne fonctionne pas tout le temps et je ne comprend pas du tout pourquoi.
Voici un exemple du code utilisé si cela peux vous aider.
Lorsque j'ouvre la connexion Rst via cd (SELECT * FROM) et que je souhaite effacer le contenu de ma cellule source avec Rst(0), je vérifie avec un espion le changement de valeur, il passe de "une valeur" à NULL donc tout va bien, j'effectue le Rst.Update pour mise à jour du recordset de destination.
Mais quand j'actualise la connection, le Rst(0) a garder l'ancienne valeur...
Je ne sais pas si je suis assez clair.
Merci pour le temps que vous pourrez m'accorder.
'Activation des outils ADO
Dim Cn As ADODB.Connection
Dim cd As ADODB.Command
Dim Rst As ADODB.Recordset
Set Cn = New ADODB.Connection
Set cd = New ADODB.Command
Set Rst = New ADODB.Recordset
'connexion au fichier partagé
fichier = Sheets("données").Cells(2, 2).Value & "\" & Sheets("données").Cells(2, 3).Value
With Cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With
'mise à jour de la cellule dans le fichier partagé
cellule = Cells(l, c).Address(0, 0)
cellule = cellule & ":" & cellule
cd.ActiveConnection = Cn
cd.CommandText = "SELECT * FROM [" & f & "$" & cellule & "]"
Rst.Open cd, , adOpenKeyset, adLockOptimistic
Rst(0).Value = ""
Rst.Update
DoEvents
'déconnexion du fichier partagé
Cn.Close
'Libération des outils ADO
Set Cn = Nothing
Set cd = Nothing
Set Rst = Nothing
Bonjour,
Visiblement tu confonds requête SQL et valeurs du tableau.
* Ta requête SQL de type SELECT effectue une simple lecture de données et place son résultat dans ton tableau Rst.
* Tu peux faire toutes les modif possibles dans ton tableau (qui reste 'virtuel'), il est normal que les données initiales restent intactes (encore une fois SELECT est uniquement une lecture).
Maintenant si tu souhaites faire une modif de données, il suffit de faire une requête SQL de type UPDATE dont la syntaxe est :
UPDATE table SET entête='valeur-de-mise-à-jour' WHERE condition
Pour une nouvelle ligne de donnée ce sera un INSERT
(Et si tu veux du code plus précis, il faudrait indiquer la structure de ton fichier de données)
Pierre
Pourtant la modification s'effectue bien de temps en temps.
Je viens de vérifier, sa fonctionne bien, puis quand sa commence a ne plus marcher sur une feuille sa marche sur une autre. Et si je veux que sa fonctionne sur la feuille précédente je dois redémarrer mon pc...
Je vais essayer avec UPDATE, tu aurais la syntaxe d'une ligne de code stp ?
La structure de mon fichier source est très simple, c'est un fichier Excel avec une feuille nommées base de données.
Merci pour ton aide
Tiens, c'est cado.
Voici un fichier démo pour des INSERT ET UPDATE.
L'idée est d'avoir un Query générique qui sert à tous types de requêtes, et 2 fonctions génériques aussi pour les insert et update (voir module SQL).
Dans le module Démo, 3 procédures :
* une procédure init pour placer le nom du fichier dans une variable (ici c'est le fichier en cours, mais tu peux mettre le chemin et le fichier que tu veux)
* et 2 procédures demo_update et demo_insert écrites à minima pour l'exemple
Le tout est fonctionnel.
Pour des requêtes plus étoffées, nul besoin de modifier le contenu du module SQL, il suffit d'adapter les procédures demo_update et demo_insert à ton besoin.
Et vois comme un update devient simple :
Sub Demo_update()
Dim result As Long
Init
result = Update_XL("Feuil1", "Nom='TEST'", "Id=3")
If result >= 0 Then MsgBox "Ok, c'est bon!" Else MsgBox "C'est la loose"
End Sub
Pierre
Je regarde tout de suite et te tiens au courant, merci pour ton aide
Merci cela me sera très utile