Faire un suivi de l'accessibilité à Internet (VBA, API)


Vous avez un forfait Internet haut débit et illimité !
Mais êtes vous bien sur que le débit soit haut et que l'accès soit bien permanent ?
Autrement dit, votre FAI vous fournit-il un service de bonne qualité ?

Si vous avez des doutes, si parfois votre navigateur vous semble un peu poussif, voire carrément anémié, allez vérifier et établissez des statistiques de la vitesse d'accès à Internet.
Le logiciel Excel / VBA proposé au téléchargement peut faire ça pour vous pendant une journée ou une semaine, sans (trop) perturber le fonctionnement de votre micro.

Le principe est simple, chaque seconde, la macro tente d'accéder à la page Web de votre choix (par exemple le site de votre FAI) en utilisant des fonctions API.
En cas de succès, elle note le temps qu'a pris l'opération.
Les données sont stockées dans un fichier Excel qui permet de les présenter sous forme de graphique.

Un exemple pour un fournisseur d'accès dont par charité je tairai le nom : chaque jour, la connexion est interrompue aux heures de pointe !



Le coeur de la macro :

Private Declare Function OuvreInternet Lib "wininet" _
    Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, _
    ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function fermeInternet Lib "wininet" _
    Alias "InternetCloseHandle" (ByVal hInet As Long) As Integer
Private Declare Function Ouvrepage Lib "wininet" _
    Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, _
    ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, _
    ByVal dwContext As Long) As Long

Sub ping()
ThisWorkbook.Sheets(1).Range("A3:C3").Insert Shift:=xlDown
ThisWorkbook.Sheets(1).Cells(3, 1) = Now
hr = Now
page_Web_à_lire = "http://jacxl.free.fr/"
internet = OuvreInternet("toto", 1, vbNullString, vbNullString, 0)
url = 0
url = Ouvrepage(internet, page_Web_à_lire, vbNullString, _
     ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
intrnt = 3600 * (Now - hr)
If url = 0 Then intrnt = 8.9999999
ThisWorkbook.Sheets(1).Cells(3, 2) = intrnt
fermeInternet url 'ferme la page
fermeInternet internet 'ferme Internet
End Sub


Les fonctions API utilisées (InternetOpenA, InternetCloseHandle, InternetOpenUrlA) servent à commander l'ouverture et la fermeture de sessions Internet et de pages Web (cliquez ici).

La macro ping(), lancée à intervalle de temps régulier, commence par insérer des cellules en tête de page (pour afficher les données les plus récentes en haut), puis inscrit en colonne A la date et l'heure.
Cette heure est également stockée dans la variable hr et servira de top de départ au chronométrage du temps de connexion.
La macro utilise ensuite les fonctions API pour tenter d'ouvrir Internet puis la page Web choisie.
En cas d'échec (la fonction API renvoie la valeur 0), une durée de 8 secondes est inscrite en colonne 2, sinon, c'est le temps écoulé depuis hr qui est inscrit.

Pour lancer la macro ping() à intervalle de temps régulier, on utilise une macro récursive basée sur Application.OnTime :
la macro lanct() va d'abord lancer ping() puis programmer son propre lancement une minute plus tard :

Sub lanct()
ping
heur = DateSerial(Year(Now), Month(Now), Day(Now)) + TimeSerial(Hour(Now), Minute(Now) + 1, 0)
Application.OnTime heur, "lanct"
End Sub



Le fichier à télécharger est un fichier Excel contenant trois onglets, un onglet données dans lequel sont inscrites les mesures et comprenant un bouton permettant de lancer ou d'arrêter la macro, un onglet graphique et un onglet parametres permettant de parametrer le graphique.
A raison d'une mesure par minute, on peut enregistrer un mois et demi par colonne. Quand la colonne est remplie, la macro la décale automatiquement vers la droite. Le fichier s'enregistre tous les quarts d'heure. Il peut fonctionner en tâche de fond dans une instance masquée d'Excel.

cliquez ici pour télécharger le fichier Excel (zippé)