Patrick,
je viens de tester ton dernier code sur une configuration Seven & IE9 & Excel 2003 :
au premier lancement, c'est nickel ! Et sans avoir rien eu besoin de modifier …
Mais comme c'était rapide, je le relance pour mieux observer : le bandeau s'affiche bien puis se ferme
mais le fichier n'est plus téléchargé dans Excel ! Idem au troisième essai, au quatrième, au cinquième, …
Pas assez en forme ce soir pour enquêter …
David,
tu as eu du bol car de mon côté j'ai parfois des loupés mais en provoquant les ennuis
(réduction de la pause à 100, changement de la fenêtre active, …)
et parfois sous IE9 dans la barre des tâches de Seven l'icône d'IE apparaît clignotante
et rien ne se passe tant que je ne clique pas dessus !
Sous Windows 8.1 & IE11 en cours de modification du code j'ai aussi constaté le résiduel d'IE11
met parfois plus de temps à se fermer, dans les 20-30 secondes au lieu des 5-10 habituelles …
Si de ton côté le résiduel est toujours présent longtemps après le téléchargement (60 secondes)
là il sera de nouveau nécessaire d'utiliser mon lancement spécial d'IE de
Demo2IE11.
Je ne l'ai pas réintégré dans ma nouvelle version car je n'ai guère eu le souci
et l'utilisation de ce genre de code est ponctuelle, procédure pas censée être lancée à répétition …
Après avoir posté ma
Demo5a, pensant au
Focus dans d'anciens codes pilotant IE, notamment dans ma contribution,
je suis revenu à mes bases mêmes si elles paraissent incongrues pour IE11 et des versions récentes d'Excel
mais le but recherché est que cela fonctionne sous diverses configurations comme Seven & IE9 & Excel 2003
ou bien Windows 8.1 & IE11 & Excel 2010 ou encore avec des versions plus récentes
et aussi en essayant de livrer un code pas trop compliqué, accessible au plus grand nombre
(en attendant un jour de trouver mieux comme déjà évoqué précédemment) …
Après deux jours de tests sur deux configurations différentes (Seven & IE9 & Excel 2003, Windows 8.1 & IE11 & Excel 2010)
cette nouvelle version me donne les meilleurs résultats même en cherchant les ennuis dont la perte de focus !
Code à coller intégralement dans le module ThisWorkbook :
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #If Win64 Then
Private Declare PtrSafe Function FindWindowExA& Lib "user32" (ByVal hParent&, ByVal hChild&, ByVal ClassName$, ByVal WindowName$)
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal MilliSeconds&)
#Else
Private Declare Function FindWindowExA& Lib "user32" (ByVal hParent&, ByVal hChild&, ByVal ClassName$, ByVal WindowName$)
Private Declare Sub Sleep Lib "kernel32" (ByVal MilliSeconds&)
#End If
Const PROC = "ThisWorkbook.KeyLoop", SC = 10
Dim IE As Object, D As Date, T!
Sub Demo6()
Const ELT = "ctl00_BodyABC_Button1"
Dim Wb As Workbook
T = Timer
For Each Wb In Workbooks
If Wb.Name Like "Cotations*.csv" Then Wb.Close False
Next
On Error GoTo Fin
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Navigate "http://www.abcbourse.com/download/historiques.aspx"
While .ReadyState < 3
If Timer - T > SC Then Error 17
Wend
While Not IsObject(.Document.all(ELT))
If Timer - T > SC Then Error 31004
Wend
With .Document.all
.ctl00_BodyABC_strDateDeb.Value = "26/05/2015"
.ctl00_BodyABC_strDateFin.Value = "26/05/2016"
.ctl00_BodyABC_oneSico.Click
.ctl00_BodyABC_txtOneSico.Value = "FR0000120222"
.ctl00_BodyABC_dlFormat.Value = "x"
.Item(ELT).Click
End With
While FindWindowExA(.HWND, 0&, "Frame Notification Bar", vbNullString) = 0
If Timer - T > SC Then Error 31027
Wend
Sleep 400
.Visible = True
Sleep 100
Fin:
If Err.Number Then T = 0: Beep: .Quit: Set IE = Nothing Else KeyLoop
End With
End Sub
Private Sub KeyLoop()
On Error Resume Next
AppActivate IE.Document.Title
If Err.Number = 0 Then
Sleep 100
With IE.Document.getElementsByTagName("A"): .Item(.Length - 1).Focus: End With
End If
If Err.Number Or Timer - T > SC Then
T = 0: Beep: IE.Quit
Set IE = Nothing
Else
Sleep 100
CreateObject("WScript.Shell").SendKeys "{TAB}~"
D = Now + 0.00002: Application.OnTime D, PROC
End If
End Sub
Private Sub Workbook_Deactivate()
If ActiveWorkbook.Name Like "Cotations*.csv" And T Then
Debug.Print "Demo6 : " & Format$(Timer - T, "0.000s")
On Error Resume Next
Application.OnTime D, PROC, , False
T = 0: IE.Quit
Set IE = Nothing
ActiveWorkbook.Saved = True
End If
End Sub |
Si le téléchargement ne s'effectue pas du premier coup, pas d'effet flash mais une attente sur le bandeau,
il faut augmenter la pause de la ligne de code n°40 … Sinon ne pas hésiter à tester avec une pause insuffisante !
Avec IE9, plus de clignotement mais parfois IE n'arrive pas à s'afficher au premier plan :
c'est géré avec une fermeture automatique et un bip sonore ; y a plus qu'à relancer …
J'ai l'impression que c'est dû aux lancements consécutifs mais au moins cela ne plante pas ni ne boucle indéfiniment …
Piloter IE est comme le trapèze volant au cirque, une chute est toujours possible ‼
Partager