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 :

Téléchargement d'un fichier dont l'URL est dynamique [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Urbaniste
    Inscrit en
    Octobre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2014
    Messages : 40
    Par défaut Téléchargement d'un fichier dont l'URL est dynamique
    Bonjour,

    Je reviens une seconde fois pour un problème dans la même lignée que la première.

    Je cherche à télécharger des fichiers issus de requêtes.
    Je m'explique. J'ai un fichier Excel qui contient des coordonnées GPS (X et Y) d'un point d'origine et des coordonnées GPS (x et y) d'un point d'arrivée.
    Je reconstitue une adresse URL afin d'en faire un lien URL directement utilisable sur google maps.
    Mes liens fonctionnent et me donnent bien mon itinéraire entre chaque point d'origine et de destination.
    J'envoie ce lien sur un site qui le transforme en trace (itinéraire) avec l'extension .gpx
    l'objectif étant par la suite de visualiser ces itinéraires dans un logiciel SIG.

    Donc tout va bien jusqu'à la fin où une boite de dialogue me demande soit d'ouvrir, d'enregistrer ou d'annuler.
    Je n'ai pas réussi à trouver la solution malgré les kilos de solutions lues ici et ailleurs.

    Je vous mets le code que j'ai bâti (doucement voire lentement mais sûrement )

    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
    62
    63
    64
    65
    66
    67
    68
    Sub PremierIE()
    'Déclaration des variables
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim InputGpsVisualizerOrigineZoneTexte As HTMLInputElement
    Dim htmlSelectElem As HTMLSelectElement
    Dim InputGpsVisualizerBouton As HTMLInputElement
    Dim InputConvertFormatBouton As HTMLInputElement
    Dim Link As HTMLInputElement
    Dim TheCell As Range
    Dim Doc As HTMLDocument
     
    With Feuil1
       'On boucle sur les cellules de la colonne T
       For Each TheCell In .Range("T1", .Cells(.Rows.Count, "T").End(xlUp))
     
       'Chargement d'une page web GPSVisualizer
    IE.navigate "http://www.gpsvisualizer.com/convert_input"
       'Affichage de la fenêtre IE
       IE.Visible = True
       'On attend le chargement complet de la page
       WaitIE IE
       'On pointe le membre Document
       Set IEDoc = IE.document
       'On pointe le format de sortie
       Set InputConvertFormatBouton = IEDoc.all("convert_format:gpx")
       InputConvertFormatBouton.setAttribute "checked", True
     
       'On définit le texte que l'on souhaite placer à l'intérieur de la zone de départ
       Set InputGpsVisualizerOrigineZoneTexte = IEDoc.all("remote_data")
       'InputGpsVisualizerOrigineZoneTexte.Value = "https://www.google.fr/maps/dir/43.6650834,5.43989410000006/43.4593692,5.3712595/@43.5326261,5.3588303,10.5z"
       InputGpsVisualizerOrigineZoneTexte.Value = TheCell.Value
     
       'On pointe notre bouton
        Set InputGpsVisualizerBouton = IEDoc.all("submitted")
     
        'On simule un clic
        InputGpsVisualizerBouton.click
        'On attend la fin de la recherche
        WaitIE IE
     
    Set Doc = IE.document
        'Doc.Links(0) = 1er lien contenu dans la page html
        Set Cible = Doc.Links(19)
     
        Cible.click
     
    'après je souhaite faire "enregistrer sous", nommer le fichier avec la donnée contenue dans la colonne A de la même ligne, le tout avec l'extension de base .gpx
    'Après, je ferme la fenêtre et je recommece avec les infos de la ligne suivante.
     
    'A noter que la solution : parentWindow.execScript "download(1)", "javascript" ne fonctionne pas ou je ne sais pas la faire fonctionné
    'j'ai également essayé les "hwnd"...
     
     
       'On libère la variable IE
       Set IE = Nothing
       Set IEDoc = Nothing
     
                Next
        End With
     
    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
    Mon objectif est de faire "enregistrer sous" et de nommer le fichier avec la donnée contenue dans la colonne A de la même ligne de mon tableur, le tout avec l'extension de base .gpx
    Après, je fermerai la fenêtre et je recommencerai avec les infos de la ligne suivante.

    Je sais qu'il y a sûrement moyen de faire tout en mode cacher, mais ça me "rassure" de voir que mon code agit sur ma page web.... et oui !

    Espérant avoir été assez intelligible.

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi,

    Juste pas curiosité, tu construit l’itinéraire googlemaps à partir du même principe en requête avec objet IE ?
    Comment tu procède ?

    J'ai trouvé un sujet la dessus sur un forum anglais ça à l'air complexe avec passage par API... Mais faisable
    L'idée étant de trouver la fenêtre de dialogue de téléchargement et d'aller cliquer sur le bouton voulut

  3. #3
    Membre averti
    Homme Profil pro
    Urbaniste
    Inscrit en
    Octobre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2014
    Messages : 40
    Par défaut
    Bonjour

    Je procède en plusieurs étape
    Je récupère les coordonnées gps de chaque origine et de chaque destination via un site web
    Je met les x les y de chaque OD dans une cellule et après je les concatène =A1&A2&A3.... Afin de recréer l'URL.

    Pour le site web, il faut que je le recherche car l'ancien que j'utilisais à fermé.

    Je continue de chercher mais sans succès...

    J'ai même tenté le
    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
        AppActivate "Microsoft Internet Explorer"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{TAB}"
            SendKeys "{DOWN}"
        SendKeys "{ENTER}"
    Avec et sans ", true" après...

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Heu....
    Tu as été voir le lien que je t'ai donné dans mon post précédent ??

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Salut _yuck_ !

    Que de souvenirs lors de la première fois …

    Même si l'hiver est passé, dans un premier temps je t'envoie vers cette contributiion, bonne lecture !

    Sinon je verrais lundi où tu en es …

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  6. #6
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Aussi ceci
    Deux fonctions qui fonctionnent
    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
    Sub FetchFile(sURL As String, sPath)
     Dim oXHTTP As Object
     Dim oStream As Object
     
        Set oXHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        Set oStream = CreateObject("ADODB.Stream")
        oXHTTP.Open "GET", sURL, False
        oXHTTP.send
        With oStream
            .Type = 1 'adTypeBinary
            .Open
            .Write oXHTTP.responseBody
            .SaveToFile sPath, 2
            .Close
        End With
        Set oXHTTP = Nothing
        Set oStream = Nothing
    End Sub
    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
    Function SaveWebFile(ByVal vWebFile As String, ByVal vLocalFile As String) As Boolean
        Dim oXMLHTTP As Object, i As Long, vFF As Long, oResp() As Byte
     
        Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        oXMLHTTP.Open "GET", vWebFile, False
        oXMLHTTP.send
     
        Do While oXMLHTTP.readyState <> 4
            DoEvents
        Loop
     
        oResp = oXMLHTTP.responseBody
     
        vFF = FreeFile
        If Dir(vLocalFile) <> "" Then Kill vLocalFile
        Open vLocalFile For Binary As #vFF
        Put #vFF, , oResp
        Close #vFF
     
        Set oXMLHTTP = Nothing
    End Function
    Attention pour ca MSXML2.XMLHTTP ne fonctionne pas il faut impérativement utiliser MSXML2.ServerXMLHTTP

  7. #7
    Membre averti
    Homme Profil pro
    Urbaniste
    Inscrit en
    Octobre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2014
    Messages : 40
    Par défaut
    @Marc-L

    Et oui, sacré moment de craquage de cerveau pour ma part

    Je pensais avoir trouvé "une" solution également sur un topic ici

    Mais vu que fais du VBA une fois dans l'année... on va dire que je ne suis pas à l'apogée du savoir...
    Bref, je galère sévèrement. Je nique déjà bien mon week-end avec ça

    @cerede2000 > merci, il faut je regarde cela. A noter que je ne sais trop où les placer dans mon code... car "d'habitude", je n'utilise pas fonction...

    J'avais trouvé ça...
    ThisWorkbook.FollowHyperlink (Doc.links(19)), , True '
    Qui a fonctionné bizarrement un moment car le téléchargement s'effectuait sous Chrome (mon navigateur par défaut), mais là, ça ne fonctionne plus...

    Après, j'avais trouvé également ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    avec à un moment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hWnd = FindWindow(vbNullString, "Enregistrer sous")
    sur ce topic

    A noter que j'ai dû ajouter "Dim Cible As HTMLInputElement"
    et que si ça fonctionne "à moitié" en appuyant patiemment sur F8 pour voir chaque action,

    Malheureusement, mes capacités étant ce qu'elles sont je n'ai pas réussi à m'en dépatouiller.
    ça a l'air tellement "bête" de simuler 18 tabulations, une flèche vers le haut, une vers le bas et d'écrire le nom inscrit dans la cellule de la même ligne que mon itinéraire...
    le truc c'est que j'en ai 1000 à faire et que je ne veux pas le faire à la mano sachant que derrière, j'ai encore du traitement à effectuer...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 25/09/2011, 19h59
  2. Réponses: 3
    Dernier message: 29/06/2010, 10h24
  3. Réponses: 7
    Dernier message: 12/04/2008, 14h24
  4. Réponses: 4
    Dernier message: 18/08/2006, 07h57
  5. [quel langage] sauvegarder fichier dont l'url est connu
    Par azerty_essai dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 28/03/2005, 12h14

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