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
Sous procedure
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
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
Partager