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
Merci mille fois Denis, je m'en suis sorti, et je t en suis bien reconnaissant... A+ Xoco
-----Message d'origine----- 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
.
Merci mille fois Denis, je m'en suis sorti, et je t en
suis bien reconnaissant...
A+
Xoco
-----Message d'origine-----
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 michon@cgocable.ca> a écrit dans le
message de news:eL9Ab.19794$7C.9439@charlie.risq.qc.ca...
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" <anonymous@discussions.microsoft.com> a écrit dans
le message de news:0d5e01c3bb47$493a8570
$a401280a@phx.gbl...
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
Merci mille fois Denis, je m'en suis sorti, et je t en suis bien reconnaissant... A+ Xoco
-----Message d'origine----- 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
.
Merci michel, ca marche enfin, et grace a ton aide... Disons plutot que sans ton aide, ca aurait jamais marché, alors je t envoie plein de mercis directement du pays des mayas... a+
-----Message d'origine----- 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
'é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
.
.
.
.
Merci michel, ca marche enfin, et grace a ton aide...
Disons plutot que sans ton aide, ca aurait jamais marché,
alors je t envoie plein de mercis directement du pays des
mayas...
a+
-----Message d'origine-----
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" <michel.pierron@free.fr> a écrit dans le
message de
news:u%23NkFS4uDHA.2444@TK2MSFTNGP12.phx.gbl...
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
<anonymous@discussions.microsoft.com> a écrit dans le
message de
news:038301c3bb78$b10f37a0$a301280a@phx.gbl...
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
<anonymous@discussions.microsoft.com> a écrit dans le
message de
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=datatowrite
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
<anonymous@discussions.microsoft.com> a écrit dans le
message de
news:01a101c3bb5d$27046d20$a301280a@phx.gbl...
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" <anonymous@discussions.microsoft.com> a écrit
dans
le message de
news:0d5e01c3bb47$493a8570$a401280a@phx.gbl...
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
'é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
Merci michel, ca marche enfin, et grace a ton aide... Disons plutot que sans ton aide, ca aurait jamais marché, alors je t envoie plein de mercis directement du pays des mayas... a+
-----Message d'origine----- 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
'é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