VBA: vérifier si fichier sur internet existe / si URL existe 13



Dans cet article, je vous propose une fonction VBA bien pratique qui vérifie deux choses:

  •  si une adresse web (= adresse URL) est valide >> c'est-à-dire si elle existe
  •  si un fichier sur internet existe

Les deux peuvent être très pratique – que vous soyez un créateur ou gestionnaire de site web ou si vous utilisez Excel ou VBA pour télécharger des fichiers à partir d'Internet.

Fonction VBA pour déterminer si un fichier sur internet existe et pour vérifier si une adresse web existe

Cette fonction utilise comme paramètre le lien vers le fichier qui se trouve (qui devrait se trouver) sur internet ou l'adresse web que vous voulez vérifier. Comme résultat, la fonction retourne la valeur Boolean égale à VRAI (TRUE) si le fichier ou adresse existe ou FAUX (FALSE) si le fichier ou l'adresse web n'existe pas…

Et voici déjà la fonction VBA. Il vous suffit de la copier/coller dans un Module de votre Projet VBA. Plus loin, vous verrez les exemples pratiques de l'utilisation de cette fonction.

Public Function URLexiste(URLaVerifier As String) As Boolean
'par Excel-Malin.com ( https://excel-malin.com )

On Error GoTo Erreur

Dim oXHTTP As Object
Set oXHTTP = CreateObject("MSXML2.XMLHTTP")

oXHTTP.Open "HEAD", URLaVerifier, False
oXHTTP.Send

URLexiste = (oXHTTP.Status = 200)
Exit Function

Erreur:
URLexiste = False
End Function

En cas d'erreur, la fonction retourne la valeur FAUX (FALSE).

Exemple d'utilisation: fichier sur internet (image)

Et voici comment utiliser cette fonction pour tester si un fichier sur internet existe. Ici, pour l'exemple, on va utiliser l'image du logo de Google (disponible au 1/3/2018 – il se peut que à un moment dans le futur, ce fichier ne sera plus disponible).

Sub VerificationFichierSurInternet()
'par Excel-Malin.com ( https://excel-malin.com )

Dim FichierTest As String
FichierTest = "http://www.google.be//images/branding/googlelogo/2x/googlelogo_color_120x44dp.png" 'logo de Google

If URLexiste(FichierTest) = True Then
    MsgBox "Le fichier existe..."
Else
    MsgBox "Le fichier n'existe pas ou n'est pas accessible..."
End If

End Sub

Exemple d'utilisation: adresse web (URL) est-elle valide?

Et voici un exemple pour une adresse web. Il peut s'agir directement du domaine principale (comme: fr.wikipedia.org ) ou d'une sous-page du site internet (comme dans l'exemple ci-dessous).

Sub VerificationAdresseURL()
'par Excel-Malin.com ( https://excel-malin.com )

Dim URLTest As String
URLTest = "https://excel-malin.com/a-propos/"

If URLexiste(URLTest) = True Then
    MsgBox "Cette adresse web existe..."
Else
    MsgBox "Cette adresse web n'existe pas ou n'est pas accessible..."
End If
End Sub

Conclusion

Vous voici parés pour l'exploration du grand réseau qu'est Internet. L'avantage de cette fonction VBA est qu'elle est très rapide. Elle sera donc parfaite pour une utilisation en masse via une boucle. Vous pourrez ainsi télécharger des dizaines, voir centaines de fichiers depuis l'internet ou encore vérifier des longues listes des adresses URL… C'est un bon exemple pour démontrer que le VBA peut facilement être utilisée pour l'automatisation des tâches relatives à Internet.

 

21 0




Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

13 commentaires sur “VBA: vérifier si fichier sur internet existe / si URL existe

    • excel-malin.com Auteur de l’article

      Bonjour Christian,
      pour cela, il vous suffit d'utiliser la fonction FollowHyperlink .

      Donc, par exemple, dans le code "Sub VerificationAdresseURL()" plus haut, il vous suffit de remplacer le code:
      MsgBox "Cette adresse web existe..." (ligne 8)
      par le code suivant:
      ActiveWorkbook.FollowHyperlink Address:=URLTest

      Ce nouveau code va ouvrir la page web dans votre navigateur par défaut.
      Bien à vous… Martin

  • Nicolas

    Bonjour et merci pour cet article,

    Je suis novice en la matière mais j'essaye de réaliser cette manœuvre.
    En effet j'essaye de vérifier si plusieurs liens fonctionnent, j'ai un fichier Excel avec plus de 150 liens et je dois vérifier s'ils existent tous assez fréquemment et j'essaye d'automatiser cela.
    Le problème c'est que je suis novice sur VBA. Pourriez-vous me guider pas à pas pour réaliser cela ?

    Merci de votre aide

    • excel-malin.com Auteur de l’article

      Bonjour Nicolas,
      vous pouvez utiliser le code qui suit…
      Cela suppose que dans la colonne "A" vous avez les liens, dans la colonne "B", vous aurez "OK" or "NOK" selon si le lien/fichier existe ou pas.
      Cela suppose aussi que les deux colones ont un en-tête (que les liens commencent à la ligne 2)
      Vous pouvez le lancer avec Alt+F8 quand vous êtes sur la feuille qui contient les liens (lancer la macro "TestLiens").

      Public Function URLexiste(URLaVerifier As String) As Boolean
      'par Excel-Malin.com ( https://excel-malin.com )
      
      URLexiste = False
      On Error GoTo Erreur
      
      Dim oXHTTP As Object
      Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
      
      oXHTTP.Open "HEAD", URLaVerifier, False
      oXHTTP.Send
      
      URLexiste = (oXHTTP.Status = 200)
      Exit Function
      
      Erreur:
      URLexiste = False
      End Function
      
      Sub TestLiens()
      
      For LienATester = 2 To Range("A" & Rows.Count).End(xlUp).Row
          If URLexiste(Cells(LienATester, 1).Value) = True Then
              Cells(LienATester, 2) = "OK"
          Else
              Cells(LienATester, 2) = "NOK"
          End If
      Next LienATester
      End Sub

      Si vous voulez mettre le résultat dans une autre colonne que "B", vous devez changer le "2" dans Cells(LienATester, 2) par le numéro de colonne que vous voulez (attention, c'est deux fois dans le code).

      Voilà, j'espère que cela vous aidera.
      Cordialement, Martin

      • Nicolas

        Bonjour et merci pour cette réponse rapide.

        Je ne sais pas si j'ai fait une erreur , mais quand je suis votre processus, un message d'erreur apparaît : impossible d'exécuter le code en mode Arrêt.
        Quelle est la manipulation à faire ?

        Encore merci

        • excel-malin.com Auteur de l’article

          Re bonjour,
          ce message signifie qu'il y a déjà une autre macro qui a commencé à tourner et n'a pas fini (elle est probablement bloquée quelque part).
          Allez dans l'éditeur VBE et assurez vous que dans l'intitulé de la fenêtre il n' a pas "en exécution" ou "en pause".
          De toute façon, ce que vous pouvez faire est de cliquer sur le carré bleu dans (= stop, à côté du triangle vert = "lancer") dans la barre de menu.
          S'il y a une macro qui tourne ou est en pause, le click sur le petit carré bleu va l'arrêter.

          Ainsi, vous pourrez lancer la macro que vous voulez.
          Bàv, Martin

          • Nicolas

            C'est encore moi,

            J'ai essayé et maintenant j'ai le code erreur : erreur de compilation End Sub attendu.

            J'ai essayé de le rajouter à la fin, mais voila le nouveau code d'erreur : Erreur d'exécution '13': Incompatibilité de type.

            Qu'est-ce que je fais de mal…
            Je suis désolé je suis sûr que l'erreur vient de ma part, mais je n'arrive pas à comprendre…

            Peut-être pourriez-vous me fournir un fichier Excel comme exemple ?

            Merci pour votre aide
            Nicolas

          • Nicolas

            Bonjour,

            Cela fonctionne, merci beaucoup.
            Cependant je viens de me rendre compte que j'avais également des fichiers à vérifier.
            est-ce que je dois créer un autre module et copier coller les informations relatives aux fichiers, je n'arrive pas vraiment à savoir quoi reprendre ?

            Merci pour ton aide
            Nicolas

          • excel-malin.com Auteur de l’article

            re bonjour,
            tu parles des fichiers "locaux" (= votre PC & disques sur le réseau) ou des fichiers qui se trouvent sur internet (avec leur propre adresse URL)?

            Si ce sont les fichiers locaux, tu peux regarder le code VBA ici: https://excel-malin.com/codes-sources-vba/vba-verifier-si-le-fichier-existe/

            Si ce sont des fichiers sur internet (par ex. "https://excel-malin.com/wp-content/uploads/2018/08/Liste_des_Fonctions_Excel-par-Excel-Malin_v-1-1_petit.jpg", tu n'as qu'à les ajouter à ta liste et le code que tu as déjà va les tester aussi… De la même manière qu'il vérifie les pages internet.

            Bàt, Martin

  • Jeremy

    Bonjour Martin,

    J'ai essayé d'appliquer cette macro pour les urls du site leboncoin et cela ne fonctionne pas.
    En effet, toutes les urls me renvoient un code 403 forbidden..
    Ce retour 403 est surement du au DATADOME mis en place sur le site du boncoin.
    Est-il possible de contourner ce DATADOME afin de vérifier le status des annonces ?

    Cordialement.

  • Brucelie

    Bonjour
    Super cette fonction qui a l'air puissante.
    Je l'essaie de suite
    Merci pour le travail effectué et le partage communautaire

  • Bucelie

    Bonjour
    Je rencontre un problème avec cette fonction
    Je teste des liens "Https Wikipédia" (qui existent) et la fonction retourne un code erreur=400
    Pour le lien en cause j'utilise la fonction FollowHyperlink , la page s'ouvre.
    J'avoue ne rien comprendre (peut-être faut-il utiliser une autre fonction qui gère les lettres accentuées ?)
    Voici un lien pour récupérer mon fichier de test (macros inclues)
    http://dl.free.fr/kI95KJ4M4
    En vous remerciant pour l'aide apportée