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...
Maintenant, je peux te fournir un classeur vide dans lequel "placer les valeurs "B3" et "B4" dans les cellules B3 et B4 de la feuille "Feuil1".Pour l'exemple disons que ce serait de placer les valeurs "B3" et "B4" dans les cellules B3 et B4 de la feuille "Feuil1" d'un classeur fermé.
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 String, Cellule As String, Valeur As Variant)
Dim Cnx As Object
Dim Cmd As Object
Dim Rst As Object
Dim ErrNumber As Long
'Si pas de Reference "Microsoft ActiveX Data Objects x.x Library"
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Set Cnx = CreateObject("ADODB.Connection")
Cnx.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & Fichier & ";" & "Extended Properties=""Excel 12.0;HDR=NO;"""
Set Cmd = CreateObject("ADODB.Command")
Cmd.ActiveConnection = Cnx
Cmd.CommandText = "SELECT * FROM [" & Feuille & "$" & Cellule & ":" & Cellule & "]"
Set Rst = CreateObject("ADODB.Recordset")
On Error Resume Next
Rst.Open Cmd, , adOpenKeyset, adLockOptimistic
ErrNumber = Err.Number
On Error GoTo 0
If ErrNumber = -2147467259 Then
MsgBox "La cellule <" & Cellule & "> est hors du UsedRange de la feuille <" & Feuille & "> du fichier <" & Fichier & "> " & _
"et ne peut donc être valorisée par cette fonction !"
Exit Sub
End If
Rst(0).Value = Valeur
Rst.Update
Cnx.Close
Set Cnx = Nothing
Set Cmd = Nothing
Set Rst = Nothing
End Sub
c'est pour cela que échantillonnage est necessairevaleurs pour qu'ADO evalu le type de données.
Sub Dernière_LIgne_Tableau_De_Données_Ds_Classeur_Fermé()
Dim Fichier$, Table1, X&, Y&
Fichier = ThisWorkbook.Path & "\recepteur.xlsx" 'chemin du fichier
Table1 = "[Feuil1$]" 'Nom de la feuille est la colonne (A)
X = GetLastRow(Fichier, Table1)
MsgBox "dernière ligne de la feuille est : " & X
End Sub
Function GetLastRow(ByVal Fichier As String, ByVal TableName As String) As Long
'patricktoulon
'remplacer adUseClient par 3 si pas de ref activx data object activée
Dim Cn As Object, Rst As Object
Set Cn = CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO"";"
Set Rst = CreateObject("ADODB.RecordSet"): Rst.CursorLocation = adUseClient: Rst.Open TableName, Cn, adOpenStatic
Rst.MoveLast: GetLastRow = Rst.AbsolutePosition
Rst.Close: Cn.Close: Set Conn = Nothing: Set Rst = Nothing
End Function
Function GetLastRow(ByVal Fichier As String, ByVal TableName As String) As Long
'patricktoulon
'remplacer adUseClient par 3 si pas de ref activx data object activée
Const adUseClient = 3
Const adOpenStatic = 3
Dim Cn As Object, Rst As Object
Set Cn = CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO"";"
Set Rst = CreateObject("ADODB.RecordSet"): Rst.CursorLocation = adUseClient: Rst.Open TableName, Cn, adOpenStatic
Rst.MoveLast: GetLastRow = Rst.AbsolutePosition
Rst.Close: Cn.Close: Set Cn = Nothing: Set Rst = Nothing
End Function
En fait les base de données on des champs typés. Le fait qu'il n'y ai pas de colonnes c'est pas grave car on utilise [F1],[F2], [Etc] pour Field1;2;3...@dysorthographie,
Merci pour ta confirmation, en effet dans un classeur vide, qui était mon intention initiale, ça ne fonctionne pas et je pense comprendre en gros pourquoi. C'est donc uns restriction naturelle de la fonction ci-dessus.
Par contre ce que j'aurais aimé c'est pouvoir écrire une plage (fut-elle contigüe et que tout soit en String) plutôt qu'une simple cellule.