Ca y est, j'ai compris :yes:
En fait l'instruction
Set Rst = db.OpenRecordset("Weights1", dbOpenDynaset)
récupère l'ensemble des enregistrements de la table,
si tu regardes bien,
Worksheets(sheet).Range("A2").CopyFromRecordset Rst
Colle dans ta feuille toutes les lignes et pas une seule !
Donc ne sert qu'à te créer une erreur
puisque tu as déjà tout récupéré !
Je pense que le mieux est alors de faire une boucle sur chaque cellule
de ta feuille, contenant une valeur, et d'écrire à ce moment là ton fichier texte !
Essayes cà :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| 'Chope des poids dans Access, calcule les stats dans Excel et insrcrit les résultats
'dans un fichier JUNK.txt avec ";" comme séparateur
Option Explicit
Const ML_PATH = "C:\bd1.mdb"
Const sheet = "Sheet PF"
Sub optimweightsPF_txt_do()
Dim db As DAO.Database, Rst As DAO.Recordset
Dim sst As DAO.Recordset, Rst2 As DAO.Recordset
Dim oAccesS As Access.Application
Dim request As String
Dim sSQL As String
Dim temp As String
Dim strDestFile As String
Dim iFileNum As Long
' Ouverture de la base de données
'creation d'une instance Access par automation
Set oAccesS = CreateObject("Access.Application")
'chargement de la BDD
oAccesS.OpenCurrentDatabase ML_PATH
'affectation d'une référence à la BDD
Set db = oAccesS.CurrentDb
'Application.ScreenUpdating = False
strDestFile = "c:\JUNK.txt"
iFileNum = FreeFile
Open strDestFile For Output As #iFileNum
Set Rst = db.OpenRecordset("Weights1", dbOpenDynaset)
Rst.MoveFirst ' Pourquoi pas
Worksheets(sheet).Range("A2").CopyFromRecordset Rst
Calculate
Dim Cel As Range
For Each Cel In Sheets(sheet).Range("A2:A" & Range("A65535").End(xlUp).Row)
temp = Cells(Cel.Row, 14).Value & ";" & Cells(Cel.Row, 15).Value & ";" & Cells(Cel.Row, 16).Value & _
";" & Cells(Cel.Row, 17).Value
Write #iFileNum, temp
Next
Close #iFileNum
Rst.Close
db.Close
Set db = Nothing
oAccesS.CloseCurrentDatabase
Set oAccesS = Nothing
MsgBox ("Execution terminée")
End Sub |
Voilà
Partager