Bonjour Michel, Francis
La macro fonctionne avec ma démo que tu as récupéré .
Dans le classeur cible que tu as créé ( sur la démo, son nom est ferme_ado), 'ecrit' est une zone NOMMEE d'une colonne, 2 lignes, la première ligne portant une étiquette.
Pour mémoire:
Option Explicit
' Etudié d'après exemples tirés des forums mpep et mpfe trouvés sur le site de Frédéric Sigonneau:
www.perso.wanadoo.fr/frederic.sigonneau
' réalisé sous Office 2000
' Michel_M, modifié en septembre 04
Function FichOuvert(F As String) As Boolean
'Auteur: Didier_mdf sur forum
www.Excel-downloads.com (merci)
Dim Wk As Workbook
On Error Resume Next
Set Wk = Workbooks(F) '(Merci à Ti pour cette astuce)
On Error GoTo 0
FichOuvert = Not Wk Is Nothing
End Function
Sub ecrire_cellule_dans_fermé()
'écrit la valeur de 'G2' dans classeur fermé
Dim source As ADODB.Connection
Dim externe As ADODB.Recordset
Dim valeur As Variant
Dim fichier As String, nom_plage As String, texte_SQL As String
'teste si le classeur source est fermé
If FichOuvert('fermé_ado.xls') = True Then
MsgBox 'Pour que l'opération demandée soit effectuée,' & vbCr & _
'Le classeur ''fermé_ado.xls'' doit être fermé. ', vbCritical
Exit Sub
End If
' affecte la valeur à écrire dans fermé.xls
valeur = Range('G2').Value
' ouvre la database 'source' dans le classeur excel fermé
fichier = ActiveWorkbook.Path & '\\fermé_ado.xls'
Set source = New ADODB.Connection
source.Open 'Provider = Microsoft.Jet.OLEDB.4.0;' & _
'data source=' & fichier & ';' & _
'extended properties=''Excel 8.0;'''
nom_plage = 'ecrit'
' requete SQL de la cellule de destination; 'nom_plage' est une 'vraie-fausse base _
de données': une étiquette,une ligne
texte_SQL = 'SELECT * FROM [' & nom_plage & '];'
Set externe = New Recordset
externe.Open texte_SQL, source, adOpenKeyset, adLockOptimistic
'externe.MoveFirst
externe.Fields(0) = valeur
externe.Update
externe.Close
source.Close
MsgBox 'opération terminée'
End Sub
A+
Michel