Bonjour,

J'utilise depuis quelques temps l'excellent tuto http://qwazerty.developpez.com/tutor...-et-vba-excel/ fait par http://www.developpez.net/forums/u723/qwazerty/.
Néanmoins, je me heurte à un problème bien spécifique.

Je cherche à automatiser l'enregistrement d'images PNG.
Ces images PNG décrivent le couvert forestier d'un département et je cherche, dans un cadre privé, à avoir la possibilité de reconstituer avec précision la couverture globale d'un département.

Ainsi donc à l'adresse http://inventaire-forestier.ign.fr/c...ficherCarto/58 un visuel est disponible.
En utilisant l'inspection d'éléments sous Chrome ou autres, j'ai pu remarquer rapidement que la requête

Code : Sélectionner tout - Visualiser dans une fenêtre à part
http://inventaire-forestier.ign.fr/cartov2/proxy/getTile?LAYERS=v58tf&TRANSPARENT=true&VISIBILITY=true&FORMAT=image%2FPNG&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A27572&BBOX=666938.372965495,2193033.3729654946,711035.57137523,2237130.57137523&WIDTH=1000&HEIGHT=1000
permettait d'atteindre une image spécifique.

En jouant avec les bornes X/Y de la zone, en coordonnées Lambert 2 étendu, ainsi qu'avec les valeurs de BBOX, il était possible de cibler une zone bien défini et d'obtenir une image précise du couvert forestier sur celle-ci.

La requête n'est utilisable que si la fenêtre de visualisation à l'adresse http://inventaire-forestier.ign.fr/c...ficherCarto/58 est ouverte.
Je pressens l'utilisation de cookies.

Initialement, je pensais m'en sortir rapidement en utilisant la méthode décrite au point IV-J. Télécharger un fichier du tuto.

L'analyse de la page web affichée suite à la requête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
http://inventaire-forestier.ign.fr/cartov2/proxy/getTile?LAYERS=v58tf&TRANSPARENT=true&VISIBILITY=true&FORMAT=image%2FPNG&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A27572&BBOX=666938.372965495,2193033.3729654946,711035.57137523,2237130.57137523&WIDTH=1000&HEIGHT=1000
donne:
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<html>
<head>
<meta name="viewport" content="width=device-width, minimum-scale=0.1"><title>getTile (1000×1000)</title>
</head>
<body style="margin: 0px;">
<img style="-webkit-user-select: none; cursor: zoom-in;" src="http://inventaire-forestier.ign.fr/cartov2/proxy/getTile?LAYERS=v58tf&amp;TRANSPARENT=true&amp;VISIBILITY=true&amp;FORMAT=image%2FPNG&amp;SERVICE=WMS&amp;VERSION=1.1.1&amp;REQUEST=GetMap&amp;STYLES=&amp;EXCEPTIONS=application%2Fvnd.ogc.se_inimage&amp;SRS=EPSG%3A27572&amp;BBOX=666938.372965495,2193033.3729654946,711035.57137523,2237130.57137523&amp;WIDTH=1000&amp;HEIGHT=1000" width="939" height="939">
</body>
</html>

Or, aucune image n'est décrite dans le src. L'adaptation de la macro décrite dans le tuto permet bien de charger l'adresse et afficher l'image dans une fenêtre IE mais ImgElem reste désespérément vide et WinHttpReq.Status renvoie un code 404 "Not found".

Ci joint la bidouille de code qui demande de charger, avant d’exécuter la macro, dans une fenêtre IE le visualisateur à l'adresse http://inventaire-forestier.ign.fr/c...ficherCarto/58:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Sub ImageSite()
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim TableObj As HTMLGenericElement
 
Dim htmlTagCol As IHTMLElementCollection
Dim ImgElem As HTMLImg
Const CheminRep As String = "E:\#GIS\Shapefiles\Inventaire forestier IGN\Extraction IFN V2\Essai automatisation excel\essai\"
 
   'Ouvre la page Web
   IE.navigate "http://inventaire-forestier.ign.fr/cartov2/proxy/getTile?LAYERS=v58tf&TRANSPARENT=true&VISIBILITY=true&FORMAT=image%2FPNG&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A27572&BBOX=640480,2281227,642480,2283227&WIDTH=1000&HEIGHT=1000"
   IE.Visible = True
   WaitIE IE
   Set IEDoc = IE.document
 
   'On recherche l'élément contenant le logo
   Set htmlTagCol = IEDoc.getElementsByTagName("img")
   For Each TableObj In htmlTagCol
        Set ImgElem = TableObj
   Next
 
   'On crée le répertoire où sera placée l'image
   'Si celui-ci existe déjà on ne gère pas l'erreur retournée et on passe à la suite
   On Error Resume Next
   MkDir CheminRep
   On Error GoTo 0 'On réactive la gestion d'erreur
 
   'On passe le chemin de l'image et le répertoire où elle sera copiée
   SaveHtmlFile ImgElem.href, CheminRep & "essai.png"
 
End Sub
 
Sub SaveHtmlFile(aUrl As String, aDestination As String)
'Pris sur le forum de la msdn (avec quelques menues modifs)
'http://social.msdn.microsoft.com/Forums/en/isvvba/thread/bd0ee306-7bb5-4ce4-8341-edd9475f84ad
Dim WinHttpReq As Object, oStream As Object
Dim TheURL As String
 
   On Error Resume Next 'On ne gère pas les erreurs
 
   Set WinHttpReq = New WinHttp.WinHttpRequest 'CreateObject("Microsoft.XMLHTTP")
   WinHttpReq.Open "GET", aUrl, False
   WinHttpReq.send
 
   TheURL = WinHttpReq.responseBody
 
   If WinHttpReq.Status = 200 Then
      Set oStream = CreateObject("ADODB.Stream")
      oStream.Open
      oStream.Type = 1
      oStream.Write WinHttpReq.responseBody
      oStream.SaveToFile aDestination
      oStream.Close
   End If
End Sub
Sub WaitIE(IE As InternetExplorer)
   'On boucle tant que la page n'est pas totalement chargée
   Do Until IE.readyState = READYSTATE_COMPLETE
      DoEvents
   Loop
End Sub
Qu'en pensez-vous ? Auriez-vous une idée ou une piste permettant de résoudre ce problème ?

Merci,

Michel