
Envoyé par
aiklad
si je n'ajoute pas la ligne avec le Application.Wait, l'URL est à nouveau bloqué sur une valeur, sûrement car la page n'a pas le temps de charger complètement malgré le While IE.Busy.
Busy & ReadyState d'IE correspondent juste au chargement du code initial de la page
mais pas aux diverses requêtes JScript de mise à jour comme par exemple pour ton lien.
C'est pour cela souvent je conseille d'observer le comportement d'une page Web avant de commencer à coder …

Envoyé par
Marc-L
Avant d'évoquer une autre approche pilotant Internet Explorer
Effectivement il suffit d'une pause après le chargement initial de la page pour voir le lien à jour.
De mon côté avec une pause d'une seconde - Sleep de Windows car parfois Wait peu poser problème avec IE - souvent
le lien est à jour mais parfois non. Il suffit de l'augmenter un peu et voilà le tour serait joué …
Et c'est là l'erreur car une pause valable à un instant T peut s'avérer insuffisante un autre jour selon l'état de charge de l'ordinateur,
de la bande passante, du réseau local, du site, du hamster s'arrêtant de pédaler ne fournissant plus assez de courant au routeur, …
Nombre de fois où j'ai publié des codes fonctionnant bien de mon côté sur différents ordinateur (i3, i5 & i7)
et versions de Windows mais qui échouaient du côté de membres de forums même chevronnés !
Logiquement juste en observant la page, il suffit de repérer la présence ou l'absence d'un élément,
parfois sa réinitialisation ou comme ici la mise à jour de la valeur de l'élément et pour cela, une pause est inutile.
Mais voilà il y a encore un risque de boucle sans fin lorsque - ici peut-être hypothétiquement - il n'y a pas de mise à jour
car le fichier en dur dans le code initial de la page correspondrait en fait à la dernière mise à jour …
Donc la meilleure solution est un hybride des deux approches précédentes :
attente de la mise à jour de l'élément mais limité par un délai maximum …
Dans l'exemple suivant ce délai est fixé à cinq secondes dans la ligne de code n°9 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Sub DemoIE()
Const URL = "https://www.edf.fr/groupe-edf/qui-sommes-nous/activites/optimisation-et-trading/listes-des-indisponibilites-et-des-messages/liste-des-indisponibilites"
With CreateObject("InternetExplorer.application")
On Error GoTo Fin
.Navigate URL
While .Busy And .ReadyState < 4: DoEvents: Wend
With .Document.all
T$ = .zoneLinks.getElementsByTagName("A")(0).href
VD = Now + #12:00:05 AM#
On Error Resume Next
While Now < VD And .zoneLinks.getElementsByTagName("A")(0).href = T
Wend
On Error GoTo Fin
Workbooks.Open .zoneLinks.getElementsByTagName("A")(0).href
End With
Fin:
If Err.Number Then Beep
.Quit
End With
End Sub |
La ligne de code n°11 pouvant déclencher une erreur en tombant pile-poil au moment de la mise à jour
il serait inopportun de remonter la ligne n°12 au niveau de cette ligne n°11 …
___________________________________________________________________________________________________________

Merci de cliquer sur

en bas à droite de chaque message ayant aidé …
Partager