3 votes

SendKeys pour ouvrir un fichier Excel à partir d'Internet Explorer

Le téléchargement saute le reste de la macro.

Actuellement, j'ai une sous-routine que j'utilise pour aller sur une page web et télécharger un fichier. Cela ouvre une barre qui demande "Ouvrir, sauvegarder, sauvegarder sous". J'utilise les touches "envoyer". %O pour ouvrir le fichier. Après l'ouverture du fichier, je veux utiliser un autre code pour jouer avec le document, mais le problème est que le fichier ne s'ouvre qu'une fois le reste de la macro terminé. Pour une raison quelconque, il saute le reste de ma macro.

Voici un exemple de ce que je fais :

Sub iaspull()

    Set ie = CreateObject("InternetExplorer.Application")
    my_url = "***"
    With ie
        .Visible = True
        .navigate my_url
        Do Until Not ie.Busy And ie.readyState = 4
            DoEvents
        Loop
        ' Some code to get to the file and click download
    End With

    Application.Wait (Now + TimeValue("00:00:08"))
    Application.SendKeys "%{O}", True
    DoEvents

End Sub

Sub enable_edit()
    Application.ActiveProtectedViewWindow.Edit
End Sub

Une fois que le code arrive à .SendKeys "%{O}" il peut faire l'ouverture, mais s'il y a plus de code après, il sautera simplement le code.

Je veux pouvoir exécuter les deux sous-routines l'une après l'autre. Je préférerais ne pas sauvegarder ou utiliser une fonction de sauvegarde sous forme de fichier pour que cela reste plus universel.

Faites-moi part de vos impressions !

0voto

Noldor130884 Points 566

Je suppose que si vous utilisez SendKeys vous ne dites pas fondamentalement à l'application qu'elle doit être Visible . Je ne suis pas sûr que l'application ne soit pas chargé ou simplement pas visible mais (crédit à @omegastripes) sachant que c'est un fichier qui est ouvert avec Excel, j'aurais aussi écrit quelque chose comme :

Dim DownloadedFileFilename As String ' you save here your downloaded file name
Dim EA As Excel.Application
Dim DownloadedFile As Workbook

Set EA = New Excel.Application
With EA
    .Visible = True ' Just to make sure
    .ScreenUpdating = True  ' Just to make sure
    Set DownloadedFile = .Workbooks.Open(Filename:=DownloadedFileFilename), ReadOnly:=True)
    ' [DO STUFF]
End With

C'est le moyen le plus sûr de le faire, à mon avis, et en plus vous avez la possibilité de Set le site variables à Nothing ce qui est aussi un moyen sûr de les désallouer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X