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 :

Recuperation d'un bout de texte, Webrowser VBA [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Par défaut Recuperation d'un bout de texte, Webrowser VBA
    Bonjour a tous,

    Je cherche à récupérer un simple bout de texte sur une page internet accessible seulement depuis les postes de mon entreprise. Sur le papier c'est une page comme une autre mais je ne pourrais évidemment pas vous la partager parce que le lien ne marchera tout simplement pas.

    J'ai une liste de client sur Excel et je cherche à automatiser la récupération de leur code activité (ou code NAF), aujourd'hui j'ai créé une solution qui ouvre un Webrowser sur Excel qui rentre le lien, qui fait un Ctrl A + Ctrl C sur la page en question puis un Ctrl V sur Excel, puis j'arrive a récupérer l'info que je veux, seulement pour traiter 250clients (à cause du chargement/affichage de la page) cela prend entre 6 et 10min, soit une éternité.

    J'essaye donc depuis se matin de ne plus passer par l'affichage mais de récupérer le code de la page et de réussir a récupérer l'information en question. (Ce qui me permettrait de ne plus avoir à récupérer la page, et serait donc un sacré gain de temps.)

    J'ai eu beau suivre http://qwazerty.developpez.com/tutor...a-excel/#LIV-F ce tutoriel très complet, et assez connu sur la question, mais étant une bille en HTML je n'arrive tout simplement à rien. Ou plutôt à rien de pertinent.

    Le chemin d'accès complet de ma variable est visible sur l'image jointe :

    Nom : Capture.PNG
Affichages : 455
Taille : 47,3 Ko

    Quelqu'un aurait-il une suggestion?

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Je vous conseille de regarder de quelle façon s'utilise l'objet WinHttp.WinHttpRequest.
    Il devrait vous permettre d'émettre une requête de type GET qui vous permettra de recevoir le document attendu directement en mémoire.
    Il est pour cela nécessaire de gérer correctement l'en-tête de la requête que vous construirez (via la méthode .SetRequestHeader) afin qu'elle soit acceptée par le serveur de votre entreprise.

    La méthode .Send permet ensuite d'envoyer la requête et d'attendre la réponse.
    Une fois celle-ci obtenue, elle est accessible via les méthodes .ResponseText ou .ResponseBody.

    Il vous reste alors à gérer les éventuels problèmes d'encodage et à post-traiter l'information reçue.

    Cordialement,

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Par défaut
    Bonjour !

    Merci beaucoup pour votre réponse ! Je vais me renseigner sur l'ensemble des fonctions que vous évoquez, mais à la rigueur pourriez-vous me faire un petit fichier sur un exemple simple? Afin que je puisse me familiariser avec la méthode et adapter le code à mon problème? Parce que je vous avoue que j'ai peur de me perdre dans la suite d'étapes que vous me proposez sans un (tout) petit exemple concret !

    Dans tout les cas je vous remercie encore,
    Cordialement,

  4. #4
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    J'ai essayé de modifier mon code original pour récupérer une page html simple mais j'avoue m'être un peu perdu en route...
    Je vous propose donc mon code original, qui récupère une image sur internet et la stocke dans un fichier en local.
    Il vous restera à adapter pour que cela fonctionne avec un document texte.
    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
    Public Sub Get_HTML()
        Dim whrReq As WinHttp.WinHttpRequest, strUrl As String, FileNum As Long, FileData() As Byte
        Set whrReq = New WinHttp.WinHttpRequest
        strUrl = "https://wxs.ign.fr/otq5u930qae01r7zs7n6fj3y/geoportail/wmts/?service=WMTS&version=1.0.0&request=GetTile&layer=GEOGRAPHICALGRIDSYSTEMS.MAPS&style=normal&tilematrixset=PM&tilematrix=15&tilerow=11323&tilecol=16303&format=image/jpeg"
        With whrReq
            .Open "GET", strUrl, False
            .SetRequestHeader "Host", "wxs.ign.fr"
            .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
            .SetRequestHeader "Accept", "*/*"
            .SetRequestHeader "Accept-Language", "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3"
            .SetRequestHeader "Referer", "https://ignrando.fr/cirkwi-server/xi/sgfc//?idproduit=2723ET&idserie=k25"
            .SetRequestHeader "Connection", "keep-alive"
            .Send
            If .Status = 200 Then
                FileData = .ResponseBody
                FileNum = FreeFile
                Open "C:\Temp\newpicture.jpg" For Binary Access Write As #FileNum
                Put #FileNum, 1, FileData
                Close #FileNum
            End If
        End With
        Set whrReq = Nothing
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Par défaut
    Merci beaucoup ! Je m'y attaque tout de suite !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    J'ai essayé de modifier mon code original pour récupérer une page html simple mais j'avoue m'être un peu perdu en route...
    Je vous propose donc mon code original, qui récupère une image sur internet et la stocke dans un fichier en local.
    Il vous restera à adapter pour que cela fonctionne avec un document texte.
    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
    Public Sub Get_HTML()
        Dim whrReq As WinHttp.WinHttpRequest, strUrl As String, FileNum As Long, FileData() As Byte
        Set whrReq = New WinHttp.WinHttpRequest
        strUrl = "https://wxs.ign.fr/otq5u930qae01r7zs7n6fj3y/geoportail/wmts/?service=WMTS&version=1.0.0&request=GetTile&layer=GEOGRAPHICALGRIDSYSTEMS.MAPS&style=normal&tilematrixset=PM&tilematrix=15&tilerow=11323&tilecol=16303&format=image/jpeg"
        With whrReq
            .Open "GET", strUrl, False
            .SetRequestHeader "Host", "wxs.ign.fr"
            .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
            .SetRequestHeader "Accept", "*/*"
            .SetRequestHeader "Accept-Language", "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3"
            .SetRequestHeader "Referer", "https://ignrando.fr/cirkwi-server/xi/sgfc//?idproduit=2723ET&idserie=k25"
            .SetRequestHeader "Connection", "keep-alive"
            .Send
            If .Status = 200 Then
                FileData = .ResponseBody
                FileNum = FreeFile
                Open "C:\Temp\newpicture.jpg" For Binary Access Write As #FileNum
                Put #FileNum, 1, FileData
                Close #FileNum
            End If
        End With
        Set whrReq = Nothing
    End Sub
    Alors, j'ai eu beau essayer d'utiliser ton code et de le comprendre, je suis un peu perdu, je ne comprends pas bien la fonction .SetRequestHeader, d'un autre coté je n'arrive pas à utiliser le .responseBody, et sur ton exemple il renvoi un tableau de chiffre, que j'ai eu beau regarder, impossible de voir sont utilités,

    Bref, tout est encore très flou

  7. #7
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Ce qui est contenu dans .ResponseBody est de la donnée binaire.
    Il est nécessaire de savoir comment la traiter pour lui donner du sens, et cela dépend du type de donnée téléchargée.

    Dans l'exemple que j'ai transmis, il s'agit d'une image jpeg. L'écriture en direct de cette donnée binaire dans un fichier fonctionne très bien pour récupérer cette image et y accéder par la suite.
    Dans ton cas, il va probablement s'agir d'une page html, c'est-à-dire d'un fichier texte (d'où l'idée de regarder dans .ResponseText, on ne sait jamais).

    Pour ce qui est de l'expression de la requête, le plus simple est d'utiliser les outils de développement de ton navigateur.
    Dans l'onglet Réseau, il est possible de voir toute les requêtes envoyées par le navigateur, ainsi que les réponses qu'il a obtenues.
    Va sur la page qui t'intéresse, ouvre les outils de développement, va sur l'onglet Réseau et actualise la page.
    La première requête qui va apparaître est celle qui demande le fichier principal de la page en question.

    Voici ce que ça donne lorsqu'on vient sur developpez.net :
    Nom : reseau.png
Affichages : 465
Taille : 64,9 Ko
    En (1), on voit la liste des requêtes envoyées par le navigateur,
    En (2), on peut voir l'URL d'une requête donnée,
    et en (3) le header de cette requête.

    Tous les éléments sont donc disponible pour écrire la requête en VBA.
    Reste à savoir quoi faire de ce qu'on récupère. Pour la page d'accueil de ce forum, le doc principal est un script js. Mais j'ai visiblement un problème d'encodage... qui n'apparaîtra pas nécessairement pour la page que tu souhaites récupérer.

    Je te laisse donc faire quelques essais et obtenir une réponse du serveur.
    A partir de là, il faudra comprendre comment donner du sens à cette réponse.

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

Discussions similaires

  1. Centrer bout de texte dans div sans centrage
    Par Trunks dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 17/01/2006, 13h40
  2. Comment recuperer la liste des input text d'un formulaire.
    Par luimême dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/01/2006, 14h34
  3. moyen simple de stocker des bouts de textes ...
    Par blackhorus dans le forum MFC
    Réponses: 3
    Dernier message: 18/10/2005, 17h58
  4. pb de recuperation valeur dans un champ texte
    Par kikou33 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/06/2005, 11h43
  5. Réponses: 10
    Dernier message: 10/05/2005, 11h35

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