Exécuter une macro variable dans Excel , avec des paramêtres
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:
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:
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, :help: n'hésitez pas à demander des précisions. :pc:
Ci-joint, un exemple de script excel lancé par ce systeme, mais actuellement sans parametre "data".
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 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.