Bonjour à tous,
J'utilise une macro qui me permet d'exporter des données (téléchargement d'un classeur excel) depuis Bloomberg. Jusqu'ici, tout va bien! Je rencontre un problème lorsque je souhaite utiliser ce classeur (copier/coller par exemple) dans une même procédure ou en appelant une autre procédure après l'export.
Je m'explique: en gros, j'exporte des données sur un classeur (nouveau classeur dont le nom est variable) ensuite j'ai besoin de selectionner ce classeur et tritouiller les données qui s'y trouvent. Si je lance les procédures séparemment ex: 1ere sub = export des données ; 2eme sub: retraitement quelquonque des données, cela fonctionne. Par contre le classeur ne s'ouvre pas si dans une seule et même sub je demande l'export et ensuite la sélection du classeur (ou si j'appelle la 2nde sub à la fin de la 1ere). J'ai l'impression que pendant l'exécution de la macro, l'ouverture est "bloquée".
Désolé pour le pavé, voici le code que j'utilise, auriez-vous s'il vous plaît des idées qui me permettraient d'ajouter des instructions sans que l'ouverture du classeur ne soit "bloquée".
J'utilise une macro qui me permet d'exporter des données (téléchargement d'un classeur excel) depuis Bloomberg. Jusqu'ici, tout va bien! Je rencontre un problème lorsque je souhaite utiliser ce classeur (copier/coller par exemple) dans une même procédure ou en appelant une autre procédure après l'export.
Je m'explique: en gros, j'exporte des données sur un classeur (nouveau classeur dont le nom est variable) ensuite j'ai besoin de selectionner ce classeur et tritouiller les données qui s'y trouvent. Si je lance les procédures séparemment ex: 1ere sub = export des données ; 2eme sub: retraitement quelquonque des données, cela fonctionne. Par contre le classeur ne s'ouvre pas si dans une seule et même sub je demande l'export et ensuite la sélection du classeur (ou si j'appelle la 2nde sub à la fin de la 1ere). J'ai l'impression que pendant l'exécution de la macro, l'ouverture est "bloquée".
Désolé pour le pavé, voici le code que j'utilise, auriez-vous s'il vous plaît des idées qui me permettraient d'ajouter des instructions sans que l'ouverture du classeur ne soit "bloquée".
Code:
Private Sub CommandButton1_Click()
lngch = DDEInitiate("WINBLP", "BBK")
With Workbooks("Essai").Sheets("Feuil2")
Set startcell = .Cells(1, 1) 'instructions transmises à Bloomberg pour exporter les données
DDEExecute lngch, startcell
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime 'Pause permettant de charger les données
Set startcell = .Cells(2, 1) 'instructions BBG
DDEExecute lngch, startcell
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 5
waitTime = TimeSerial(newHour, newMinute, newSecond)
Set startcell = .Cells(3, 1) 'instructions BBG
DDEExecute lngch, startcell
' A ce stade, l'exportation du classeur xls est faite et si la macro s'arrête là, il s'ouvre.
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 5
waitTime = TimeSerial(newHour, newMinute, newSecond)
'j'ai essayé de rajouté une pause afin de laisser le classeur s'ouvrir mais la pause
'ou toute autre instruction "bloque" l'ouverture du classeur
DDETerminate lngch
End With
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 5
waitTime = TimeSerial(newHour, newMinute, newSecond)
Call copyPaste
End Sub
Sub copyPaste()
Dim WbkS As Workbook ' Classeur source
Dim WbkD As Workbook ' Classeur de Destination
Dim ShtS As Worksheet ' Feuille source
Dim ShtD As Worksheet ' Feuille destination
Dim RngS As String ' Range Source
Dim RngD As String ' Range de Destination
Dim wb As Workbook, x As String
RngS = "A:R" ' Définir la plage de destination
RngD = "A:R" ' Défninir la plage source
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name Then x = wb.Name
Next wb
Workbooks(x).Activate
Set WbkS = Workbooks(x)
Set WbkD = Workbooks("Classeur1")
Workbooks("Classeur1").Activate
Set WbkD = ActiveWorkbook
WbkS.Sheets("Book1").Range(RngS).Copy Destination:=WbkD.Sheets("Feuil1").Range(RngD)
Set WbkD = Nothing
Set WbkS = Nothing
End Sub