Dans cet article, je vous propose une fonction VBA bien pratique qui vous permet de faire deux choses:
- vérifier si une adresse web (= adresse URL) est valide >> c'est-à-dire si elle existe
- vérifier si un fichier sur internet existe (image, fichier PDF,…)
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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: test d'un 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 15/9/2021 – il se peut que à un moment dans le futur, ce fichier ne sera plus disponible).
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub VerificationFichierSurInternet() 'par Excel-Malin.com ( https://excel-malin.com ) Dim FichierTest As String FichierTest = "https://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 |
Attention: pour que ce code fonctionne, vous aurez besoin du code précédent (le code de la fonction URLexiste
) – vous devez donc copier les deux codes dans votre Module VBA.
Exemple d'utilisation: une 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).
1 2 3 4 5 6 7 8 9 10 11 12 |
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.
Notez également que l'adresse URL est considérée comme "invalide" même si le site internet affiche une page "404" spécifique. Le test est donc correct même dans ce cas-là.
Pour aller plus loin en VBA…
et pour finir, quelques articles pratiques qui pourraient vous servir:
- Liste de toutes les fonctions disponibles en VBA
- Suivre l'activité de l'utilisateur d'un Excel avec VBA (log)
- Trouver la langue de l'utilisateur en VBA
- Comment utiliser RECHERCHEV directement en VBA (tutoriel)
- Gestion des fichiers en VBA
- Outils Excels gratuits à télécharger
15 commentaires sur “VBA: vérifier si une page internet ou un fichier sur internet existe”
Merci pour ces lignes de programmation.
Que faudrait-il rajouter pour qu'il ouvre le site web si celui existe ?
Merci
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
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
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").
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
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
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
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
Mea culpa, j'ai fait un copier/coller incomplet.
j'ai corrigé le code de ma réponse, vous pouvez réessayer.
Et ici il y a un fichier test:
https://excel-malin.com/wp-content/uploads/2019/10/Check_links_test.xlsm
PS: Vous aurez des messages pop-up d'Excel pour autoriser le contenu et les macros vu que le fichier vient d'internet…
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
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
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.
Bonjour
Super cette fonction qui a l'air puissante.
Je l'essaie de suite
Merci pour le travail effectué et le partage communautaire
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
Bonjour,
merci pour ces lignes que je cherche depuis un bon moment.
Votre macro fonctionne tout a fait mais je rencontre un souci sur un lien qui fonctionne bien en cliquant sur le lien mais la macro remonte que le fichier n'existe pas. Effectivement l'accès à ce fichier est sécurisé par un identifiant et mot de passe.
Auriez vous une idée de comment s’identifier via un formulaire identifiant / mot de passe avant d'effectuer le test.
Merci
Victoire
Bonsoir
J'utilise cette fonction avec WIN7 et excel 2007 mais aussi WIN 2010 et excel2016 et elle fonctinnait très bien jusqu'à peu de temps ou elle ne fonctionne plus sous WIN7 .
Auriez-vous une idée ?