Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ecrire dans un fichier fermé avec ADO

12 réponses
Avatar
Xoco
Bonjour a tous,=20

Je cherche a ecrire dans un fichier ferm=E9 mais a un=20
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un=20
fichier ferm=E9 en utilisant la connexion ADO, mais je ne=20
sais comment faire pour me positionner a la derniere ligne=20
du fichier ferm=E9
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur ferm=E9

Sub EcritDatas()
Dim Fich$, cell As Range
=20
Fich =3D "d:\TestAdo.xls" '=E0 adapter
=20
'=E9crit dans le classeur ferm=E9 la valeur des cellules=20
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),=20
cell.Text
Next
=20
'=E9crit en A6 la date et l'heure de l'op=E9ration
SetExternalDatas Fich, "Feuil1", "A6", "mise =E0 jour du "=20
& Now
=20
'on regarde le r=E9sultat
DoEvents
Workbooks.Open Fich
=20
End Sub

'=E9crit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur ferm=E9 DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'apr=E8s Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn =3D New ADODB.Connection
oConn.Open "Provider=3DMicrosoft.Jet.OLEDB.4.0;" & _
"Data Source=3D" & DestFile & ";" & _
"Extended Properties=3D""Excel 8.0;HDR=3DNo;"";"

' Create a command object and set its ActiveConnection
Set oCmd =3D New ADODB.Command
oCmd.ActiveConnection =3D oConn

' This SQL statement selects a cell range in=20
the "feuilleTest" worksheet.
'1 S=E9lection pour =E9crire dans une seule cellule
RangeDest =3D DestCellAdr & ":" & DestCellAdr
oCmd.CommandText =3D "SELECT * from `" & DestFeuille & "$"=20
& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS =3D New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value =3D DataToWrite
oRS.Update
=20
'Close the connection
oConn.Close
Set oConn =3D Nothing
Set oCmd =3D Nothing
Set oRS =3D Nothing

End Sub


Si vous avez une idee,=20
Meilleurs salutations...
Xoco

10 réponses

1 2
Avatar
Michel Pierron
Salut Xoco;
Essaie avec :

'* Update Row
oRS.MoveLast
oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
oRS(1).Value = DataToWrite
oRS(2).Value = 9
oRS.Update

MP

"Xoco" a écrit dans le message de
news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere ligne
du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour du "
& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$"
& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco
Avatar
Michel, ya quelque chose de bon avec ce que tu me dis,
dans la mesure ou sur mon premier test, il m'a remplacé
une valeur, mais il a inséré la date la ou je voulais,
mais apres plus rien, et il me donne une erreur :
"No se puede expandir el intervalo con nombre" (je suis au
mexique),
ce qui signifie :
"On ne peut pas développer l'intervalle avec nom"
sur ton code que j'essaie d'adapter...
Mais je bataille grave sur cette erreur...
Merci pour tes conseils, j'espere y arriver dans pas trop
longtemps...
a+
oRS.MoveLast
'oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
'oRS(1).Value = DataToWrite
'oRS(2).Value = 9
oRS.Update




-----Message d'origine-----
Salut Xoco;
Essaie avec :

'* Update Row
oRS.MoveLast
oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
oRS(1).Value = DataToWrite
oRS(2).Value = 9
oRS.Update

MP

"Xoco" a écrit dans
le message de

news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere ligne
du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour du "
& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$"
& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco


.



Avatar
Michel Pierron
Re;
C'est probablement ta définition de RangeDest qui n'est pas bonne; si tu
n'as qu'une feuille, laisse tomber DestFeuille et essaie avec:
oCmd.CommandText = "SELECT * FROM `A1:IV65536`"

MP

a écrit dans le message de
news:01a101c3bb5d$27046d20$
Michel, ya quelque chose de bon avec ce que tu me dis,
dans la mesure ou sur mon premier test, il m'a remplacé
une valeur, mais il a inséré la date la ou je voulais,
mais apres plus rien, et il me donne une erreur :
"No se puede expandir el intervalo con nombre" (je suis au
mexique),
ce qui signifie :
"On ne peut pas développer l'intervalle avec nom"
sur ton code que j'essaie d'adapter...
Mais je bataille grave sur cette erreur...
Merci pour tes conseils, j'espere y arriver dans pas trop
longtemps...
a+
oRS.MoveLast
'oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
'oRS(1).Value = DataToWrite
'oRS(2).Value = 9
oRS.Update




-----Message d'origine-----
Salut Xoco;
Essaie avec :

'* Update Row
oRS.MoveLast
oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
oRS(1).Value = DataToWrite
oRS(2).Value = 9
oRS.Update

MP

"Xoco" a écrit dans
le message de

news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere ligne
du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour du "
& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$"
& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco


.



Avatar
Michel,

Premierement, je dois te dire que je maitrise pas trop ni
Excel, ni ADO, et que je suis désolé de te demander tout
ca, tu m'as deja bcp aidé et je t en remercie, parce que
j'ai posté sur bcp de forum, et tu es le seul a m avoir
repondu...

Peux tu me donner encore une toute ptite info...
Effectivement, ca le fait,mais ce que je craignais arriva,
a savoir, qu'il fait un movenext, et un addnew pour chaque
element, or, moi je veux insérer une ligne entiere, et non
un colonne...
En gros, il faudrait que je puisse definir une condition
genre : "si c la premiere cellule du lot, addnew, sinon,
insere dans la cellule a droite"

Si j'ai bien compris, pour inserer sur une seul ligne,
je dois utiliser ors(0),ors(1),etc...
Le pb, c qu'il me sort une erreur sur:
ors(1).valueÚtatowrite
en me disant En Francais (donc d'origine ODBC, j'imagine
puisque je l'ai ajouté en francais,et que le systeme est
espagnol)
"Impossible de trouver l'objet dans la collection
correspondant au nom ou a la reference ordinale (1)
demandé", en gros, il existe pas ors(1)...

Et moi, je m'y perds un peu, mais pire, je me sens un peu
démuni :)
Bref, je continue, je continue, et merci pour ton aide...
Julien




-----Message d'origine-----
Re;
C'est probablement ta définition de RangeDest qui n'est
pas bonne; si tu

n'as qu'une feuille, laisse tomber DestFeuille et essaie
avec:

oCmd.CommandText = "SELECT * FROM `A1:IV65536`"

MP

a écrit dans le
message de

news:01a101c3bb5d$27046d20$
Michel, ya quelque chose de bon avec ce que tu me dis,
dans la mesure ou sur mon premier test, il m'a remplacé
une valeur, mais il a inséré la date la ou je voulais,
mais apres plus rien, et il me donne une erreur :
"No se puede expandir el intervalo con nombre" (je suis au
mexique),
ce qui signifie :
"On ne peut pas développer l'intervalle avec nom"
sur ton code que j'essaie d'adapter...
Mais je bataille grave sur cette erreur...
Merci pour tes conseils, j'espere y arriver dans pas trop
longtemps...
a+
oRS.MoveLast
'oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
'oRS(1).Value = DataToWrite
'oRS(2).Value = 9
oRS.Update




-----Message d'origine-----
Salut Xoco;
Essaie avec :

'* Update Row
oRS.MoveLast
oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
oRS(1).Value = DataToWrite
oRS(2).Value = 9
oRS.Update

MP

"Xoco" a écrit dans
le message de

news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere
ligne


du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour
du "


& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille
& "$"


& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco


.




.




Avatar
Michel Pierron
Re moi;
Lorsque tu précises oRS.AddNew, tu demandes à écrire une nouvelle ligne dans
laquelle oRS(0) est la première cellule, oRS(1) la deuxième et ainsi de
suite sur la largeur de plage définie; ensuite, oRS.Update entérine les
données que tu viens d'inscrire. Si tu veux ajouter une nouvelle ligne, il
faut repréciser réitérer le processus avec oRS.AddNew etc...
MP

a écrit dans le message de
news:045a01c3bb72$0848a3f0$
Michel,

Premierement, je dois te dire que je maitrise pas trop ni
Excel, ni ADO, et que je suis désolé de te demander tout
ca, tu m'as deja bcp aidé et je t en remercie, parce que
j'ai posté sur bcp de forum, et tu es le seul a m avoir
repondu...

Peux tu me donner encore une toute ptite info...
Effectivement, ca le fait,mais ce que je craignais arriva,
a savoir, qu'il fait un movenext, et un addnew pour chaque
element, or, moi je veux insérer une ligne entiere, et non
un colonne...
En gros, il faudrait que je puisse definir une condition
genre : "si c la premiere cellule du lot, addnew, sinon,
insere dans la cellule a droite"

Si j'ai bien compris, pour inserer sur une seul ligne,
je dois utiliser ors(0),ors(1),etc...
Le pb, c qu'il me sort une erreur sur:
ors(1).valueÚtatowrite
en me disant En Francais (donc d'origine ODBC, j'imagine
puisque je l'ai ajouté en francais,et que le systeme est
espagnol)
"Impossible de trouver l'objet dans la collection
correspondant au nom ou a la reference ordinale (1)
demandé", en gros, il existe pas ors(1)...

Et moi, je m'y perds un peu, mais pire, je me sens un peu
démuni :)
Bref, je continue, je continue, et merci pour ton aide...
Julien




-----Message d'origine-----
Re;
C'est probablement ta définition de RangeDest qui n'est
pas bonne; si tu

n'as qu'une feuille, laisse tomber DestFeuille et essaie
avec:

oCmd.CommandText = "SELECT * FROM `A1:IV65536`"

MP

a écrit dans le
message de

news:01a101c3bb5d$27046d20$
Michel, ya quelque chose de bon avec ce que tu me dis,
dans la mesure ou sur mon premier test, il m'a remplacé
une valeur, mais il a inséré la date la ou je voulais,
mais apres plus rien, et il me donne une erreur :
"No se puede expandir el intervalo con nombre" (je suis au
mexique),
ce qui signifie :
"On ne peut pas développer l'intervalle avec nom"
sur ton code que j'essaie d'adapter...
Mais je bataille grave sur cette erreur...
Merci pour tes conseils, j'espere y arriver dans pas trop
longtemps...
a+
oRS.MoveLast
'oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
'oRS(1).Value = DataToWrite
'oRS(2).Value = 9
oRS.Update




-----Message d'origine-----
Salut Xoco;
Essaie avec :

'* Update Row
oRS.MoveLast
oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
oRS(1).Value = DataToWrite
oRS(2).Value = 9
oRS.Update

MP

"Xoco" a écrit dans
le message de

news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere
ligne


du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour
du "


& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille
& "$"


& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco


.




.




Avatar
J'ai compris ca...
Mais il prends bien ors(0), mais des que j'essaie
d'affecter une valeur a ors(x) ou x>0, il plante en disant
le message que je t'ai mis sur le message precedent.
Pt etre bien que c comme les tableau, et qu'il faut que je
declare la taille de ors, mais je sais pas ou le faire....
En tout cas, tu dois pas etre loin de te coucher, alors
Bonne nuit (ici, il est 15.40 alors on continue a bosser :(
A+


-----Message d'origine-----
Re moi;
Lorsque tu précises oRS.AddNew, tu demandes à écrire une
nouvelle ligne dans

laquelle oRS(0) est la première cellule, oRS(1) la
deuxième et ainsi de

suite sur la largeur de plage définie; ensuite,
oRS.Update entérine les

données que tu viens d'inscrire. Si tu veux ajouter une
nouvelle ligne, il

faut repréciser réitérer le processus avec oRS.AddNew
etc...

MP

a écrit dans le
message de

news:045a01c3bb72$0848a3f0$
Michel,

Premierement, je dois te dire que je maitrise pas trop ni
Excel, ni ADO, et que je suis désolé de te demander tout
ca, tu m'as deja bcp aidé et je t en remercie, parce que
j'ai posté sur bcp de forum, et tu es le seul a m avoir
repondu...

Peux tu me donner encore une toute ptite info...
Effectivement, ca le fait,mais ce que je craignais arriva,
a savoir, qu'il fait un movenext, et un addnew pour chaque
element, or, moi je veux insérer une ligne entiere, et non
un colonne...
En gros, il faudrait que je puisse definir une condition
genre : "si c la premiere cellule du lot, addnew, sinon,
insere dans la cellule a droite"

Si j'ai bien compris, pour inserer sur une seul ligne,
je dois utiliser ors(0),ors(1),etc...
Le pb, c qu'il me sort une erreur sur:
ors(1).valueÚtatowrite
en me disant En Francais (donc d'origine ODBC, j'imagine
puisque je l'ai ajouté en francais,et que le systeme est
espagnol)
"Impossible de trouver l'objet dans la collection
correspondant au nom ou a la reference ordinale (1)
demandé", en gros, il existe pas ors(1)...

Et moi, je m'y perds un peu, mais pire, je me sens un peu
démuni :)
Bref, je continue, je continue, et merci pour ton aide...
Julien




-----Message d'origine-----
Re;
C'est probablement ta définition de RangeDest qui n'est
pas bonne; si tu

n'as qu'une feuille, laisse tomber DestFeuille et essaie
avec:

oCmd.CommandText = "SELECT * FROM `A1:IV65536`"

MP

a écrit dans le
message de

news:01a101c3bb5d$27046d20$
Michel, ya quelque chose de bon avec ce que tu me dis,
dans la mesure ou sur mon premier test, il m'a remplacé
une valeur, mais il a inséré la date la ou je voulais,
mais apres plus rien, et il me donne une erreur :
"No se puede expandir el intervalo con nombre" (je suis
au


mexique),
ce qui signifie :
"On ne peut pas développer l'intervalle avec nom"
sur ton code que j'essaie d'adapter...
Mais je bataille grave sur cette erreur...
Merci pour tes conseils, j'espere y arriver dans pas trop
longtemps...
a+
oRS.MoveLast
'oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
'oRS(1).Value = DataToWrite
'oRS(2).Value = 9
oRS.Update




-----Message d'origine-----
Salut Xoco;
Essaie avec :

'* Update Row
oRS.MoveLast
oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
oRS(1).Value = DataToWrite
oRS(2).Value = 9
oRS.Update

MP

"Xoco" a écrit
dans



le message de
news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere
ligne


du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour
du "


& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille
& "$"


& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco


.




.




.





Avatar
Michel Pierron
Encore moi;
Est-ce que par hasard, ton fichier est vierge ?
Il faut que dans le fichier dans lequel tu veux écrire, qu'au minimum, la
cellule A1 contienne une valeur.
MP

a écrit dans le message de
news:038301c3bb78$b10f37a0$
J'ai compris ca...
Mais il prends bien ors(0), mais des que j'essaie
d'affecter une valeur a ors(x) ou x>0, il plante en disant
le message que je t'ai mis sur le message precedent.
Pt etre bien que c comme les tableau, et qu'il faut que je
declare la taille de ors, mais je sais pas ou le faire....
En tout cas, tu dois pas etre loin de te coucher, alors
Bonne nuit (ici, il est 15.40 alors on continue a bosser :(
A+


-----Message d'origine-----
Re moi;
Lorsque tu précises oRS.AddNew, tu demandes à écrire une
nouvelle ligne dans

laquelle oRS(0) est la première cellule, oRS(1) la
deuxième et ainsi de

suite sur la largeur de plage définie; ensuite,
oRS.Update entérine les

données que tu viens d'inscrire. Si tu veux ajouter une
nouvelle ligne, il

faut repréciser réitérer le processus avec oRS.AddNew
etc...

MP

a écrit dans le
message de

news:045a01c3bb72$0848a3f0$
Michel,

Premierement, je dois te dire que je maitrise pas trop ni
Excel, ni ADO, et que je suis désolé de te demander tout
ca, tu m'as deja bcp aidé et je t en remercie, parce que
j'ai posté sur bcp de forum, et tu es le seul a m avoir
repondu...

Peux tu me donner encore une toute ptite info...
Effectivement, ca le fait,mais ce que je craignais arriva,
a savoir, qu'il fait un movenext, et un addnew pour chaque
element, or, moi je veux insérer une ligne entiere, et non
un colonne...
En gros, il faudrait que je puisse definir une condition
genre : "si c la premiere cellule du lot, addnew, sinon,
insere dans la cellule a droite"

Si j'ai bien compris, pour inserer sur une seul ligne,
je dois utiliser ors(0),ors(1),etc...
Le pb, c qu'il me sort une erreur sur:
ors(1).valueÚtatowrite
en me disant En Francais (donc d'origine ODBC, j'imagine
puisque je l'ai ajouté en francais,et que le systeme est
espagnol)
"Impossible de trouver l'objet dans la collection
correspondant au nom ou a la reference ordinale (1)
demandé", en gros, il existe pas ors(1)...

Et moi, je m'y perds un peu, mais pire, je me sens un peu
démuni :)
Bref, je continue, je continue, et merci pour ton aide...
Julien




-----Message d'origine-----
Re;
C'est probablement ta définition de RangeDest qui n'est
pas bonne; si tu

n'as qu'une feuille, laisse tomber DestFeuille et essaie
avec:

oCmd.CommandText = "SELECT * FROM `A1:IV65536`"

MP

a écrit dans le
message de

news:01a101c3bb5d$27046d20$
Michel, ya quelque chose de bon avec ce que tu me dis,
dans la mesure ou sur mon premier test, il m'a remplacé
une valeur, mais il a inséré la date la ou je voulais,
mais apres plus rien, et il me donne une erreur :
"No se puede expandir el intervalo con nombre" (je suis
au


mexique),
ce qui signifie :
"On ne peut pas développer l'intervalle avec nom"
sur ton code que j'essaie d'adapter...
Mais je bataille grave sur cette erreur...
Merci pour tes conseils, j'espere y arriver dans pas trop
longtemps...
a+
oRS.MoveLast
'oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
'oRS(1).Value = DataToWrite
'oRS(2).Value = 9
oRS.Update




-----Message d'origine-----
Salut Xoco;
Essaie avec :

'* Update Row
oRS.MoveLast
oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
oRS(1).Value = DataToWrite
oRS(2).Value = 9
oRS.Update

MP

"Xoco" a écrit
dans



le message de
news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere
ligne


du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour
du "


& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille
& "$"


& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco


.




.




.





Avatar
Michel Pierron
Et j'irai même plus loin, pour que ça marche, il faut qu'au moins 1 ligne
contienne autant de valeurs que tu veux en écrire.
C'est à dire que si tu veux écrire dans 5 cellules, il faut que la plage
A1:A5 contienne déjà des valeurs.
MP

"Michel Pierron" a écrit dans le message de
news:u%
Encore moi;
Est-ce que par hasard, ton fichier est vierge ?
Il faut que dans le fichier dans lequel tu veux écrire, qu'au minimum, la
cellule A1 contienne une valeur.
MP

a écrit dans le message de
news:038301c3bb78$b10f37a0$
J'ai compris ca...
Mais il prends bien ors(0), mais des que j'essaie
d'affecter une valeur a ors(x) ou x>0, il plante en disant
le message que je t'ai mis sur le message precedent.
Pt etre bien que c comme les tableau, et qu'il faut que je
declare la taille de ors, mais je sais pas ou le faire....
En tout cas, tu dois pas etre loin de te coucher, alors
Bonne nuit (ici, il est 15.40 alors on continue a bosser :(
A+


-----Message d'origine-----
Re moi;
Lorsque tu précises oRS.AddNew, tu demandes à écrire une
nouvelle ligne dans

laquelle oRS(0) est la première cellule, oRS(1) la
deuxième et ainsi de

suite sur la largeur de plage définie; ensuite,
oRS.Update entérine les

données que tu viens d'inscrire. Si tu veux ajouter une
nouvelle ligne, il

faut repréciser réitérer le processus avec oRS.AddNew
etc...

MP

a écrit dans le
message de

news:045a01c3bb72$0848a3f0$
Michel,

Premierement, je dois te dire que je maitrise pas trop ni
Excel, ni ADO, et que je suis désolé de te demander tout
ca, tu m'as deja bcp aidé et je t en remercie, parce que
j'ai posté sur bcp de forum, et tu es le seul a m avoir
repondu...

Peux tu me donner encore une toute ptite info...
Effectivement, ca le fait,mais ce que je craignais arriva,
a savoir, qu'il fait un movenext, et un addnew pour chaque
element, or, moi je veux insérer une ligne entiere, et non
un colonne...
En gros, il faudrait que je puisse definir une condition
genre : "si c la premiere cellule du lot, addnew, sinon,
insere dans la cellule a droite"

Si j'ai bien compris, pour inserer sur une seul ligne,
je dois utiliser ors(0),ors(1),etc...
Le pb, c qu'il me sort une erreur sur:
ors(1).valueÚtatowrite
en me disant En Francais (donc d'origine ODBC, j'imagine
puisque je l'ai ajouté en francais,et que le systeme est
espagnol)
"Impossible de trouver l'objet dans la collection
correspondant au nom ou a la reference ordinale (1)
demandé", en gros, il existe pas ors(1)...

Et moi, je m'y perds un peu, mais pire, je me sens un peu
démuni :)
Bref, je continue, je continue, et merci pour ton aide...
Julien




-----Message d'origine-----
Re;
C'est probablement ta définition de RangeDest qui n'est
pas bonne; si tu

n'as qu'une feuille, laisse tomber DestFeuille et essaie
avec:

oCmd.CommandText = "SELECT * FROM `A1:IV65536`"

MP

a écrit dans le
message de

news:01a101c3bb5d$27046d20$
Michel, ya quelque chose de bon avec ce que tu me dis,
dans la mesure ou sur mon premier test, il m'a remplacé
une valeur, mais il a inséré la date la ou je voulais,
mais apres plus rien, et il me donne une erreur :
"No se puede expandir el intervalo con nombre" (je suis
au


mexique),
ce qui signifie :
"On ne peut pas développer l'intervalle avec nom"
sur ton code que j'essaie d'adapter...
Mais je bataille grave sur cette erreur...
Merci pour tes conseils, j'espere y arriver dans pas trop
longtemps...
a+
oRS.MoveLast
'oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
'oRS(1).Value = DataToWrite
'oRS(2).Value = 9
oRS.Update




-----Message d'origine-----
Salut Xoco;
Essaie avec :

'* Update Row
oRS.MoveLast
oRS(0).Value = DataToWrite
oRS.Update
'* Add a new row
oRS.AddNew
oRS(0).Value = Date
oRS(1).Value = DataToWrite
oRS(2).Value = 9
oRS.Update

MP

"Xoco" a écrit
dans



le message de
news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere
ligne


du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour
du "


& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille
& "$"


& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco


.




.




.









Avatar
Denis Michon
Bonsoir Xoco,

Voici un exemple :

Pour exporter la plage de cellules A1:C10 de la feuille 2 du classeur actuel dans lequel se trouve cette procédure dans le
classeur suivant qui est fermé : "C:Excel.Ado.xls"

Voici une façon de faire et quelques commentaires :

A ) Ça prend au moins une ligne de données dans la feuille de destination du classeur. Cette première ligne va délimiter le
nombre de champs contenu dans la requête.

B ) voici la requête : " Select * from [Feuil1$] "
comme j'ai utilisé la feuille au complet, toutes les colonnes ne recevant pas de données doivent être libre de formatage
....sinon elle risque de faire parti de la requête et la copie se fera pas au bon endroit.

C ) la première ligne de données que tu insères doit avoir un TYPE de données qui correspond aux données de la colonnes que
tu veux exporter.

D ) Tu dois ajouter à ton projet la bibliothèque suivante :
"Microsoft activex objects 2.0 librairy"

E ) Cette façon de procéder, te permet d'ajouter des données dans le classeur de destination, sur la feuille de ton choix,
sans connaître quelle était la dernière ligne contenant des données, et sans avoir besoin de spécifier une adresse de
destination particulière.


'-------------------------------------
Sub Miseàjour()

Dim Conn As Connection, Rst As New ADODB.Recordset
Dim B As Integer, A As Integer, Rg As Range, Fichier As String

Fichier = "C:excelADO.xls"

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"""

Rst.Open "Select * from [Feuil1$] ", Conn, _
adOpenKeyset, adLockOptimistic

If Rst.RecordCount > 0 Then
Rst.MoveFirst
End If

With Worksheets("Feuil2")
Set Rg = .Range("A1:C10")
End With
B = Rg.Rows.Count
For A = 1 To B
Rst.AddNew
Rst.Fields(0) = Rg.Item(A, 1)
Rst.Fields(1) = Rg.Item(A, 2)
Rst.Fields(2) = Rg.Item(A, 3)
Rst.Update
Rst.MoveNext
Next
Rst.Close: Conn.Close
Set Rst = Nothing
Set Conn = Nothing

End Sub
'-------------------------------------


Salutations!




"Xoco" a écrit dans le message de news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere ligne
du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour du "
& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$"
& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco
Avatar
Denis Michon
En supplément, Si tu veux avoir des étiquettes de colonnes qui soit du texte dans la première ligne, formate expressément la
deuxième ligne avec le type de données que doit contenir cette colonne ( chacune des cellules doit avoir un format) , et ces
formats seront respectés lors de l'exportation des données. Cependant, les données débuteront en ligne 3 et non en ligne 2.

Salutations!



"Denis Michon" <denis a écrit dans le message de news:eL9Ab.19794$
Bonsoir Xoco,

Voici un exemple :

Pour exporter la plage de cellules A1:C10 de la feuille 2 du classeur actuel dans lequel se trouve cette procédure dans le
classeur suivant qui est fermé : "C:Excel.Ado.xls"

Voici une façon de faire et quelques commentaires :

A ) Ça prend au moins une ligne de données dans la feuille de destination du classeur. Cette première ligne va délimiter le
nombre de champs contenu dans la requête.

B ) voici la requête : " Select * from [Feuil1$] "
comme j'ai utilisé la feuille au complet, toutes les colonnes ne recevant pas de données doivent être libre de formatage
....sinon elle risque de faire parti de la requête et la copie se fera pas au bon endroit.

C ) la première ligne de données que tu insères doit avoir un TYPE de données qui correspond aux données de la colonnes que
tu veux exporter.

D ) Tu dois ajouter à ton projet la bibliothèque suivante :
"Microsoft activex objects 2.0 librairy"

E ) Cette façon de procéder, te permet d'ajouter des données dans le classeur de destination, sur la feuille de ton choix,
sans connaître quelle était la dernière ligne contenant des données, et sans avoir besoin de spécifier une adresse de
destination particulière.


'-------------------------------------
Sub Miseàjour()

Dim Conn As Connection, Rst As New ADODB.Recordset
Dim B As Integer, A As Integer, Rg As Range, Fichier As String

Fichier = "C:excelADO.xls"

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"""

Rst.Open "Select * from [Feuil1$] ", Conn, _
adOpenKeyset, adLockOptimistic

If Rst.RecordCount > 0 Then
Rst.MoveFirst
End If

With Worksheets("Feuil2")
Set Rg = .Range("A1:C10")
End With
B = Rg.Rows.Count
For A = 1 To B
Rst.AddNew
Rst.Fields(0) = Rg.Item(A, 1)
Rst.Fields(1) = Rg.Item(A, 2)
Rst.Fields(2) = Rg.Item(A, 3)
Rst.Update
Rst.MoveNext
Next
Rst.Close: Conn.Close
Set Rst = Nothing
Set Conn = Nothing

End Sub
'-------------------------------------


Salutations!




"Xoco" a écrit dans le message de news:0d5e01c3bb47$493a8570$
Bonjour a tous,

Je cherche a ecrire dans un fichier fermé mais a un
emplacement dynamique, comme la derniere ligne...

grace a la macro de Rob Bovey, je sais ecrire dans un
fichier fermé en utilisant la connexion ADO, mais je ne
sais comment faire pour me positionner a la derniere ligne
du fichier fermé
voici le code de Rob Bovey


' 2 - Ecrire dans un classeur fermé

Sub EcritDatas()
Dim Fich$, cell As Range

Fich = "d:TestAdo.xls" 'à adapter

'écrit dans le classeur fermé la valeur des cellules
A1:A5
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Feuil1").Range
("A1:A5")
SetExternalDatas Fich, "Feuil1", cell.Address(0, 0),
cell.Text
Next

'écrit en A6 la date et l'heure de l'opération
SetExternalDatas Fich, "Feuil1", "A6", "mise à jour du "
& Now

'on regarde le résultat
DoEvents
Workbooks.Open Fich

End Sub

'écrit DataToWrite dans la cellule DestCellAdr
'de la feuille DestFeuille du classeur fermé DestFile
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim oConn As ADODB.Connection
Dim oCmd As ADODB.Command
Dim oRS As ADODB.Recordset
Dim RangeDest
'd'après Rob Bovey, mpep

' Open a connection to the Excel spreadsheet
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"

' Create a command object and set its ActiveConnection
Set oCmd = New ADODB.Command
oCmd.ActiveConnection = oConn

' This SQL statement selects a cell range in
the "feuilleTest" worksheet.
'1 Sélection pour écrire dans une seule cellule
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$"
& RangeDest & "`"

' Open a recordset containing the worksheet data.
Set oRS = New ADODB.Recordset
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic

' Update last row
oRS(0).Value = DataToWrite
oRS.Update

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRS = Nothing

End Sub


Si vous avez une idee,
Meilleurs salutations...
Xoco
1 2