Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" a écrit dans le message de news:
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre à
jour régulièrement mais vu que le fichier B est un fichier modèle, je veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" <divers.lascars@laposte.net> a écrit dans le message de news:
OGsw2UNLGHA.2780@tk2msftngp13.phx.gbl...
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre à
jour régulièrement mais vu que le fichier B est un fichier modèle, je veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" a écrit dans le message de news:
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre à
jour régulièrement mais vu que le fichier B est un fichier modèle, je veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" a écrit dans le message de news:
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre à
jour régulièrement mais vu que le fichier B est un fichier modèle, je veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" <divers.lascars@laposte.net> a écrit dans le message de news:
OGsw2UNLGHA.2780@tk2msftngp13.phx.gbl...
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre à
jour régulièrement mais vu que le fichier B est un fichier modèle, je veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" a écrit dans le message de news:
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre à
jour régulièrement mais vu que le fichier B est un fichier modèle, je veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Désolé Fred, je pensais que tu avais utilisé ma macro.
Voici la macro de Rob Bovey qui devrait être un peu plus rapide...!
Attention : ce type de procédure boucle sur chacune des cellules d'une
plage.
Ceci signifie qu'il y a autant de requêtes effectués vers le fichier
source
pour modifier à chaque fois une cellule... c'est ce pourquoi cela prend
un certain temps dès l'étendue de la plage s'accroît .
'----------------------------------
Sub test()
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim oCmd As New ADODB.Command
Dim Rg As Range
Dim DestFile As String, DestFeuille As String
'Chemin et fichier modèle
DestFile = "c:Ado_Test"
'Nom feuille dans ton fichier modèle
DestFeuille = "Feuil1"
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"
oCmd.ActiveConnection = oConn
'adapte le nom de la feuille du fichier en cours
With Worksheets("Feuil1")
'Plage à exporter
Set Rg = .Range("A1:E" & Range("a65536").End(xlUp).Row)
End With
For Each c In Rg
DestCellAdr = c.Address(0, 0)
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$" &
RangeDest & "`"
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
oRS(0).Value = c.Value
oRS.Update
oRS.Close
Next
oConn.Close
Set oCmd = Nothing: Set oRS = Nothing: Set oConn = Nothing
End Sub
'----------------------------------
Salutations!
"Fred64" a écrit dans le message de news:
Merci pour votre aide,
J'ai essayé de remplacer la ligne, j'ai chronométré les calculs: 30s pour
10
cellules.
Ca donne le meme temps de calcul qu'avec l'autre ligne.
Peut être une autre idée ??
"michdenis" a écrit dans le message de news:Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" a écrit dans le message de news:
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre
à
jour régulièrement mais vu que le fichier B est un fichier modèle, je
veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Désolé Fred, je pensais que tu avais utilisé ma macro.
Voici la macro de Rob Bovey qui devrait être un peu plus rapide...!
Attention : ce type de procédure boucle sur chacune des cellules d'une
plage.
Ceci signifie qu'il y a autant de requêtes effectués vers le fichier
source
pour modifier à chaque fois une cellule... c'est ce pourquoi cela prend
un certain temps dès l'étendue de la plage s'accroît .
'----------------------------------
Sub test()
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim oCmd As New ADODB.Command
Dim Rg As Range
Dim DestFile As String, DestFeuille As String
'Chemin et fichier modèle
DestFile = "c:Ado_Test"
'Nom feuille dans ton fichier modèle
DestFeuille = "Feuil1"
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"
oCmd.ActiveConnection = oConn
'adapte le nom de la feuille du fichier en cours
With Worksheets("Feuil1")
'Plage à exporter
Set Rg = .Range("A1:E" & Range("a65536").End(xlUp).Row)
End With
For Each c In Rg
DestCellAdr = c.Address(0, 0)
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$" &
RangeDest & "`"
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
oRS(0).Value = c.Value
oRS.Update
oRS.Close
Next
oConn.Close
Set oCmd = Nothing: Set oRS = Nothing: Set oConn = Nothing
End Sub
'----------------------------------
Salutations!
"Fred64" <divers.lascars@laposte.net> a écrit dans le message de news:
ennryGPLGHA.3728@tk2msftngp13.phx.gbl...
Merci pour votre aide,
J'ai essayé de remplacer la ligne, j'ai chronométré les calculs: 30s pour
10
cellules.
Ca donne le meme temps de calcul qu'avec l'autre ligne.
Peut être une autre idée ??
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news:
usSsxrOLGHA.3984@TK2MSFTNGP14.phx.gbl...
Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" <divers.lascars@laposte.net> a écrit dans le message de news:
OGsw2UNLGHA.2780@tk2msftngp13.phx.gbl...
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre
à
jour régulièrement mais vu que le fichier B est un fichier modèle, je
veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Désolé Fred, je pensais que tu avais utilisé ma macro.
Voici la macro de Rob Bovey qui devrait être un peu plus rapide...!
Attention : ce type de procédure boucle sur chacune des cellules d'une
plage.
Ceci signifie qu'il y a autant de requêtes effectués vers le fichier
source
pour modifier à chaque fois une cellule... c'est ce pourquoi cela prend
un certain temps dès l'étendue de la plage s'accroît .
'----------------------------------
Sub test()
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim oCmd As New ADODB.Command
Dim Rg As Range
Dim DestFile As String, DestFeuille As String
'Chemin et fichier modèle
DestFile = "c:Ado_Test"
'Nom feuille dans ton fichier modèle
DestFeuille = "Feuil1"
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"
oCmd.ActiveConnection = oConn
'adapte le nom de la feuille du fichier en cours
With Worksheets("Feuil1")
'Plage à exporter
Set Rg = .Range("A1:E" & Range("a65536").End(xlUp).Row)
End With
For Each c In Rg
DestCellAdr = c.Address(0, 0)
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$" &
RangeDest & "`"
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
oRS(0).Value = c.Value
oRS.Update
oRS.Close
Next
oConn.Close
Set oCmd = Nothing: Set oRS = Nothing: Set oConn = Nothing
End Sub
'----------------------------------
Salutations!
"Fred64" a écrit dans le message de news:
Merci pour votre aide,
J'ai essayé de remplacer la ligne, j'ai chronométré les calculs: 30s pour
10
cellules.
Ca donne le meme temps de calcul qu'avec l'autre ligne.
Peut être une autre idée ??
"michdenis" a écrit dans le message de news:Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" a écrit dans le message de news:
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre
à
jour régulièrement mais vu que le fichier B est un fichier modèle, je
veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Désolé Fred, je pensais que tu avais utilisé ma macro.
Voici la macro de Rob Bovey qui devrait être un peu plus rapide...!
Attention : ce type de procédure boucle sur chacune des cellules d'une
plage.
Ceci signifie qu'il y a autant de requêtes effectués vers le fichier
source
pour modifier à chaque fois une cellule... c'est ce pourquoi cela prend
un certain temps dès l'étendue de la plage s'accroît .
'----------------------------------
Sub test()
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim oCmd As New ADODB.Command
Dim Rg As Range
Dim DestFile As String, DestFeuille As String
'Chemin et fichier modèle
DestFile = "c:Ado_Test"
'Nom feuille dans ton fichier modèle
DestFeuille = "Feuil1"
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"
oCmd.ActiveConnection = oConn
'adapte le nom de la feuille du fichier en cours
With Worksheets("Feuil1")
'Plage à exporter
Set Rg = .Range("A1:E" & Range("a65536").End(xlUp).Row)
End With
For Each c In Rg
DestCellAdr = c.Address(0, 0)
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$" &
RangeDest & "`"
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
oRS(0).Value = c.Value
oRS.Update
oRS.Close
Next
oConn.Close
Set oCmd = Nothing: Set oRS = Nothing: Set oConn = Nothing
End Sub
'----------------------------------
Salutations!
"Fred64" a écrit dans le message de news:
Merci pour votre aide,
J'ai essayé de remplacer la ligne, j'ai chronométré les calculs: 30s pour
10
cellules.
Ca donne le meme temps de calcul qu'avec l'autre ligne.
Peut être une autre idée ??
"michdenis" a écrit dans le message de news:Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" a écrit dans le message de news:
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre
à
jour régulièrement mais vu que le fichier B est un fichier modèle, je
veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Désolé Fred, je pensais que tu avais utilisé ma macro.
Voici la macro de Rob Bovey qui devrait être un peu plus rapide...!
Attention : ce type de procédure boucle sur chacune des cellules d'une
plage.
Ceci signifie qu'il y a autant de requêtes effectués vers le fichier
source
pour modifier à chaque fois une cellule... c'est ce pourquoi cela prend
un certain temps dès l'étendue de la plage s'accroît .
'----------------------------------
Sub test()
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim oCmd As New ADODB.Command
Dim Rg As Range
Dim DestFile As String, DestFeuille As String
'Chemin et fichier modèle
DestFile = "c:Ado_Test"
'Nom feuille dans ton fichier modèle
DestFeuille = "Feuil1"
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"
oCmd.ActiveConnection = oConn
'adapte le nom de la feuille du fichier en cours
With Worksheets("Feuil1")
'Plage à exporter
Set Rg = .Range("A1:E" & Range("a65536").End(xlUp).Row)
End With
For Each c In Rg
DestCellAdr = c.Address(0, 0)
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$" &
RangeDest & "`"
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
oRS(0).Value = c.Value
oRS.Update
oRS.Close
Next
oConn.Close
Set oCmd = Nothing: Set oRS = Nothing: Set oConn = Nothing
End Sub
'----------------------------------
Salutations!
"Fred64" <divers.lascars@laposte.net> a écrit dans le message de news:
ennryGPLGHA.3728@tk2msftngp13.phx.gbl...
Merci pour votre aide,
J'ai essayé de remplacer la ligne, j'ai chronométré les calculs: 30s pour
10
cellules.
Ca donne le meme temps de calcul qu'avec l'autre ligne.
Peut être une autre idée ??
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news:
usSsxrOLGHA.3984@TK2MSFTNGP14.phx.gbl...
Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" <divers.lascars@laposte.net> a écrit dans le message de news:
OGsw2UNLGHA.2780@tk2msftngp13.phx.gbl...
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre
à
jour régulièrement mais vu que le fichier B est un fichier modèle, je
veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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
Désolé Fred, je pensais que tu avais utilisé ma macro.
Voici la macro de Rob Bovey qui devrait être un peu plus rapide...!
Attention : ce type de procédure boucle sur chacune des cellules d'une
plage.
Ceci signifie qu'il y a autant de requêtes effectués vers le fichier
source
pour modifier à chaque fois une cellule... c'est ce pourquoi cela prend
un certain temps dès l'étendue de la plage s'accroît .
'----------------------------------
Sub test()
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim oCmd As New ADODB.Command
Dim Rg As Range
Dim DestFile As String, DestFeuille As String
'Chemin et fichier modèle
DestFile = "c:Ado_Test"
'Nom feuille dans ton fichier modèle
DestFeuille = "Feuil1"
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DestFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"
oCmd.ActiveConnection = oConn
'adapte le nom de la feuille du fichier en cours
With Worksheets("Feuil1")
'Plage à exporter
Set Rg = .Range("A1:E" & Range("a65536").End(xlUp).Row)
End With
For Each c In Rg
DestCellAdr = c.Address(0, 0)
RangeDest = DestCellAdr & ":" & DestCellAdr
oCmd.CommandText = "SELECT * from `" & DestFeuille & "$" &
RangeDest & "`"
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
oRS(0).Value = c.Value
oRS.Update
oRS.Close
Next
oConn.Close
Set oCmd = Nothing: Set oRS = Nothing: Set oConn = Nothing
End Sub
'----------------------------------
Salutations!
"Fred64" a écrit dans le message de news:
Merci pour votre aide,
J'ai essayé de remplacer la ligne, j'ai chronométré les calculs: 30s pour
10
cellules.
Ca donne le meme temps de calcul qu'avec l'autre ligne.
Peut être une autre idée ??
"michdenis" a écrit dans le message de news:Bonjour Fred64,
Remplace cette ligne de code :
oRS.Open oCmd, , adOpenKeyset, adLockOptimistic
Par : le curseur "AdOpenStatic" est moins gourmand en ressource.
oRS.Open oCmd, , adOpenStatic, adLockOptimistic
P.S. Les suggestions faites sur le message précédent ne devrait pas être
très efficace puisqu'il s'agit d'écrire dans un classeur fermé ! ;-))
Salutations!
"Fred64" a écrit dans le message de news:
Bonsoir tout le monde,
Je souhaite remplacer une feuille d'un classeur B.xlt à partir d'un
classeur
A.xls sans avoir à ouvrir le classeur B. En fait c'est une feuille qui
contient une base de donnée (clients, adresse, ...) et qu'il faut mettre
à
jour régulièrement mais vu que le fichier B est un fichier modèle, je
veux
pouvoir le faire sans avoir à l'ouvrir.
J'ai essayé ça, mais le calcul est très long et on dirait qu'il ne
s'arrête
pas.
Lorsque je réduis la plage (de A1:M50 je passe à A1:M5 par exemple) le
calcul se réalise (après un certain temps).
Y a t'il une façon pour que le calcul soit plus rapide ou bien une erreur
se
trouve t'elle dans l'écriture ?
Merci d'avance
Fred
Sub Modifier_base()
Dim Fich$, cell As Range
Fich = "C:Program FilesFiches Méthode BoisFiches méthode.xlt" 'à
adapter
'écrit dans le classeur fermé la valeur des cellules A1:M50
'du classeur actif
For Each cell In ActiveWorkbook.Sheets("Base de donnée").Range("A1:M50")
SetExternalDatas Fich, "Donnees_communes", cell.Address(0, 0),
cell.Text
Next
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