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.
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
Private
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
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
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
 
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