Bonjour,

j'utilise depuis lontemps avec succès la macro suivante qui me permet très souvent d'appliquer un script de formattage sur un fichier excel créé par export depuis Access.

Code pour l'export
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, From_Table, document, True
Call Execute_Excel_Script(document, Excel_Workbook, recv![Script_Folder], recv![Excel_Script_File], Recexcel![Script_Name])
Code Pour l'appel du script de reformattage
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
 
Sub Execute_Excel_Script(document As String, Excel_Workbook As String, Script_Folder As String, Excel_Script_File As String, Script_Name As String)
On Error Resume Next
Dim XLApp As Object
Dim ExcelWasNotRunning As Boolean    ' Indicateur de libération finale.
Dim FullScript As String
 
FullScript = Trim(Script_Folder) & Trim(Excel_Script_File)
 
Set XLApp = GetObject(, "Excel.Application")
If err <> 0 Then
   err.Clear
   ExcelWasNotRunning = True
   Set XLApp = CreateObject("Excel.application")
 Else
    ExcelWasNotRunning = False
End If
XLApp.Visible = True
Set XlWkb = XLApp.Workbooks.Open(FullScript)
 '
 ' lançement des macros automatiques d'Excel
 '
XlWkb.RunAutoMacros xlAutoOpen
 
XLApp.Run Script_Name, document, Excel_Workbook, Excel_Script_File
'XlWkb.Save
XlWkb.Close
'If ExcelWasNotRunning = True Then
    XLApp.Application.Quit
'End If
 
Set XlWkb = Nothing
Set XLApp = Nothing
 
 
End Sub
La limitation actuelle de ce systeme est qu'il n'y a pas de parametres lors de l'appel de mon Script dans Excel.
Je voudrais par exemple, pour un export particulier, renommer la colonne B en "VOYAGE 27/05", en fonction des données qui sont dans la DB.

Il me faudrait donc parfois 0 parametre en plus, parfois N, en fonction du cas.

Je voudrais donc :
1) Appeler Sub Execute_Excel_Script avec un nombre de parametres variables de types variables
2) Exécuter XLApp.Run avec un nombre de parametres variables de type variable dépendant des parametres d'appel à Sub Execute_Excel_Script

Est-ce possible ?

Si je ne suis pas clair, n'hésitez pas à demander des précisions.

Ci-joint, un exemple de script excel lancé par ce systeme, mais actuellement sans parametre "data".
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Sub Gmain_Attendees_Presence_ART5_FOR(Document As String, Excel_Workbook As String, Excel_Script_File As String)
 
'
' Gmain_Attendees_Presence_ART5 Macro
' Macro enregistrée le 30/05/2006 par Admin
'
    Dim lrow        As Long
    Dim xlrow       As String
    Dim Range_Id    As String
    Dim Saved_Range_id As String
    Dim Temp_Range_Id As String
    Dim off        As Long
    Dim Column_from As String
    Dim Column_to   As String
 
 
    Workbooks.Open Filename:=Document
 
    Windows(Excel_Workbook).Activate
    ActiveSheet.UsedRange
    ActiveSheet.UsedRange
    Range_Id = Get_Range_Id(ActiveSheet.UsedRange.Name)
    Saved_Range_id = Range_Id
    Column_from = Trim(Get_Column_From(ActiveSheet.UsedRange.Name))
    Column_to = Trim(Get_Column_To(ActiveSheet.UsedRange.Name))
    Range(Range_Id).Select
'**********************************************
'* real VB Script Start  here                 *
'**********************************************
'Header Line In Bold
    Range_Id = Column_from & "1:" & Column_to & "1"
    Range(Range_Id).Select
    Selection.Font.Bold = True
'Freeze panes
    Range("C2").Select
    ActiveWindow.FreezePanes = True
'Autofit
    Range_Id = Column_from & ":" & Column_to
    Columns(Range_Id).EntireColumn.AutoFit
'Autofit
    Columns("E:F").Select
    Selection.NumberFormat = "h:mm"
    Columns("E:F").EntireColumn.AutoFit
    Columns("C:C").Select
    Selection.NumberFormat = "d/mmm/yy"
    Columns("C:C").EntireColumn.AutoFit
    Columns("U:U").Select
    Columns("U:U").EntireColumn.AutoFit
    Selection.NumberFormat = "d/mmm/yy"
    Columns("U:U").EntireColumn.AutoFit
 
'get row number
    lrow = ActiveSheet.UsedRange.Rows.Count
    xlrow = lrow
 
 
 
    Range("C2").Select
    ActiveWorkbook.Save
    ActiveWorkbook.Close
'**********************************************
'* real VB Script Stop   here                 *
'**********************************************
    Windows(Excel_Script_File).Activate
End Sub
merci.