Faire du nom d'un champ une variable (automation)
Hello,
Une procedure dans Excel appelle une procedure dans Access pour retourner des données dans Excel.... Ici nous nous situons dans la procédure Access qui retourne les données dans Excel. Field1 et Field2 correspondent à 2 noms de champs d’une requête que j’appelle dans Access a l’aide de la variable AccessIndicatorType.
Le code ci-dessous fonctionne lorsque je remplace Field1 et Field2 par des constantes.
En d’autres termes : si je remplace “rst!”&”[“&Field1&”]” pas rst![EN] et idem avec “rst!”&”[“&Field2&”]”… ca marche. :P
Maintenant je voudrais passer le nom des champs en variable pour éviter de repeter la procedure quand les noms de champs changent….ie Field1 et Field2 doivent etre des variables. Avec le code ci-dessous, j’ai un prb de type alors que Field1 et Field2 sont de type Variant (ie ts les types)…
Des idées ? :mouarf: des ameliorations ? ;)
Procedure principale
Code:
1 2 3 4 5
| Sub AccessQueryDeposits_SPA()
AccessQueryIndicator "Deposits SPA - Oustanding Numbers RSD", 1, EN, SUM
AccessQueryIndicatorProd "Deposits SPA - Prod Numbers RSD", 4, EN, SUM
End sub |
Sous procedure
Code:
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
| Sub AccessQuery (AccessIndicatorType As String, i As Integer,Field1 as Variant, Field2 as variant)
''WARNING : Macro executes on ActiveWorkBook in Excel
Dim rst As DAO.Recordset
Dim qdf As QueryDef
Dim XLApp, appexcel As Object
Dim ligne, n As Integer
Set XLApp = GetObject(, "Excel.Application")
MyExcel = XLApp.ActiveWorkbook.Name
MyExcelSheet = XLApp.ActiveSheet.Name
Set appexcel = GetObject(MyExcel)
' Declare object and Select Table for Recordset
Set rst = CurrentDb.OpenRecordset(AccessIndicatorType)
On Error Resume Next
rst.MoveLast
n = rst.RecordCount
rst.MoveFirst
appexcel.Sheets(MyExcelSheet).Cells(1, i) = "Entity"
appexcel.Sheets(MyExcelSheet).Cells(1, i + 1) = AccessIndicatorType
ligne = 2
For ligne = 2 To n + 1
appexcel.Sheets(MyExcelSheet).Cells(ligne, i) = “rst!”&”[“&Field1&”]”
appexcel.Sheets(MyExcelSheet).Cells(ligne, i + 1) = “rst!”&”[“&Field2&”]” rst.MoveNext
Next
Set rst = Nothing
Set qdf = Nothing
Set XLApp = Nothing
Set appexcel = Nothing
End Sub |