ADO, écriture fichier fermé et plage variable ..... help please
14 réponses
Patrednef
Bonjour aux gentils contributeurs de ce forum,
J'utilise ce forum ainsi que les incontournables sites d'excelabo, FS
et JB en autres ....
De ces auteurs (qui sont des stars pour nous !!! et que l'on ne les
voit jamais dans la presse people)
j'ai pu obtenir des proc=E9dures diverses et vari=E9es
En voici 2 et je me pose la question suivante
J'aimerai dans la sub ExportData au moment d'ajouter les infos dans la
feuille "GAV" transformer le 3eme parametre de la Sub SetExternalDatas
(DestCellAdr As String) en plage variable du style:
La premi=E8re cellule vide de la colonne "A"
=E0 la place du "A7"
(SetExternalDatas Fich, "GAV", "A7", "mise =E0 jour du " & Now)
Cela est il possible ? quelle en est alors la synthaxe ???
Je n'arrive pas =E0 comprendre a quel moment on pourrait le
calculer ....le variabiliser .....
Je vous remercie d'avance pour vos lumi=E8res, bien utiles ..
Je reste =E0 votre =E9coute et vous trouverez ci dessous les 2 sub
Patrednef
Sub ExportData()
Dim Fich As String, cell As Range
Fich =3D "C:\Users\DDSP\Documents\SuiviMaj.xls"
'Open the ADO connection to the Excel workbook
Set oConn =3D New ADODB.Connection
oConn.Open "Provider=3DMicrosoft.Jet.OLEDB.4.0;" & _
"Data Source=3D" & Fich & ";" & _
"Extended Properties=3D""Excel 8.0;HDR=3DYES;IMEX=3D2;"""
'Add values to individual cells
SetExternalDatas Fich, "GAV", "A7", "mise =E0 jour du " & Now
'Close the connection
oConn.Close
'Open the workbook to examine the results
DoEvents
Workbooks.Open Fich 'enlever cela si on ne veut pas ouvrir le
fichier
End Sub
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 the "feuilleTest"
worksheet.
'1 S=E9lection pour =E9crire dans une seule cellule
RangeDest =3D DestCellAdr & ":" & DestCellAdr
oCmd.CommandText =3D "SELECT * from `" & DestFeuille & "$" & RangeDest
& "`"
On Error Resume Next
' 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
'Close the connection
oConn.Close
Set oConn =3D Nothing
Set oCmd =3D Nothing
Set oRS =3D Nothing
End Sub
(SetExternalDatas Fich, "GAV", "A" & Mavariable, "mise à jour du " & Now)
Celà devrait convenir
Dis moi !!!!!!
Patrednef
Bonjour FFO
merci mais je pense que cela ne fonctionne pas, car la feuille "GAV" est une feuille d'un classeur fermé Il me semble donc qu'il n'est pas possible de définir cette variable puisque le fichier SuiviMaj.xls est fermé.
je ne vois pas ou définir cette variable dans la proc dans ce cadre
je peux me troper et je reste attentif à vos remarques
Merci
Patrednef
Bonjour FFO
merci mais je pense que cela ne fonctionne pas, car la feuille "GAV"
est une feuille d'un classeur fermé
Il me semble donc qu'il n'est pas possible de définir cette variable
puisque le fichier SuiviMaj.xls est fermé.
je ne vois pas ou définir cette variable dans la proc dans ce cadre
je peux me troper et je reste attentif à vos remarques
merci mais je pense que cela ne fonctionne pas, car la feuille "GAV" est une feuille d'un classeur fermé Il me semble donc qu'il n'est pas possible de définir cette variable puisque le fichier SuiviMaj.xls est fermé.
je ne vois pas ou définir cette variable dans la proc dans ce cadre
je peux me troper et je reste attentif à vos remarques
Merci
Patrednef
FFO
Rebonjour à toi
Ce fichier fermé a t'il été ouvert pendant la procédure ???? Si oui avant sa fermeture il faut récupérer Mavariable avant de le fermer comme indiqué dans ma proposition si non n'est il pas possible de l'ouvrir juste pour la récupérer et de le refermer ????
Qu'en penses tu ????
Rebonjour à toi
Ce fichier fermé a t'il été ouvert pendant la procédure ????
Si oui avant sa fermeture il faut récupérer Mavariable avant de le fermer
comme indiqué dans ma proposition
si non n'est il pas possible de l'ouvrir juste pour la récupérer et de le
refermer ????
Ce fichier fermé a t'il été ouvert pendant la procédure ???? Si oui avant sa fermeture il faut récupérer Mavariable avant de le fermer comme indiqué dans ma proposition si non n'est il pas possible de l'ouvrir juste pour la récupérer et de le refermer ????
Qu'en penses tu ????
Patrednef
FFO à dit: si non n'est il pas possible de l'ouvrir juste pour la récupérer et de le refermer ????
Merci pour ta proposition,
Et non il n'est pas possible de l'ouvrir mais en non visible.
Avez vous une autre proposition ou une autre solution
Merci
Patrednef
FFO à dit:
si non n'est il pas possible de l'ouvrir juste pour la récupérer et de
le
refermer ????
Merci pour ta proposition,
Et non il n'est pas possible de l'ouvrir mais en non visible.
Avez vous une autre proposition ou une autre solution
FFO à dit: si non n'est il pas possible de l'ouvrir juste pour la récupérer et de le refermer ????
Merci pour ta proposition,
Et non il n'est pas possible de l'ouvrir mais en non visible.
Avez vous une autre proposition ou une autre solution
Merci
Patrednef
FFO
Rebonjour à toi
Ce fichier si il existe doit à un moment ou à un autre être utilisé donc ouvert Il faudrait à sa fermeture mettre dans une de ces cellules (Par exemple cellule A1 de l'onglet "GAV") la précieuse information (Le numéro de la ligne de la 1° cellule vide de la colonne A) Il sera facile d'aller la récupérer fichier fermé avec cette ligne de code :
du chemin, nom du classeur, nom de l'onglet, cellule qui contiendra l'information
Ce qui permettrait d'utiliser la ligne de code ainsi :
(SetExternalDatas Fich, "GAV", "A" & Mavariable, "mise à jour du " & Now)
Pour obtenir le numéro de la ligne de la 1° cellule vide colonne A dans l'onglet "GAV" tu peux mettre dans la cellule dédiée à cette information cette formule :
=NBVAL(GAV!A:A)+1
Attention il faut que toutes les celulles soit non vides jusqu'à la première cellule vide de cette colonne
Peut être ta solution
Dis moi !!!!!
Rebonjour à toi
Ce fichier si il existe doit à un moment ou à un autre être utilisé donc
ouvert
Il faudrait à sa fermeture mettre dans une de ces cellules (Par exemple
cellule A1 de l'onglet "GAV") la précieuse information (Le numéro de la ligne
de la 1° cellule vide de la colonne A)
Il sera facile d'aller la récupérer fichier fermé avec cette ligne de code :
du chemin, nom du classeur, nom de l'onglet, cellule qui contiendra
l'information
Ce qui permettrait d'utiliser la ligne de code ainsi :
(SetExternalDatas Fich, "GAV", "A" & Mavariable, "mise à jour du " & Now)
Pour obtenir le numéro de la ligne de la 1° cellule vide colonne A dans
l'onglet "GAV" tu peux mettre dans la cellule dédiée à cette information
cette formule :
=NBVAL(GAV!A:A)+1
Attention il faut que toutes les celulles soit non vides jusqu'à la première
cellule vide de cette colonne
Ce fichier si il existe doit à un moment ou à un autre être utilisé donc ouvert Il faudrait à sa fermeture mettre dans une de ces cellules (Par exemple cellule A1 de l'onglet "GAV") la précieuse information (Le numéro de la ligne de la 1° cellule vide de la colonne A) Il sera facile d'aller la récupérer fichier fermé avec cette ligne de code :
du chemin, nom du classeur, nom de l'onglet, cellule qui contiendra l'information
Ce qui permettrait d'utiliser la ligne de code ainsi :
(SetExternalDatas Fich, "GAV", "A" & Mavariable, "mise à jour du " & Now)
Pour obtenir le numéro de la ligne de la 1° cellule vide colonne A dans l'onglet "GAV" tu peux mettre dans la cellule dédiée à cette information cette formule :
=NBVAL(GAV!A:A)+1
Attention il faut que toutes les celulles soit non vides jusqu'à la première cellule vide de cette colonne
Peut être ta solution
Dis moi !!!!!
JB
Bonjour,
'Nombre de lignes de la colonne A repertoire = ThisWorkbook.Path & "" Set cnn = New ADODB.Connection cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _ repertoire & "ADOsource.xls" Set rs = cnn.Execute("SELECT count(*) as NbLignes FROM [Feuil1$A1:A1000]") x = rs("nbLignes") MsgBox x rs.Close cnn.Close Set rs = Nothing Set cnn = Nothing
JB
On 27 nov, 12:16, Patrednef wrote:
Bonjour aux gentils contributeurs de ce forum,
J'utilise ce forum ainsi que les incontournables sites d'excelabo, FS et JB en autres ....
De ces auteurs (qui sont des stars pour nous !!! et que l'on ne les voit jamais dans la presse people) j'ai pu obtenir des procédures diverses et variées
En voici 2 et je me pose la question suivante
J'aimerai dans la sub ExportData au moment d'ajouter les infos dans la feuille "GAV" transformer le 3eme parametre de la Sub SetExternalDatas (DestCellAdr As String) en plage variable du style: La première cellule vide de la colonne "A" à la place du "A7"
(SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now)
Cela est il possible ? quelle en est alors la synthaxe ???
Je n'arrive pas à comprendre a quel moment on pourrait le calculer ....le variabiliser .....
Je vous remercie d'avance pour vos lumières, bien utiles ..
Je reste à votre écoute et vous trouverez ci dessous les 2 sub
Patrednef
Sub ExportData() Dim Fich As String, cell As Range
Fich = "C:UsersDDSPDocumentsSuiviMaj.xls"
'Open the ADO connection to the Excel workbook Set oConn = New ADODB.Connection oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Fich & ";" & _ "Extended Properties=""Excel 8.0;HDR=Y ES;IMEX=2;"""
'Add values to individual cells SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now
'Close the connection oConn.Close
'Open the workbook to examine the results DoEvents Workbooks.Open Fich 'enlever cela si on ne veut pas ouvrir le fichier End Sub 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 & "$" & RangeDes t & "`"
On Error Resume Next ' 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
Bonjour,
'Nombre de lignes de la colonne A
repertoire = ThisWorkbook.Path & ""
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" &
_
repertoire & "ADOsource.xls"
Set rs = cnn.Execute("SELECT count(*) as NbLignes FROM
[Feuil1$A1:A1000]")
x = rs("nbLignes")
MsgBox x
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
JB
On 27 nov, 12:16, Patrednef <drp...@orange.fr> wrote:
Bonjour aux gentils contributeurs de ce forum,
J'utilise ce forum ainsi que les incontournables sites d'excelabo, FS
et JB en autres ....
De ces auteurs (qui sont des stars pour nous !!! et que l'on ne les
voit jamais dans la presse people)
j'ai pu obtenir des procédures diverses et variées
En voici 2 et je me pose la question suivante
J'aimerai dans la sub ExportData au moment d'ajouter les infos dans la
feuille "GAV" transformer le 3eme parametre de la Sub SetExternalDatas
(DestCellAdr As String) en plage variable du style:
La première cellule vide de la colonne "A"
à la place du "A7"
(SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now)
Cela est il possible ? quelle en est alors la synthaxe ???
Je n'arrive pas à comprendre a quel moment on pourrait le
calculer ....le variabiliser .....
Je vous remercie d'avance pour vos lumières, bien utiles ..
Je reste à votre écoute et vous trouverez ci dessous les 2 sub
Patrednef
Sub ExportData()
Dim Fich As String, cell As Range
Fich = "C:UsersDDSPDocumentsSuiviMaj.xls"
'Open the ADO connection to the Excel workbook
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fich & ";" & _
"Extended Properties=""Excel 8.0;HDR=Y ES;IMEX=2;"""
'Add values to individual cells
SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now
'Close the connection
oConn.Close
'Open the workbook to examine the results
DoEvents
Workbooks.Open Fich 'enlever cela si on ne veut pas ouvrir le
fichier
End Sub
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 & "$" & RangeDes t
& "`"
On Error Resume Next
' 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
'Nombre de lignes de la colonne A repertoire = ThisWorkbook.Path & "" Set cnn = New ADODB.Connection cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _ repertoire & "ADOsource.xls" Set rs = cnn.Execute("SELECT count(*) as NbLignes FROM [Feuil1$A1:A1000]") x = rs("nbLignes") MsgBox x rs.Close cnn.Close Set rs = Nothing Set cnn = Nothing
JB
On 27 nov, 12:16, Patrednef wrote:
Bonjour aux gentils contributeurs de ce forum,
J'utilise ce forum ainsi que les incontournables sites d'excelabo, FS et JB en autres ....
De ces auteurs (qui sont des stars pour nous !!! et que l'on ne les voit jamais dans la presse people) j'ai pu obtenir des procédures diverses et variées
En voici 2 et je me pose la question suivante
J'aimerai dans la sub ExportData au moment d'ajouter les infos dans la feuille "GAV" transformer le 3eme parametre de la Sub SetExternalDatas (DestCellAdr As String) en plage variable du style: La première cellule vide de la colonne "A" à la place du "A7"
(SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now)
Cela est il possible ? quelle en est alors la synthaxe ???
Je n'arrive pas à comprendre a quel moment on pourrait le calculer ....le variabiliser .....
Je vous remercie d'avance pour vos lumières, bien utiles ..
Je reste à votre écoute et vous trouverez ci dessous les 2 sub
Patrednef
Sub ExportData() Dim Fich As String, cell As Range
Fich = "C:UsersDDSPDocumentsSuiviMaj.xls"
'Open the ADO connection to the Excel workbook Set oConn = New ADODB.Connection oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Fich & ";" & _ "Extended Properties=""Excel 8.0;HDR=Y ES;IMEX=2;"""
'Add values to individual cells SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now
'Close the connection oConn.Close
'Open the workbook to examine the results DoEvents Workbooks.Open Fich 'enlever cela si on ne veut pas ouvrir le fichier End Sub 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 & "$" & RangeDes t & "`"
On Error Resume Next ' 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
JB
Nom Prenom Salaire Dupont Jean 6000 Martin Daniel 7000
Sub AjoutEnregistrement() repertoire = ThisWorkbook.Path & "" Set cnn = New ADODB.Connection fichier = repertoire & "ADOsource.xls" cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & fichier & ";" & _ "Extended Properties=""Excel 8.0;HDR=YES;IMEX=2;""" Set rs = New ADODB.Recordset rs.Open "SELECT * from [Feuil1$A1:C1000]", cnn, adOpenDynamic, adLockOptimistic rs.AddNew rs(0).Value = "xxxx" rs(1).Value = "yyyy" rs.Update rs.Close cnn.Close End Sub
JB
On 27 nov, 16:45, JB wrote:
Bonjour,
'Nombre de lignes de la colonne A repertoire = ThisWorkbook.Path & "" Set cnn = New ADODB.Connection cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ =" & _ repertoire & "ADOsource.xls" Set rs = cnn.Execute("SELECT count(*) as NbLignes FROM [Feuil1$A1:A1000]") x = rs("nbLignes") MsgBox x rs.Close cnn.Close Set rs = Nothing Set cnn = Nothing
JB
On 27 nov, 12:16, Patrednef wrote:
> Bonjour aux gentils contributeurs de ce forum,
> J'utilise ce forum ainsi que les incontournables sites d'excelabo, FS > et JB en autres ....
> De ces auteurs (qui sont des stars pour nous !!! et que l'on ne les > voit jamais dans la presse people) > j'ai pu obtenir des procédures diverses et variées
> En voici 2 et je me pose la question suivante
> J'aimerai dans la sub ExportData au moment d'ajouter les infos dans la > feuille "GAV" transformer le 3eme parametre de la Sub SetExternalDatas > (DestCellAdr As String) en plage variable du style: > La première cellule vide de la colonne "A" > à la place du "A7"
> (SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now)
> Cela est il possible ? quelle en est alors la synthaxe ???
> Je n'arrive pas à comprendre a quel moment on pourrait le > calculer ....le variabiliser .....
> Je vous remercie d'avance pour vos lumières, bien utiles ..
> Je reste à votre écoute et vous trouverez ci dessous les 2 sub
> Patrednef
> Sub ExportData() > Dim Fich As String, cell As Range
> Fich = "C:UsersDDSPDocumentsSuiviMaj.xls"
> 'Open the ADO connection to the Excel workbook > Set oConn = New ADODB.Connection > oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ > "Data Source=" & Fich & ";" & _ > "Extended Properties=""Excel 8.0;HDR =YES;IMEX=2;"""
> 'Add values to individual cells > SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now
> 'Close the connection > oConn.Close
> 'Open the workbook to examine the results > DoEvents > Workbooks.Open Fich 'enlever cela si on ne veut pas ouvrir le > fichier > End Sub > 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 & "$" & RangeD est > & "`"
> On Error Resume Next > ' Open a recordset containing the worksheet data. > Set oRS = New ADODB.Recordset > oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
> 'Close the connection > oConn.Close > Set oConn = Nothing > Set oCmd = Nothing > Set oRS = Nothing > End Sub- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Nom Prenom Salaire
Dupont Jean 6000
Martin Daniel 7000
Sub AjoutEnregistrement()
repertoire = ThisWorkbook.Path & ""
Set cnn = New ADODB.Connection
fichier = repertoire & "ADOsource.xls"
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" &
fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;IMEX=2;"""
Set rs = New ADODB.Recordset
rs.Open "SELECT * from [Feuil1$A1:C1000]", cnn, adOpenDynamic,
adLockOptimistic
rs.AddNew
rs(0).Value = "xxxx"
rs(1).Value = "yyyy"
rs.Update
rs.Close
cnn.Close
End Sub
JB
On 27 nov, 16:45, JB <boisgont...@hotmail.com> wrote:
Bonjour,
'Nombre de lignes de la colonne A
repertoire = ThisWorkbook.Path & ""
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ =" &
_
repertoire & "ADOsource.xls"
Set rs = cnn.Execute("SELECT count(*) as NbLignes FROM
[Feuil1$A1:A1000]")
x = rs("nbLignes")
MsgBox x
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
JB
On 27 nov, 12:16, Patrednef <drp...@orange.fr> wrote:
> Bonjour aux gentils contributeurs de ce forum,
> J'utilise ce forum ainsi que les incontournables sites d'excelabo, FS
> et JB en autres ....
> De ces auteurs (qui sont des stars pour nous !!! et que l'on ne les
> voit jamais dans la presse people)
> j'ai pu obtenir des procédures diverses et variées
> En voici 2 et je me pose la question suivante
> J'aimerai dans la sub ExportData au moment d'ajouter les infos dans la
> feuille "GAV" transformer le 3eme parametre de la Sub SetExternalDatas
> (DestCellAdr As String) en plage variable du style:
> La première cellule vide de la colonne "A"
> à la place du "A7"
> (SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now)
> Cela est il possible ? quelle en est alors la synthaxe ???
> Je n'arrive pas à comprendre a quel moment on pourrait le
> calculer ....le variabiliser .....
> Je vous remercie d'avance pour vos lumières, bien utiles ..
> Je reste à votre écoute et vous trouverez ci dessous les 2 sub
> Patrednef
> Sub ExportData()
> Dim Fich As String, cell As Range
> Fich = "C:UsersDDSPDocumentsSuiviMaj.xls"
> 'Open the ADO connection to the Excel workbook
> Set oConn = New ADODB.Connection
> oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
> "Data Source=" & Fich & ";" & _
> "Extended Properties=""Excel 8.0;HDR =YES;IMEX=2;"""
> 'Add values to individual cells
> SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now
> 'Close the connection
> oConn.Close
> 'Open the workbook to examine the results
> DoEvents
> Workbooks.Open Fich 'enlever cela si on ne veut pas ouvrir le
> fichier
> End Sub
> 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 & "$" & RangeD est
> & "`"
> On Error Resume Next
> ' Open a recordset containing the worksheet data.
> Set oRS = New ADODB.Recordset
> oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
> 'Close the connection
> oConn.Close
> Set oConn = Nothing
> Set oCmd = Nothing
> Set oRS = Nothing
> End Sub- Masquer le texte des messages précédents -
Nom Prenom Salaire Dupont Jean 6000 Martin Daniel 7000
Sub AjoutEnregistrement() repertoire = ThisWorkbook.Path & "" Set cnn = New ADODB.Connection fichier = repertoire & "ADOsource.xls" cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & fichier & ";" & _ "Extended Properties=""Excel 8.0;HDR=YES;IMEX=2;""" Set rs = New ADODB.Recordset rs.Open "SELECT * from [Feuil1$A1:C1000]", cnn, adOpenDynamic, adLockOptimistic rs.AddNew rs(0).Value = "xxxx" rs(1).Value = "yyyy" rs.Update rs.Close cnn.Close End Sub
JB
On 27 nov, 16:45, JB wrote:
Bonjour,
'Nombre de lignes de la colonne A repertoire = ThisWorkbook.Path & "" Set cnn = New ADODB.Connection cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ =" & _ repertoire & "ADOsource.xls" Set rs = cnn.Execute("SELECT count(*) as NbLignes FROM [Feuil1$A1:A1000]") x = rs("nbLignes") MsgBox x rs.Close cnn.Close Set rs = Nothing Set cnn = Nothing
JB
On 27 nov, 12:16, Patrednef wrote:
> Bonjour aux gentils contributeurs de ce forum,
> J'utilise ce forum ainsi que les incontournables sites d'excelabo, FS > et JB en autres ....
> De ces auteurs (qui sont des stars pour nous !!! et que l'on ne les > voit jamais dans la presse people) > j'ai pu obtenir des procédures diverses et variées
> En voici 2 et je me pose la question suivante
> J'aimerai dans la sub ExportData au moment d'ajouter les infos dans la > feuille "GAV" transformer le 3eme parametre de la Sub SetExternalDatas > (DestCellAdr As String) en plage variable du style: > La première cellule vide de la colonne "A" > à la place du "A7"
> (SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now)
> Cela est il possible ? quelle en est alors la synthaxe ???
> Je n'arrive pas à comprendre a quel moment on pourrait le > calculer ....le variabiliser .....
> Je vous remercie d'avance pour vos lumières, bien utiles ..
> Je reste à votre écoute et vous trouverez ci dessous les 2 sub
> Patrednef
> Sub ExportData() > Dim Fich As String, cell As Range
> Fich = "C:UsersDDSPDocumentsSuiviMaj.xls"
> 'Open the ADO connection to the Excel workbook > Set oConn = New ADODB.Connection > oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ > "Data Source=" & Fich & ";" & _ > "Extended Properties=""Excel 8.0;HDR =YES;IMEX=2;"""
> 'Add values to individual cells > SetExternalDatas Fich, "GAV", "A7", "mise à jour du " & Now
> 'Close the connection > oConn.Close
> 'Open the workbook to examine the results > DoEvents > Workbooks.Open Fich 'enlever cela si on ne veut pas ouvrir le > fichier > End Sub > 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 & "$" & RangeD est > & "`"
> On Error Resume Next > ' Open a recordset containing the worksheet data. > Set oRS = New ADODB.Recordset > oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
> 'Close the connection > oConn.Close > Set oConn = Nothing > Set oCmd = Nothing > Set oRS = Nothing > End Sub- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
michdenis
Bonjour,
Tu places tout ce qui suit dans un module standard :
'--------------------------------------------------- Sub ExportData()
Dim Fich As String, cell As Range Dim DerCel As Long, Feuille As String Dim NomFeuille As String, Colonne As String
Feuille = "[" & NomFeuille & "$" & Colonne & "]" DerCel = GetLastRow(Fich, Feuille) SetExternalDatas Fich, NomFeuille, "A" & DerCel, _ "mise à jour du " & Now 'Si requis 'Workbooks.Open Fich End Sub Sub SetExternalDatas(DestFile As String, _ DestFeuille As String, _ DestCellAdr As String, _ DataToWrite As Variant) Dim Conn As New ADODB.Connection Dim Rst As New ADODB.Recordset Dim Requete As String Dim RangeDest
' Mise à jour dernière entrée de donnée Rst(0).Value = DataToWrite Rst.Update
'Fermeture de la connection et recordset Rst.Close: Conn.Close Set Conn = Nothing Set Rst = Nothing End Sub '---------------------------------------------------
Function GetLastRow(ByVal Fname As String, _ ByVal TableName As String) As Long 'Fname est le nom du chemin et fichier complet 'TableName est le nom de la feuille Dim Flawed As Boolean, i As Long Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Set Rst = New ADODB.Recordset Rst.CursorLocation = adUseClient Rst.Open TableName, Conn, adOpenStatic Rst.MoveLast
Flawed = True Do While (Flawed) For i = 0 To Rst.Fields.Count - 1 If Not IsNull(Rst.Fields(i).Value) Then Flawed = False Exit Do End If Next Rst.MovePrevious Loop GetLastRow = Rst.AbsolutePosition + 1 Rst.Close: Conn.Close Set Conn = Nothing: Set Rst = Nothing End Function '----------------------------------------------
Bonjour,
Tu places tout ce qui suit dans un module standard :
'---------------------------------------------------
Sub ExportData()
Dim Fich As String, cell As Range
Dim DerCel As Long, Feuille As String
Dim NomFeuille As String, Colonne As String
Feuille = "[" & NomFeuille & "$" & Colonne & "]"
DerCel = GetLastRow(Fich, Feuille)
SetExternalDatas Fich, NomFeuille, "A" & DerCel, _
"mise à jour du " & Now
'Si requis
'Workbooks.Open Fich
End Sub
Sub SetExternalDatas(DestFile As String, _
DestFeuille As String, _
DestCellAdr As String, _
DataToWrite As Variant)
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String
Dim RangeDest
' Mise à jour dernière entrée de donnée
Rst(0).Value = DataToWrite
Rst.Update
'Fermeture de la connection et recordset
Rst.Close: Conn.Close
Set Conn = Nothing
Set Rst = Nothing
End Sub
'---------------------------------------------------
Function GetLastRow(ByVal Fname As String, _
ByVal TableName As String) As Long
'Fname est le nom du chemin et fichier complet
'TableName est le nom de la feuille
Dim Flawed As Boolean, i As Long
Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Set Rst = New ADODB.Recordset
Rst.CursorLocation = adUseClient
Rst.Open TableName, Conn, adOpenStatic
Rst.MoveLast
Flawed = True
Do While (Flawed)
For i = 0 To Rst.Fields.Count - 1
If Not IsNull(Rst.Fields(i).Value) Then
Flawed = False
Exit Do
End If
Next
Rst.MovePrevious
Loop
GetLastRow = Rst.AbsolutePosition + 1
Rst.Close: Conn.Close
Set Conn = Nothing: Set Rst = Nothing
End Function
'----------------------------------------------
Feuille = "[" & NomFeuille & "$" & Colonne & "]" DerCel = GetLastRow(Fich, Feuille) SetExternalDatas Fich, NomFeuille, "A" & DerCel, _ "mise à jour du " & Now 'Si requis 'Workbooks.Open Fich End Sub Sub SetExternalDatas(DestFile As String, _ DestFeuille As String, _ DestCellAdr As String, _ DataToWrite As Variant) Dim Conn As New ADODB.Connection Dim Rst As New ADODB.Recordset Dim Requete As String Dim RangeDest
' Mise à jour dernière entrée de donnée Rst(0).Value = DataToWrite Rst.Update
'Fermeture de la connection et recordset Rst.Close: Conn.Close Set Conn = Nothing Set Rst = Nothing End Sub '---------------------------------------------------
Function GetLastRow(ByVal Fname As String, _ ByVal TableName As String) As Long 'Fname est le nom du chemin et fichier complet 'TableName est le nom de la feuille Dim Flawed As Boolean, i As Long Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Set Rst = New ADODB.Recordset Rst.CursorLocation = adUseClient Rst.Open TableName, Conn, adOpenStatic Rst.MoveLast
Flawed = True Do While (Flawed) For i = 0 To Rst.Fields.Count - 1 If Not IsNull(Rst.Fields(i).Value) Then Flawed = False Exit Do End If Next Rst.MovePrevious Loop GetLastRow = Rst.AbsolutePosition + 1 Rst.Close: Conn.Close Set Conn = Nothing: Set Rst = Nothing End Function '----------------------------------------------
Patrednef
Bonsoir,
Merci a FFo et à JB, les 2 solutions fonctionnent:
FFO: ta solution Ok mais il faut que le fichier ou l'on veut écrire est une cellule en dur avec le résultat de NB ..... ce qui ajoute une ligne de code sur chaque fichier à traiter. Mais cela fonctionne
JB: Cette solution me convient mieux, on garde la variabilité des fichiers ou écrire, on ne doit pas akouter une ligne de code dans les fichiers ou il faudrait écrire Seule petite modification trouvée, le MsgBox x donne le nombre de cellules pleines - 1 (base 0 ?)
Pour le nombre total de cellules non vides en colonne A il faut donc faire x+1 Et pour le numéro de ligne de la première vide, c'est x +2
je vous remercie et je vais donc utiliser le code de JB pour finaliser cela
Bravo à nouveau pour vos performances, votre savoir, et votre volonté de partager vos connaissances en nous aidant un peu à grandir dans ce monde du VBA .........un grand merci
PatRednef
Bonsoir,
Merci a FFo et à JB, les 2 solutions fonctionnent:
FFO: ta solution Ok mais il faut que le fichier ou l'on veut écrire
est une cellule en dur avec le résultat de NB ..... ce qui ajoute une
ligne de code sur chaque fichier à traiter.
Mais cela fonctionne
JB: Cette solution me convient mieux, on garde la variabilité des
fichiers ou écrire, on ne doit pas akouter une ligne de code dans les
fichiers ou il faudrait écrire
Seule petite modification trouvée, le MsgBox x donne le nombre de
cellules pleines - 1 (base 0 ?)
Pour le nombre total de cellules non vides en colonne A il faut donc
faire x+1
Et pour le numéro de ligne de la première vide, c'est x +2
je vous remercie et je vais donc utiliser le code de JB pour finaliser
cela
Bravo à nouveau pour vos performances, votre savoir, et votre volonté
de partager vos connaissances en nous aidant un peu à grandir dans ce
monde du VBA .........un grand merci
Merci a FFo et à JB, les 2 solutions fonctionnent:
FFO: ta solution Ok mais il faut que le fichier ou l'on veut écrire est une cellule en dur avec le résultat de NB ..... ce qui ajoute une ligne de code sur chaque fichier à traiter. Mais cela fonctionne
JB: Cette solution me convient mieux, on garde la variabilité des fichiers ou écrire, on ne doit pas akouter une ligne de code dans les fichiers ou il faudrait écrire Seule petite modification trouvée, le MsgBox x donne le nombre de cellules pleines - 1 (base 0 ?)
Pour le nombre total de cellules non vides en colonne A il faut donc faire x+1 Et pour le numéro de ligne de la première vide, c'est x +2
je vous remercie et je vais donc utiliser le code de JB pour finaliser cela
Bravo à nouveau pour vos performances, votre savoir, et votre volonté de partager vos connaissances en nous aidant un peu à grandir dans ce monde du VBA .........un grand merci
PatRednef
Patrednef
Merci MichDenis,
La chance est avec moi, les roi du forum me conseille ...
J'ai une erreur sur la ligne:
Rst.Open TableName, Conn, adOpenStatic de la fonction Function GetLastRow ... J'ai active x 2.8 activé pourtant
Pouvez vous me donner votre avis, cette solution semble très intéressante
A de suite
PatRednef
Merci MichDenis,
La chance est avec moi, les roi du forum me conseille ...
J'ai une erreur sur la ligne:
Rst.Open TableName, Conn, adOpenStatic de la fonction Function
GetLastRow ...
J'ai active x 2.8 activé pourtant
Pouvez vous me donner votre avis, cette solution semble très
intéressante