Ouverture d'un classeur pendant l'exécution d'une macro (VBA)

cycyy

XLDnaute Nouveau
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".
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
 

Pierrot93

XLDnaute Barbatruc
Re : Ouverture d'un classeur pendant l'exécution d'une macro (VBA)

Bonjour,

tu aurais mieux fais d'ouvrir TON propre fil de discussion et bien détailler ta demande, car là en l'état pas sûr que tu obtiennes une réponse convenable, vu comment la question a été décrite...

bonne journée
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 185
Messages
2 086 011
Membres
103 093
dernier inscrit
Molinari