J'aimerais savoir s'il existe un moyen dans le code VBA de forcer les fonctions de bloomberg (dans le tableur) à mettre à jour sa valeur (toutes les fonctions BDH)
Cibler les développeurs ont été confrontés au même problème/ont un terminal Bloomberg
Qu'est-ce que j'ai essayé--
Application.RTD.RefreshData
Application.RTD.throttleInterval = 0
Application.CalculateFull
La fonction BDH ne se recharge pas automatiquement.
La seule façon dont je peux les actualiser maintenant est la suivante: je clique sur le bouton "Actualiser le classeur" sur le ruban du complément BloomBerg.
Le complément Bloomberg étant verrouillé dans VBE, je ne parviens pas à trouver le code nécessaire. Me manque-t-il d'une référence Bloomberg? Est-ce qu'un expert/utilisateur Bloomberg peut me diriger dans la bonne direction? Merci.
J'ai fait une recherche du mot clé "refresh" dans la xla en l'ouvrant dans le bloc-notes. Trouvé les cibles suivantes:
RefreshAllWorkbooks
blpmain.xla!RefreshAllStaticData
blpmain.xla!'RefreshWorkbookFundamentalsData
blp.xla!IsBlpRefreshAvailable
Je les ai essayées une à une, Les 2 premières œuvres en appelant:
Application.run "RefreshAllWorkbooks"
Application.run "RefreshAllStaticData"
Mais ne pas les appeler seuls (je suppose que c'est parce que je peux en quelque sorte appeler une procédure PUBLIC protégée en utilisant Application.run)
RefreshAllWorkbooks
ou
RefreshAllStaticData
Merci pour votre aide
Je n'ai jamais réussi à faire ce que vous demandez. La seule méthode fiable que j'ai trouvée pour obtenir des données à jour consiste à appeler l'API directement à partir de VBA avec BLP_DATA_CTRLLib.BlpData
, à attendre la réponse et à placer le résultat dans une feuille.
En ce qui concerne l’ouverture de code VBA protégé par mot de passe, une recherche google ou stackoverflow devrait vous donner votre réponse.
J'ai trouvé que changer quelque chose dans la formule BDH provoquerait un rafraîchissement. Rechercher et remplacer le signe =
suffirait.
Public Sub Recalc()
Dim ws As Worksheet, FormulaCells As Range, c As Range
Application.Calculation = xlCalculationManual
For Each ws In ThisWorkbook.Worksheets
On Error Resume Next
ws.Activate
Set FormulaCells = ws.UsedRange.SpecialCells(xlCellTypeFormulas).Cells
If Err = 0 Then
For Each c In FormulaCells
c.Formula = Replace(c.Formula, "=", "=")
Next 'c
Else
Err.Clear
End If
Next 'ws
Application.Calculation = xlCalculationAutomatic
End Sub
Cela fonctionne pour moi:
WS.Select
WS.Range("A5").Select 'the cell that contains the BDH function
Application.Run "RefreshCurrentSelection"