Nikolas a développé une requête Web pour récupérer régulièrement des données externes. Le problème est qu’il reçoit fréquemment un message d’erreur «Impossible d’ouvrir la page Web …​» lors de l’exécution de la requête Web. Ce message apparaît en cas d’interruption de la connexion Internet entre Nikolas et le serveur Web, et il doit cliquer sur OK dans le message d’erreur pour qu’Excel continue.

Cela pose un problème lorsque Nikolas est loin de son ordinateur car cela peut signifier que la requête Web ne collecte pas toutes les données qu’elle devrait être car elle attend patiemment que le bouton OK soit cliqué en cas de problème. Nikolas veut un moyen de dire à la requête Web de ne pas afficher le message et de revenir simplement en attente si elle ne peut pas se connecter sur la tentative en cours.

Malheureusement, il n’existe aucun moyen de dire à Excel de faire ce que vous voulez. Lorsque le message « Impossible d’ouvrir la page Web …​ » apparaît, il est pratiquement impossible de supprimer le message. La seule solution consiste à essayer de créer une macro qui contourne le problème. Par exemple, vous pouvez développer une macro qui crée une instance d’Internet Explorer (qui n’a pas le problème) pour tester une erreur atteignant la page Web.

La macro suivante implémente cette approche.

Option Explicit 'Declare Sleep API Private Declare Sub Sleep Lib "kernel32" (ByVal nMilliseconds As Long)



Function GetData(strStartURL As String) As String     Dim Attempt As Long     Dim Connected As Boolean     Dim ieDocNew As MSHTML.HTMLDocument

GetData = "N/A"

Attempt = 0

retry:

Attempt = Attempt + 1

'Create browser object references and open an IE window     Dim ieNew As New InternetExplorer     'Load page     With ieNew         .Visible = True       'show window         .navigate strStartURL 'open page         While Not .readyState = READYSTATE_COMPLETE             Sleep 500         'wait 1/2 sec before trying again         Wend     End With

'The page should be open in IE, time for parsing     'Create document object model references     Set ieDocNew = ieNew.Document

If ieDocNew.Scripts.Length = 13 _       And ieNew.LocationName = "Microsoft Excel Tips" _       Then         Connected = True         GetData = "Data successfully captured"



'This is where you do something with the data     End If

'Clean up IE objects     Set ieDocNew = Nothing     ieNew.Quit     Set ieNew = Nothing     DoEvents     If Attempt < 10 And Not Connected Then GoTo retry End Function

Notez que cette macro nécessite une configuration dans l’interface VBA pour fonctionner correctement. Plus précisément, vous devez choisir Références dans le menu Outils et vous assurer que le projet inclut des références à la bibliothèque d’objets Microsoft HTML et aux contrôles Internet Microsoft.

Ce que fait la macro est d’utiliser IE pour se connecter à l’URL transmise à la fonction (dans strStartURL), puis de récupérer le contenu qui s’y trouve.

Si la connexion réussit, Connected est défini sur True et vous pouvez analyser et utiliser les données sur le site. La fonction, telle qu’elle est écrite, renvoie «Données capturées avec succès» à la routine appelante, mais vous pouvez tout aussi facilement renvoyer une valeur récupérée sur le site distant. Cette valeur pourrait alors être remplie, mais la routine d’appel, dans une feuille de calcul.

Notez également que la fonction effectue une analyse rudimentaire de la page qu’elle capture et considère que la connexion est réussie uniquement si elle trouve un libellé attendu dans le titre de la page trouvé à l’URL.

Pour avoir une idée du fonctionnement de la macro, utilisez des macros comme les suivantes:

Sub TEST_GetData1()

MsgBox GetData("http://excel.tips.net")

End Sub
Sub TEST_GetData2()

MsgBox GetData("http://excel.tipsxx.net")

End Sub
Sub TEST_GetData3()

MsgBox GetData("http://excel.tips.net/junk")

End Sub

Le premier devrait fonctionner; les deux seconds devraient afficher un message qui dit «N / A».

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (10525) s’applique à Microsoft Excel 2007 et 2010.