IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA & IE - Enregistrement image PNG


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Par défaut VBA & IE - Enregistrement image PNG
    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

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    Bonjour

    fait une recherche sur le forum et les contrib avec indice de recherche l'identifiant "MarcL" tu trouvera comment on remplace les symboles"%" et autre dans une url pour la rendre valide dans une requête ca viens de la a mon avis

    essai déjà ca avant de passer l'url a savefile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url=replace(replace(url,"%3A","/"),"%2F","/")
    mais je ne garanti rien
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Par défaut
    Le fait de remplacer les caractères spéciaux en hexa par leur équivalent en clair ne change rien.

    La fonction "SaveHtmlFile" reste inopérante, tout du moins WinHttpReq.Status = 404

    Cela pourrait-il être un problème de proxy ?

    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
     
    Remote Address:109.237.243.102:80
    Request URL: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
    Request Method:GET
    Status Code:200 OK
    Request Headersview source
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Encoding:gzip, deflate, sdch
    Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
    Cache-Control:max-age=0
    Connection:keep-alive
    Cookie:PHPSESSID=b363575943e0922584ccb4d89450f888; _pk_ref.14.2c42=%5B%22%22%2C%22%22%2C1425468138%2C%22http%3A%2F%2Fwww.developpez.net%2Fforums%2Fd1501227%2Flogiciels%2Fmicrosoft-office%2Fexcel%2Fmacros-vba-excel%2Fvba-ie-pb-enregistrement-image-png%2F%22%5D; _pk_id.14.2c42=32fac98bf1d4abd6.1424600124.16.1425468243.1425371609.; _pk_ses.14.2c42=*
    Host:inventaire-forestier.ign.fr
    User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
    Query String Parametersview sourceview URL encoded
    LAYERS:v58tf
    TRANSPARENT:true
    VISIBILITY:true
    FORMAT:image/PNG
    SERVICE:WMS
    VERSION:1.1.1
    REQUEST:GetMap
    STYLES:
    EXCEPTIONS:application/vnd.ogc.se_inimage
    SRS:EPSG:27572
    BBOX:640480,2281227,642480,2283227
    WIDTH:1000
    HEIGHT:1000
    Response Headersview source
    Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Connection:Keep-Alive
    Content-Type:image/png
    Date:Wed, 04 Mar 2015 11:46:59 GMT
    Expires:Thu, 19 Nov 1981 08:52:00 GMT
    Keep-Alive:timeout=5, max=100
    Pragma:no-cache
    Server:Apache/2.2.22 (FreeBSD) mod_auth_kerb/5.4 DAV/2 PHP/5.3.13 with Suhosin-Patch
    Transfer-Encoding:chunked
    X-Powered-By:PHP/5.3.13

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    ho puré oui il y a de forte chance que le header soit requis pour la requette
    il va te falloir l'intégrer a ta fonction savehtmlfile
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 27
    Par défaut
    C'est à ce moment que je déconnecte !

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut e
    sais tu te servir de l'inspecteur de document F12 sur internet explorer ??????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Enregistrer une image PNG en 300 DPI
    Par Foub dans le forum 2D
    Réponses: 5
    Dernier message: 02/07/2008, 09h59
  2. Enregistrement image png
    Par merdassiahmad dans le forum Entrée/Sortie
    Réponses: 20
    Dernier message: 13/05/2008, 16h42
  3. enregistrement image png
    Par merdassiahmad dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 12/05/2008, 11h40
  4. Réponses: 5
    Dernier message: 21/01/2007, 20h31
  5. [Image]setCursor() et les images *.png
    Par feed_our_vision dans le forum Graphisme
    Réponses: 4
    Dernier message: 13/09/2004, 02h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo