Vérification "poussée" de la validité d'un lien par macro

Le
Nicolas C.
Bonjour,

J'ai découvert ce forum il y a peu grâce au site jacxl.free.fr j'espè=
re
pouvoir y échanger beaucoup d'informations avec vous tous.

Voila mon problème :

Je cherche à vérifier des liens via excel, j'ai repris le code prés=
ent
sur jacxl.free.fr et l'ai modifié à ma sauce ;) Cela fonctionne pr=
esque !

Les adresses que je veux vérifier ne provoquent pas d'erreurs "grave" s=
i
elle n'existent pas, IE et Firefox remplacent automatiquement le nom de
fichier par un autre approchant sans afficher de page d'erreur !

Exemple :
"http://www.kalidil.com/images_produit/3XXV66.jpg" (cette image n'est
pas présente sur le serveur)

sera remplacée automatiquement par

"http://www.kalidil.com/images_produit/3XXV60.jpg" (image bien présente=

sur le serveur)

sans laisser aucun message d'erreur .

Je pense que c'est cela qui empêche le code VBA de vérification de
signaler le problème.

Voila le code de ma 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 Lo=
ng
Private Declare Function InternetOpenUrl 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
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal zaza
As Long) As Integer

Sub Test_page_Web_2()
For Counter = 2 To 500
Set URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
internet_ouvert = OuvreInternet("Test_validité", 1, vbNullString,
vbNullString, 0) 'ouvre Internet
numURL = InternetOpenUrl(internet_ouvert, URL_à_tester, vbNullString,=
_
ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
If numURL > 0 Then Worksheets("données").Cells(Counter, 9).FormulaR1C1 =
=
"OK" _
Else Worksheets("données").Cells(Counter, 9).FormulaR1C1 = URL_à=
_tester
InternetCloseHandle numURL 'ferme la page
InternetCloseHandle internet_ouvert 'ferme Internet
Next Counter
End Sub

Je me demandais donc si il était possible de vérifier quel code HTML =

renvoyai la page testée et si on pouvais faire une vérification à p=
artir
de cela (voir : http://www.the-eggman.com/seminars/html_error_codes.htm)

Quelqu'un a une idée ?

Merci de m'avoir lu.

Cordialement,

Nicolas
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
j
Le #5388511
ce truc est bizarre, effectivement, kalidil a l'air de chercher si une image
proche existe
tu peux peut-etre essayer par API de lire le code de la page correspondant
directement à http://www.kalidil.com/images_produit/3XXV66.jpg, page qui
n'ets peut-etre pas une image mais une page de redirection
ou plus simple, en pilotant IE par vba, tu peux ouvrir l'image (en mode
caché), vérifier son adresse, puis la refermer (c'est assez bestial, mais ça
devrait marcher)



"Nicolas C."
Bonjour,

J'ai découvert ce forum il y a peu grâce au site jacxl.free.fr j'espère
pouvoir y échanger beaucoup d'informations avec vous tous.

Voila mon problème :

Je cherche à vérifier des liens via excel, j'ai repris le code présent
sur jacxl.free.fr et l'ai modifié à ma sauce ;) Cela fonctionne... presque !

Les adresses que je veux vérifier ne provoquent pas d'erreurs "grave" si
elle n'existent pas, IE et Firefox remplacent automatiquement le nom de
fichier par un autre approchant sans afficher de page d'erreur !

Exemple :
"http://www.kalidil.com/images_produit/3XXV66.jpg" (cette image n'est
pas présente sur le serveur)

sera remplacée automatiquement par

"http://www.kalidil.com/images_produit/3XXV60.jpg" (image bien présente
sur le serveur)

sans laisser aucun message d'erreur .

Je pense que c'est cela qui empêche le code VBA de vérification de
signaler le problème.

Voila le code de ma 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 InternetOpenUrl 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
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal zaza
As Long) As Integer

Sub Test_page_Web_2()
For Counter = 2 To 500
Set URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
internet_ouvert = OuvreInternet("Test_validité", 1, vbNullString,
vbNullString, 0) 'ouvre Internet
numURL = InternetOpenUrl(internet_ouvert, URL_à_tester, vbNullString, _
ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
If numURL > 0 Then Worksheets("données").Cells(Counter, 9).FormulaR1C1 "OK" _
Else Worksheets("données").Cells(Counter, 9).FormulaR1C1 = URL_à_tester
InternetCloseHandle numURL 'ferme la page
InternetCloseHandle internet_ouvert 'ferme Internet
Next Counter
End Sub

Je me demandais donc si il était possible de vérifier quel code HTML
renvoyai la page testée et si on pouvais faire une vérification à partir
de cela (voir : http://www.the-eggman.com/seminars/html_error_codes.htm)

Quelqu'un a une idée ?

Merci de m'avoir lu.

Cordialement,

Nicolas
Nicolas C.
Le #5388121
ce truc est bizarre, effectivement, kalidil a l'air de chercher si une image
proche existe
tu peux peut-etre essayer par API de lire le code de la page correspond ant
directement à http://www.kalidil.com/images_produit/3XXV66.jpg, page qui
n'ets peut-etre pas une image mais une page de redirection
ou plus simple, en pilotant IE par vba, tu peux ouvrir l'image (en mode
caché), vérifier son adresse, puis la refermer (c'est assez bestial , mais ça
devrait marcher)



"Nicolas C."
Bonjour,

J'ai découvert ce forum il y a peu grâce au site jacxl.free.fr j'es père
pouvoir y échanger beaucoup d'informations avec vous tous.

Voila mon problème :

Je cherche à vérifier des liens via excel, j'ai repris le code pré sent
sur jacxl.free.fr et l'ai modifié à ma sauce ;) Cela fonctionne... presque !

Les adresses que je veux vérifier ne provoquent pas d'erreurs "grave" si
elle n'existent pas, IE et Firefox remplacent automatiquement le nom de
fichier par un autre approchant sans afficher de page d'erreur !

Exemple :
"http://www.kalidil.com/images_produit/3XXV66.jpg" (cette image n'est
pas présente sur le serveur)

sera remplacée automatiquement par

"http://www.kalidil.com/images_produit/3XXV60.jpg" (image bien présen te
sur le serveur)

sans laisser aucun message d'erreur .

Je pense que c'est cela qui empêche le code VBA de vérification de
signaler le problème.

Voila le code de ma macro :

Private Declare Function OuvreInternet Lib "wininet" Alias "InternetOpe nA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyNa me _
As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl 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
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal zaza
As Long) As Integer

Sub Test_page_Web_2()
For Counter = 2 To 500
Set URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
internet_ouvert = OuvreInternet("Test_validité", 1, vbNullString,
vbNullString, 0) 'ouvre Internet
numURL = InternetOpenUrl(internet_ouvert, URL_à_tester, vbNullStrin g, _
ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
If numURL > 0 Then Worksheets("données").Cells(Counter, 9).FormulaR1C 1 =
"OK" _
Else Worksheets("données").Cells(Counter, 9).FormulaR1C1 = URL _à_tester
InternetCloseHandle numURL 'ferme la page
InternetCloseHandle internet_ouvert 'ferme Internet
Next Counter
End Sub

Je me demandais donc si il était possible de vérifier quel code HTM L
renvoyai la page testée et si on pouvais faire une vérification à partir
de cela (voir : http://www.the-eggman.com/seminars/html_error_codes.htm )

Quelqu'un a une idée ?

Merci de m'avoir lu.

Cordialement,

Nicolas




Merci pour ta réponse malheureusement "piloter IE depuis VBA" ne
m'est pas possible je n'ai pas le niveau, si j'ai réussi a modifier un
peu ton code je ne le comprends pas entièrement et n'ai aucune
connaissance en VBA :(. Je vais voir avec l'hébergeur si cette
"fonction" de remplacer par une image proche peut être désactivée.. .

Nicolas C.
Le #5388051
ce truc est bizarre, effectivement, kalidil a l'air de chercher si une
image
proche existe
tu peux peut-etre essayer par API de lire le code de la page
correspondant
directement à http://www.kalidil.com/images_produit/3XXV66.jpg, page qui
n'ets peut-etre pas une image mais une page de redirection
ou plus simple, en pilotant IE par vba, tu peux ouvrir l'image (en mod e
caché), vérifier son adresse, puis la refermer (c'est assez bestia l,
mais ça
devrait marcher)



"Nicolas C."
Bonjour,

J'ai découvert ce forum il y a peu grâce au site jacxl.free.fr j'e spère
pouvoir y échanger beaucoup d'informations avec vous tous.

Voila mon problème :

Je cherche à vérifier des liens via excel, j'ai repris le code pré sent
sur jacxl.free.fr et l'ai modifié à ma sauce ;) Cela fonctionne...
presque !

Les adresses que je veux vérifier ne provoquent pas d'erreurs "grave " si
elle n'existent pas, IE et Firefox remplacent automatiquement le nom d e
fichier par un autre approchant sans afficher de page d'erreur !

Exemple :
"http://www.kalidil.com/images_produit/3XXV66.jpg" (cette image n'est
pas présente sur le serveur)

sera remplacée automatiquement par

"http://www.kalidil.com/images_produit/3XXV60.jpg" (image bien prése nte
sur le serveur)

sans laisser aucun message d'erreur .

Je pense que c'est cela qui empêche le code VBA de vérification de
signaler le problème.

Voila le code de ma 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 InternetOpenUrl 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
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal zaza
As Long) As Integer

Sub Test_page_Web_2()
For Counter = 2 To 500
Set URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
internet_ouvert = OuvreInternet("Test_validité", 1, vbNullString,
vbNullString, 0) 'ouvre Internet
numURL = InternetOpenUrl(internet_ouvert, URL_à_tester, vbNullStri ng, _
ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
If numURL > 0 Then Worksheets("données").Cells(Counter, 9).FormulaR1 C1 =
"OK" _
Else Worksheets("données").Cells(Counter, 9).FormulaR1C1 =
URL_à_tester
InternetCloseHandle numURL 'ferme la page
InternetCloseHandle internet_ouvert 'ferme Internet
Next Counter
End Sub

Je me demandais donc si il était possible de vérifier quel code HT ML
renvoyai la page testée et si on pouvais faire une vérification à partir
de cela (voir : http://www.the-eggman.com/seminars/html_error_codes.ht m)

Quelqu'un a une idée ?

Merci de m'avoir lu.

Cordialement,

Nicolas




Merci pour ta réponse malheureusement "piloter IE depuis VBA" ne
m'est pas possible je n'ai pas le niveau, si j'ai réussi a modifier u n
peu ton code je ne le comprends pas entièrement et n'ai aucune
connaissance en VBA :(. Je vais voir avec l'hébergeur si cette
"fonction" de remplacer par une image proche peut être désactivée ...


Merci encore pour ton aide, j'ai fait désactiver la fonction de
"remplacement par une adresse proche" mais l'erreur 404 n'est pas
reconnue par ton code je te redonne le lien :

http://www.kalidil.com/images_produit/3XXV66.jpg


Cordialement,

Nicolas


j
Le #5387621
bon alors, allons-y (avec IE !)


Function est404(page)
est404 = False
Set ie = CreateObject("InternetExplorer.Application") 'créer une instance
(cachée) d'internet explorer
ie.Navigate (page) 'ouvril la page dans IE
Do While ie.ReadyState <> 4 'attendre que ça soit cuit
Loop
txt = ie.document.body.innertext 'récupérer le texte de la page
ie.Quit 'fermer IE pour éviter de laisser des saletés
If InStr(txt, "Error 404") > 0 Then est404 = True 'regarder si le texte de
la page contient "eerror 404"
End Function


pour détecter si la page visée est une page error 404 ou pas :
MsgBox est404("http://www.kalidil.com/images_produit/3XXV66.jpg") répond
vrai
MsgBox est404("http://www.kalidil.com/images_produit/3XXV60.jpg") répond
faux


c'est ça ?

http://jacxl.free.fr










"Nicolas C."
ce truc est bizarre, effectivement, kalidil a l'air de chercher si une
image
proche existe
tu peux peut-etre essayer par API de lire le code de la page
correspondant
directement à http://www.kalidil.com/images_produit/3XXV66.jpg, page qui
n'ets peut-etre pas une image mais une page de redirection
ou plus simple, en pilotant IE par vba, tu peux ouvrir l'image (en mode
caché), vérifier son adresse, puis la refermer (c'est assez bestial,
mais ça
devrait marcher)



"Nicolas C."
Bonjour,

J'ai découvert ce forum il y a peu grâce au site jacxl.free.fr j'espère
pouvoir y échanger beaucoup d'informations avec vous tous.

Voila mon problème :

Je cherche à vérifier des liens via excel, j'ai repris le code présent
sur jacxl.free.fr et l'ai modifié à ma sauce ;) Cela fonctionne...
presque !

Les adresses que je veux vérifier ne provoquent pas d'erreurs "grave" si
elle n'existent pas, IE et Firefox remplacent automatiquement le nom de
fichier par un autre approchant sans afficher de page d'erreur !

Exemple :
"http://www.kalidil.com/images_produit/3XXV66.jpg" (cette image n'est
pas présente sur le serveur)

sera remplacée automatiquement par

"http://www.kalidil.com/images_produit/3XXV60.jpg" (image bien présente
sur le serveur)

sans laisser aucun message d'erreur .

Je pense que c'est cela qui empêche le code VBA de vérification de
signaler le problème.

Voila le code de ma 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 InternetOpenUrl 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
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal zaza
As Long) As Integer

Sub Test_page_Web_2()
For Counter = 2 To 500
Set URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
internet_ouvert = OuvreInternet("Test_validité", 1, vbNullString,
vbNullString, 0) 'ouvre Internet
numURL = InternetOpenUrl(internet_ouvert, URL_à_tester, vbNullString, _
ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
If numURL > 0 Then Worksheets("données").Cells(Counter, 9).FormulaR1C1 >> "OK" _
Else Worksheets("données").Cells(Counter, 9).FormulaR1C1 >> URL_à_tester
InternetCloseHandle numURL 'ferme la page
InternetCloseHandle internet_ouvert 'ferme Internet
Next Counter
End Sub

Je me demandais donc si il était possible de vérifier quel code HTML
renvoyai la page testée et si on pouvais faire une vérification à partir
de cela (voir : http://www.the-eggman.com/seminars/html_error_codes.htm)

Quelqu'un a une idée ?

Merci de m'avoir lu.

Cordialement,

Nicolas




Merci pour ta réponse malheureusement "piloter IE depuis VBA" ne
m'est pas possible je n'ai pas le niveau, si j'ai réussi a modifier un
peu ton code je ne le comprends pas entièrement et n'ai aucune
connaissance en VBA :(. Je vais voir avec l'hébergeur si cette
"fonction" de remplacer par une image proche peut être désactivée...


Merci encore pour ton aide, j'ai fait désactiver la fonction de
"remplacement par une adresse proche" mais l'erreur 404 n'est pas
reconnue par ton code je te redonne le lien :

http://www.kalidil.com/images_produit/3XXV66.jpg


Cordialement,

Nicolas


Nicolas C.
Le #5387491
bon alors, allons-y (avec IE !)


Function est404(page)
est404 = False
Set ie = CreateObject("InternetExplorer.Application") 'créer une in stance
(cachée) d'internet explorer
ie.Navigate (page) 'ouvril la page dans IE
Do While ie.ReadyState <> 4 'attendre que ça soit cuit
Loop
txt = ie.document.body.innertext 'récupérer le texte de la page
ie.Quit 'fermer IE pour éviter de laisser des saletés
If InStr(txt, "Error 404") > 0 Then est404 = True 'regarder si le te xte de
la page contient "eerror 404"
End Function


pour détecter si la page visée est une page error 404 ou pas :
MsgBox est404("http://www.kalidil.com/images_produit/3XXV66.jpg") ré pond
vrai
MsgBox est404("http://www.kalidil.com/images_produit/3XXV60.jpg") ré pond
faux


c'est ça ?

http://jacxl.free.fr










"Nicolas C."
ce truc est bizarre, effectivement, kalidil a l'air de chercher si un e
image
proche existe
tu peux peut-etre essayer par API de lire le code de la page
correspondant
directement à http://www.kalidil.com/images_produit/3XXV66.jpg, pag e qui
n'ets peut-etre pas une image mais une page de redirection
ou plus simple, en pilotant IE par vba, tu peux ouvrir l'image (en mo de
caché), vérifier son adresse, puis la refermer (c'est assez besti al,
mais ça
devrait marcher)



"Nicolas C."
Bonjour,

J'ai découvert ce forum il y a peu grâce au site jacxl.free.fr j' espère
pouvoir y échanger beaucoup d'informations avec vous tous.

Voila mon problème :

Je cherche à vérifier des liens via excel, j'ai repris le code pr ésent
sur jacxl.free.fr et l'ai modifié à ma sauce ;) Cela fonctionne.. .
presque !

Les adresses que je veux vérifier ne provoquent pas d'erreurs "grav e" si
elle n'existent pas, IE et Firefox remplacent automatiquement le nom de
fichier par un autre approchant sans afficher de page d'erreur !

Exemple :
"http://www.kalidil.com/images_produit/3XXV66.jpg" (cette image n'est
pas présente sur le serveur)

sera remplacée automatiquement par

"http://www.kalidil.com/images_produit/3XXV60.jpg" (image bien prés ente
sur le serveur)

sans laisser aucun message d'erreur .

Je pense que c'est cela qui empêche le code VBA de vérification d e
signaler le problème.

Voila le code de ma 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) A s
Long
Private Declare Function InternetOpenUrl 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
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal zaz a
As Long) As Integer

Sub Test_page_Web_2()
For Counter = 2 To 500
Set URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
internet_ouvert = OuvreInternet("Test_validité", 1, vbNullString,
vbNullString, 0) 'ouvre Internet
numURL = InternetOpenUrl(internet_ouvert, URL_à_tester, vbNullStr ing, _
ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
If numURL > 0 Then Worksheets("données").Cells(Counter, 9).FormulaR 1C1 =
"OK" _
Else Worksheets("données").Cells(Counter, 9).FormulaR1C1 =
URL_à_tester
InternetCloseHandle numURL 'ferme la page
InternetCloseHandle internet_ouvert 'ferme Internet
Next Counter
End Sub

Je me demandais donc si il était possible de vérifier quel code H TML
renvoyai la page testée et si on pouvais faire une vérification à partir
de cela (voir : http://www.the-eggman.com/seminars/html_error_codes.h tm)

Quelqu'un a une idée ?

Merci de m'avoir lu.

Cordialement,

Nicolas


Merci pour ta réponse malheureusement "piloter IE depuis VBA" ne

m'est pas possible je n'ai pas le niveau, si j'ai réussi a modifier un
peu ton code je ne le comprends pas entièrement et n'ai aucune
connaissance en VBA :(. Je vais voir avec l'hébergeur si cette
"fonction" de remplacer par une image proche peut être désactivé e...


Merci encore pour ton aide, j'ai fait désactiver la fonction de
"remplacement par une adresse proche" mais l'erreur 404 n'est pas
reconnue par ton code je te redonne le lien :

http://www.kalidil.com/images_produit/3XXV66.jpg


Cordialement,

Nicolas




Super !


Après quelques dizaines de minutes pour comprendre à peu près comme nt ca
marche et l'intégrer à ton premier bout de code modifié. Le résul tat est
bon, un peu lent et provoque une erreur lorsqu'il n'y a plus rien à
tester, mais ça fonctionne et cela va me simplifier la vie un maximum.

Merci vraiment !

Cordialement,

Nicolas

je met le code final pour ceux que cela intéresse

Function est404(URL_à_tester)
est404 = False
Set ie = CreateObject("InternetExplorer.Application") 'créer une
instance(cachée) d'internet explorer
ie.Navigate (URL_à_tester) 'ouvril la page dans IE
Do While ie.ReadyState <> 4 'attendre que ça soit cuit
Loop
txt = ie.document.body.innertext 'récupérer le texte de la page
ie.Quit 'fermer IE pour éviter de laisser des saletés
If InStr(txt, "Error 404") > 0 Then est404 = True 'regarder si le text e
de la page contient "eerror 404"
End Function
Sub Test_page_Web_2()
For Counter = 2 To 500
Set URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
If est404(URL_à_tester) = False Then
Worksheets("données").Cells(Counter, 9).FormulaR1C1 = "OK" _
Else Worksheets("données").Cells(Counter, 9).FormulaR1C1 = URL_à _tester
Next Counter

End Sub



j
Le #5387331
tu dois pouvoir gagner du temps en testant l'erreur 404 par API plutot qu'en
pilotant IE, j'ai utilisé IE parce que je voulais tester en ode
"redirection" (mais tu l'as squeezé depuis)

mais tu peux aussi accélérer le truc en évitant d'ouvrir-fermer ie à chaque
test. Je t'avais mis une fonction juste pour la démo
j'ai aussi retiré le "Set" dans "Set URL_à_tester", pas nécessaire
d'utiliser l'objet cellule, il suffit de son contenu.
et ajouté un test de "il y a quelque chose à tester"
ça pourrait devenir quelque chose comme (pas testé) :

Sub Test_page_Web_2()
Set ie = CreateObject("InternetExplorer.Application")
For Counter = 2 To 500
URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
if URL_à_tester<>"" then
ie.Navigate (URL_à_tester)
Do While ie.ReadyState <> 4
Loop
Worksheets("données").Cells(Counter, 9) = "OK"
If InStr(ie.document.body.innertext, "Error 404") > 0 Then
Worksheets("données").Cells(Counter, 9) = URL_à_tester
end if
Next Counter
ie.Quit
End Sub


http://jacxl.free.fr



"Nicolas C." #D#cU#
bon alors, allons-y (avec IE !)


Function est404(page)
est404 = False
Set ie = CreateObject("InternetExplorer.Application") 'créer une instance
(cachée) d'internet explorer
ie.Navigate (page) 'ouvril la page dans IE
Do While ie.ReadyState <> 4 'attendre que ça soit cuit
Loop
txt = ie.document.body.innertext 'récupérer le texte de la page
ie.Quit 'fermer IE pour éviter de laisser des saletés
If InStr(txt, "Error 404") > 0 Then est404 = True 'regarder si le texte
de

la page contient "eerror 404"
End Function


pour détecter si la page visée est une page error 404 ou pas :
MsgBox est404("http://www.kalidil.com/images_produit/3XXV66.jpg") répond
vrai
MsgBox est404("http://www.kalidil.com/images_produit/3XXV60.jpg") répond
faux


c'est ça ?

http://jacxl.free.fr










"Nicolas C."
ce truc est bizarre, effectivement, kalidil a l'air de chercher si une
image
proche existe
tu peux peut-etre essayer par API de lire le code de la page
correspondant
directement à http://www.kalidil.com/images_produit/3XXV66.jpg, page qui
n'ets peut-etre pas une image mais une page de redirection
ou plus simple, en pilotant IE par vba, tu peux ouvrir l'image (en mode
caché), vérifier son adresse, puis la refermer (c'est assez bestial,
mais ça
devrait marcher)



"Nicolas C."
Bonjour,

J'ai découvert ce forum il y a peu grâce au site jacxl.free.fr j'espère
pouvoir y échanger beaucoup d'informations avec vous tous.

Voila mon problème :

Je cherche à vérifier des liens via excel, j'ai repris le code présent
sur jacxl.free.fr et l'ai modifié à ma sauce ;) Cela fonctionne...
presque !

Les adresses que je veux vérifier ne provoquent pas d'erreurs "grave" si
elle n'existent pas, IE et Firefox remplacent automatiquement le nom de
fichier par un autre approchant sans afficher de page d'erreur !

Exemple :
"http://www.kalidil.com/images_produit/3XXV66.jpg" (cette image n'est
pas présente sur le serveur)

sera remplacée automatiquement par

"http://www.kalidil.com/images_produit/3XXV60.jpg" (image bien présente
sur le serveur)

sans laisser aucun message d'erreur .

Je pense que c'est cela qui empêche le code VBA de vérification de
signaler le problème.

Voila le code de ma 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 InternetOpenUrl 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
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal zaza
As Long) As Integer

Sub Test_page_Web_2()
For Counter = 2 To 500
Set URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
internet_ouvert = OuvreInternet("Test_validité", 1, vbNullString,
vbNullString, 0) 'ouvre Internet
numURL = InternetOpenUrl(internet_ouvert, URL_à_tester, vbNullString, _
ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
If numURL > 0 Then Worksheets("données").Cells(Counter, 9).FormulaR1C1 >>> "OK" _
Else Worksheets("données").Cells(Counter, 9).FormulaR1C1 >>> URL_à_tester
InternetCloseHandle numURL 'ferme la page
InternetCloseHandle internet_ouvert 'ferme Internet
Next Counter
End Sub

Je me demandais donc si il était possible de vérifier quel code HTML
renvoyai la page testée et si on pouvais faire une vérification à partir
de cela (voir : http://www.the-eggman.com/seminars/html_error_codes.htm)

Quelqu'un a une idée ?

Merci de m'avoir lu.

Cordialement,

Nicolas


Merci pour ta réponse malheureusement "piloter IE depuis VBA" ne

m'est pas possible je n'ai pas le niveau, si j'ai réussi a modifier un
peu ton code je ne le comprends pas entièrement et n'ai aucune
connaissance en VBA :(. Je vais voir avec l'hébergeur si cette
"fonction" de remplacer par une image proche peut être désactivée...


Merci encore pour ton aide, j'ai fait désactiver la fonction de
"remplacement par une adresse proche" mais l'erreur 404 n'est pas
reconnue par ton code je te redonne le lien :

http://www.kalidil.com/images_produit/3XXV66.jpg


Cordialement,

Nicolas




Super !


Après quelques dizaines de minutes pour comprendre à peu près comment ca
marche et l'intégrer à ton premier bout de code modifié. Le résultat est
bon, un peu lent et provoque une erreur lorsqu'il n'y a plus rien à
tester, mais ça fonctionne et cela va me simplifier la vie un maximum.

Merci vraiment !

Cordialement,

Nicolas

je met le code final pour ceux que cela intéresse

Function est404(URL_à_tester)
est404 = False
Set ie = CreateObject("InternetExplorer.Application") 'créer une
instance(cachée) d'internet explorer
ie.Navigate (URL_à_tester) 'ouvril la page dans IE
Do While ie.ReadyState <> 4 'attendre que ça soit cuit
Loop
txt = ie.document.body.innertext 'récupérer le texte de la page
ie.Quit 'fermer IE pour éviter de laisser des saletés
If InStr(txt, "Error 404") > 0 Then est404 = True 'regarder si le texte
de la page contient "eerror 404"
End Function
Sub Test_page_Web_2()
For Counter = 2 To 500
Set URL_à_tester = Worksheets("listing TL").Cells(Counter, 12)
If est404(URL_à_tester) = False Then
Worksheets("données").Cells(Counter, 9).FormulaR1C1 = "OK" _
Else Worksheets("données").Cells(Counter, 9).FormulaR1C1 = URL_à_tester
Next Counter

End Sub



Publicité
Poster une réponse
Anonyme