Bonjour,
Je rencontre quelques difficultés dans la réalisation d'un rapport automatique via Excel.
J'ai réalisé une requête SQL qui met a jour un tableau de données et un tableau croisé dynamique.
La requête SQL du tableau se base sur une valeur qui est alimentée en cellule C2 de l'onglet REPORT.
Je souhaiterais récupérer le nom du paramètre, le passer en paramètre, actualiser mon tableau avec ce paramètre et actualiser le tout, afin de générer des graphiques.
Problèmes :
Lorsque je met un point d'arrêt dans mon code, tout fonctionne bien. Le tableau SQL récupère la variable du fichier BAT, actualise le tableau, actualise les tableaux croisés dynamiques et actualise le graphique.
Sans point d'arrêt, le tableau SQL est remplie, mais aucune actualisation du TCD.
Je suis passé par un bouton pour actualiser le TCD et j'ai essayer de marquer un pause pour voir si le problème venait de la, en vain.
Lorsque je clique manuellement sur le bouton, cela fonctionne, je voudrais cependant que cela soit automatique. Le bouton est pour mes tests, si on peut sans passer, je suis preneur.
Batch pour lancer le fichier Excel.
Private
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2"C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE" /cmd/SDMO C:\RapportAuto\ReportingAuto.xlsm
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long) Private Declare Function lstrcpy Lib "kernel32" (lpString1 As Any, lpString2 As Any) As Long
Code de la macro
Fonction CmdLineToStr
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 Sub Workbook_Open() Dim macmdline As Variant Dim monparam As Variant 'déclare une variable macmdline = CmdLineToStr() 'MsgBox macmdline 'macmdline = "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE /cmd/SDMO C:\RapportAuto\ReportingAuto.xlsm" If Not IsNull(macmdline) Then 'si la variable est nulle If Len(macmdline) > 0 Then 'on s'assure qu'il y a eu une ligne de commande passée If InStr(macmdline, "/cmd/") > 0 Then macmdline = Replace(macmdline, ThisWorkbook.FullName, "", , , vbTextCompare) monparam = Split(macmdline, "/cmd/") Debug.Print Mid(monparam(1), 2, Len(monparam(1)) - 3) 'MsgBox macmdline 'MsgBox monparam(1) Sheets("REPORT").Application.Range("C2").Value = monparam(1) 'Sheets("TCD").PivotTables("TAB1").PivotCache.Refresh 'ActiveWorkbook.RefreshAll Feuil1.CommandButton1_Click End If End If End If 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 Public Function CmdLineToStr() As String ' ' Returns the command line in the call to Excel ' Dim Buffer() As Byte Dim StrLen As Long Dim CmdPtr As Long CmdPtr = GetCommandLine() If CmdPtr > 0 Then StrLen = lstrlenW(CmdPtr) * 2 If StrLen > 0 Then ReDim Buffer(0 To (StrLen - 1)) As Byte CopyMemory Buffer(0), ByVal CmdPtr, StrLen CmdLineToStr = Buffer End If End If End Function
Code sous le bouton actualiser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub CommandButton1_Click() Sheets("TCD").PivotTables("TAB1").PivotCache.Refresh ActiveWorkbook.RefreshAll Sleep 2000 'pour 0.5 seconde ActiveWorkbook.RefreshAll End Sub
Je ne comprends pas pourquoi mon TCD ne s'actualise pas via la macro.
Merci d'avance
Partager