Ecrire dans cellule de classeur fermé partagé

yapson2011 Messages postés 4 Date d'inscription lundi 12 septembre 2011 Statut Membre Dernière intervention 25 septembre 2011 - 25 sept. 2011 à 19:53
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 26 sept. 2011 à 00:56
Bonsoir,

Je voudrais modifier le contenu d'un classeur fermé partagé excel 2007 via une connexion adodb. Mais tous les codes que j'ai pu avoir sur le net sont mal exécutés. Je suis nul.

Code:
Sub EcrireDansCelluleClasseurFerme()
'
Dim cn As ADODB.Connection
Dim Cd As ADODB.Command
Dim Rst As ADODB.Recordset
Dim Fichier As String

Fichier = "e:\ClasseurFermé.xlsx"
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With

Set Cd = New ADODB.Command
Cd.ActiveConnection = cn
Cd.CommandText = "SELECT * FROM [Liste$H10:H10]" 'ecrit toujours dans la même cellule

Set Rst = New ADODB.Recordset
Rst.Open Cd, , adOpenKeyset, adLockOptimistic
Rst(0).Value = "TAMARIN"
Rst.Update
cn.Close

Set cn = Nothing
Set Cd = Nothing
Set Rst = Nothing

End Sub
Ce code ne marche pas. Quel est le role de Rst et de Rst(0)?
Merci de m'aider

yapson2011

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
26 sept. 2011 à 00:56
Salut

"Ce code ne marche pas"
C'est un peu court comme explication de ton problème.

Rst est un ... RecordSet
Il faut regarder dans l'aide. Être nul n'est pas n'est pas une fatalité.
Un RecordSet est un objet qui contient la liste de tous les champs demandés lors de la requète. Les champs composent les colonnes du RecordSet alors que chaque ligne correspond à chaque série de données (si plusieurs champs)
Avant de vouloir modifier un des champs avec la valeur "TAMARIN", il faut sélectionner quelle ligne doit être modifiée. Voir les méthodes .MoveFirst, .MoveNext ...
Rst(0) voudrait dire que tu as un tableau de RecordSet, ce qui n'est pas vrai, à la ve de la déclaration.
La vraie syntaxe serait
Rst.Fields(0).Value
ou encore
Rst.Fields("NomDuChamp").Value

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous