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.

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 ? des ameliorations ?

Procedure principale

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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