Option Explicit
Sub Test()
Dim Fichier As String
Dim Feuille As String
Dim Cellule As String
Dim Valeur As Variant
Fichier = "F:\Téléchargements\Classeur1.xlsx"
Feuille = "Feuil1"
Cellule = "G3"
Valeur = "Donnée XX"
Call ÉcrireDansCelluleClasseurFermé(Fichier, Feuille, Cellule, Valeur)
End Sub
'----------------------------------------------------------------------
'Permet d'écrire dans une cellule d'une feuille d'un classeur fermé.
'Attention ! La cellule cible doit être dans le UsedRange de la feuille
' ou être A1 si la feuille cible est vide.
'----------------------------------------------------------------------
Sub ÉcrireDansCelluleClasseurFermé(Fichier As String, Feuille As...
Sub test()
Dim cn As String, Sql As String
Const Fichier = "C:\Myrep\Classeur vide.xlsx", AvecTitre = False
cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=" & Array("No", "YES")(Abs(AvecTitre)) & ";"""
Sql = "Insert Into [Feuil1$A1:C100] ([F1],[F2],[F3]) values(?,?,?);"
Set a = ExecuteRequete(Sql, cn, "[F1]", "TOTO", "[F2]", "1234", "[F3]", "titi")
End Sub
Function ExecuteRequete(Sql As String, cn As String, ParamArray Param() As Variant) As Object
Dim I As Integer
With CreateObject("ADODB.Command")
.ActiveConnection = cn
.CommandType = 1
.CommandTimeout = 500
.CommandText = Sql
For I = LBound(Param) To UBound(Param) Step 2
Set prm = CreateObject("ADODB.Parameter")
prm.Name = Param(I): prm.Value = Param(I + 1): prm.Type = 12
.Parameters.Append prm
Next
Set ExecuteRequete = .Execute
End With
End Function
Sub test()
Dim Cn As String, Sql As String
Const Fichier = "C:\Myrep\1 exemple ecriture dans fichier fermé\1 exemple ecriture dans fichier fermé\exemple ADO ajouter une ligne dans un range ou un tableau structuré\destination.xlsx", AvecTitre = True
Cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=" & Array("No", "YES")(Abs(AvecTitre)) & ";"""
Sql = "Insert Into [Feuil1$] ([nom], [prenom],[Tel]) values(?,?,?);
Set a = ExecuteRequete(Sql, Cn, "[nom]", "TOTO", "[prenom]", "1234", "[Tel]", "060606")
Sql = "select * from [Feuil1$] where [nom]=?"
Set a = ExecuteRequete(Sql, Cn, "[nom]", "TOTO")
End Sub
Function ExecuteRequete(Sql As String, Cn As String, ParamArray Param() As Variant) As Object
Dim I As Integer
With CreateObject("ADODB.Command")
.ActiveConnection = Cn
.CommandType = 1
.CommandTimeout = 500
.CommandText = Sql
For I = LBound(Param) To UBound(Param) Step 2
Set prm = CreateObject("ADODB.Parameter")
prm.Name = Param(I): prm.Value = Param(I + 1): prm.Type = 12
.Parameters.Append prm
Next
Set ExecuteRequete = .Execute
End With
End Function
en fait adodb vérifie sur les quelque ligne que le fichier fermé contient pour définir le nombre de colonnes et leur Type!Alors si le classeur est vide, on peut quand même écrire en A1. C'est tout !
Ce qui rejoint ce que rapporte @dysorthographie.
prm.Name = Param(I): prm.Value = Param(I + 1): prm.Type = 12