Bonjour à tous,
Si je peux me permettre, on pourrait peut être aborder le problème d'une autre façon.
1/ Si j'ai bien compris, depuis Access on veux alimenter un fichier Excel. C'est bien ça?
2/ Si tout va bien l'onglet Excel est structuré en une colonne par champs, une ligne par enregistrement. C'est bien ça?
3/ Visiblement la méthode souhaitée passe par de l'ADODB. C'est bien ça?
Si j'ai bon sur les 3 questions précédentes, pourquoi ne pas utiliser un bon vieux INSERT classique du SQL?
Par ailleurs simple remarque, ACE est bien pour aller vers Access, mais pour se connecter vers Excel, MSDASQL est plus adapté, avec un truc genre :
Cnx.Provider = "MSDASQL"
Cnx.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"DBQ=" & Fichier & "; ReadOnly=False;"
Ceci étant dit, si le souhait est de récupérer le n° de la première ligne vide de l'onglet Excel, on peut écrire une p'tite fonction :
Function Derniere_ligne()
Dim Cnx As Object, Rst As Object
Dim Fichier As String, NomFeuille As String
Fichier = "C:\Users\isabelle\Documents\test ADODB\Data_Demo_ADO.xlsx" 'à adapter
NomFeuille = "Donnees" 'à adapter
Set Cnx = CreateObject("ADODB.Connection")
Cnx.Provider = "MSDASQL"
Cnx.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"DBQ=" & Fichier & "; ReadOnly=False;"
Set Rst = CreateObject("ADODB.Recordset")
Rst.Open "SELECT * FROM [" & NomFeuille & "$]", Cnx, 3
Derniere_ligne = Rst.RecordCount + 2
Rst.Close
Cnx.Close
Set Cnx = Nothing
Set Rst = Nothing
End Function
Avec un appel du genre :
Sub test()
Dim Rng As Range
Set Rng = Sheets("Resultats").Range("A" & Derniere_ligne)
MsgBox Rng.Address
End Sub
Pierre