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 :

Requete QueryTable "impossible de télécharger les données" [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut Requete QueryTable "impossible de télécharger les données"
    Bonjour à tous les membres du forum,

    Après plusieurs requêtes web réalisées avec succès, me voilà confronté à un problème que je n'ai jamais rencontré....

    Je souhaite me connecter à un site afin d'en récupérer des données (c le but d'une requête vous allez me dire )

    Mais voici le souci:

    Nom : 2015-05-19_14-12-57.jpg
Affichages : 1496
Taille : 28,7 Ko

    J'ai donc essayé avec "importer données web"
    et voici ce que j'obtiens

    Nom : 2015-05-19_14-16-57.jpg
Affichages : 1751
Taille : 81,1 Ko

    J'ai bien évidemment essayé avec d'autres liens mais sur ce site (ICI), excel ne veut rien savoir!!!!!!

    Mon code:
    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
    Option Explicit
     
    Sub RecupGenyCourses()
     
        With Sheets("Temp").QueryTables.Add(Connection:="URL;http://www.geny.com/partants-pmu/2015-05-19-longchamp-pmu-prix-des-gobelins_c714591", Destination:=Range("A1"))
            .Name = "GenyCourses"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = False
            .RefreshPeriod = 0
            .WebSelectionType = xlEntirePage
            '.WebSelectionType = xlSpecifiedTables 'ici tables spécifique sinon table entière xlentiretables
            '.WebTables = "20,21,22,23,24,25,26" ' les tables sont récup dans le html avec F11 dans navigateur
            .WebFormatting = xlWebFormattingNone
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=True
            '.Delete
        End With
    End Sub
    Merci d'avance pour vos lumières

    Seb A+

  2. #2
    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



    Bonjour,

    le message est clair, le site est protégé …

    Il faut changer de méthode en pilotant IE ou mieux en reproduisant la requête utilisée par un navigateur.



    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  3. #3
    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 pour ilustrer la reponse de MarcL
    Bonjour
    test ca dans un fichier vierge
    ca illustre la 2 Emme solution que marc t'a suggéré

    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
    Sub test()
        Columns("A:l").Clear
        Dim ReQ As Object, UrL As String
        UrL = "http://www.geny.com/partants-pmu/2015-05-19-longchamp-pmu-prix-des-gobelins_c714591"
        Set ReQ = CreateObject("microsoft.xmlhttp")
        ReQ.Open "POST", UrL, False
        ReQ.setRequestHeader "Accept", "text/html, application/xhtml+xml, */*"
        ReQ.setRequestHeader "Accept-Language", "fr-FR"
        ReQ.setRequestHeader "User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)"
        ReQ.setRequestHeader "Accept-Encoding", "gzip, deflate"
        ReQ.setRequestHeader "Host", "www.geny.com"
        ReQ.setRequestHeader "DNT", 1
        ReQ.setRequestHeader "Connection", "Keep - Alive"
        ReQ.setRequestHeader "Cookie", " JSESSIONID=3E554B80B1ABBC36A2C53EC91C219C77.raoul_1;"
        ReQ.send
        'MsgBox ReQ.responsetext
        Set fauxdoc = CreateObject("htmlfile")
        With fauxdoc
            .body.innerhtml = ReQ.responsetext
             Set grouptable = .getelementsbytagname("TABLE")
             For i = 0 To grouptable.Length - 1
               If grouptable(i).ParentNode.ID = "dt_partants" Then Set matable = grouptable(i)
            Next
     
            faire = .ParentWindow.clipboardData.SetData("text", matable.outerhtml)
            With Sheets(1)
                Set cel = .Cells(Rows.Count, 1).End(xlUp).Offset(2, 0)
                cel.Select
                .Paste:
            End With
            faire = .ParentWindow.clipboardData.ClearData("text")
        End With
    End Sub
    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

  4. #4
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Bonjour à tous,

    @Marc-L

    Merci de ton intervention, toujours aussi pertinent et éclairante pour tous.

    @Patrick:

    Merci de venir sur ce sujet, et je n'en doutai pas moins que tu rejoignes ce sujet, vu tes connaissances dans ce domaine. Et je t'avouerai que je ne souhaitai que cela .

    Ton code est une bombe

    Mais je t'avouerai que je suis dépassé par celui-ci, je créai des fichiers avec des requêtes, mais sous cette forme, franchement bravo

    Je ne connaissais pas cette méthode.

    Bon maintenant il faut que je l'insère dans ma procédure.

    As-tu un tuto pour l'explication?

    Merci et reviens vers vous

    Seb

  5. #5
    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 version avec netoyage des yperlink et explication
    re
    essaie cette version j'ai ajouté le nettoyage des yperlink dans le résultat dans les cellules
    1 le code en vert c'est la requête utilisant l'object Microsoftxmlhttp

    2 le code en bleu c'est le paramétrage de la requête sans ca j'ai le même message que toi avant et c'est comme ca que qu'un navigateur envoie la requête pour avoir la page d'où l'expression de Marc-L "reproduire la requête du navigateur", il arrive parfois que ca ne soit pas nécessaire mais de plus en plus de cites prennent ce genre de mesure de sécurité

    3 la partie en rouge c'est ce que j'ai ajouté pour nettoyé le code html de la table de tout "Href et autre balise comme ca plus de yperlink dans les cellules

    4 la partie violette c'est ma petite astuce (utilisation du presse-papier du document html virtuel(fauxdoc)avec le presse-papier d'une vrai page web dans IE on aurait des message d'alerte
    je place le code html de la table dans ce presse papier et je colle sur le sheets excel fait le reste


    après pour l'insérer dans ta procédure il faudrait que j'en sache un peu plus

    essaie celui la !
    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
    Sub test()
        Columns("A:l").Clear
        Dim ReQ As Object, UrL As String
        UrL = "http://www.geny.com/partants-pmu/2015-05-19-longchamp-pmu-prix-des-gobelins_c714591"
        Set ReQ = CreateObject("microsoft.xmlhttp")
        ReQ.Open "POST", UrL, False
        ReQ.setRequestHeader "Accept", "text/html, application/xhtml+xml, */*"
        ReQ.setRequestHeader "Accept-Language", "fr-FR"
        ReQ.setRequestHeader "User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)"
        ReQ.setRequestHeader "Accept-Encoding", "gzip, deflate"
        ReQ.setRequestHeader "Host", "www.geny.com"
        ReQ.setRequestHeader "DNT", 1
        ReQ.setRequestHeader "Connection", "Keep - Alive"
        ReQ.setRequestHeader "Cookie", " JSESSIONID=3E554B80B1ABBC36A2C53EC91C219C77.raoul_1;"
        ReQ.send
        'MsgBox ReQ.responsetext
        Set fauxdoc = CreateObject("htmlfile")
        With fauxdoc
            .body.innerhtml = ReQ.responsetext
             Set grouptable = .getelementsbytagname("TABLE")
             For i = 0 To grouptable.Length - 1
               If grouptable(i).ParentNode.ID = "dt_partants" Then Set matable = grouptable(i)
            Next
            For Each elem In matable.all
            If elem.tagname = "TD" Then elem.innerhtml = elem.innertext
            Next
            faire = .ParentWindow.clipboardData.SetData("text", matable.outerhtml)
            With Sheets(1)
                Set cel = .Cells(Rows.Count, 1).End(xlUp).Offset(2, 0)
                cel.Select
                .Paste:
            End With
            faire = .ParentWindow.clipboardData.ClearData("text")
     End With
    End Sub
    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

  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 re
    re
    j'ai oublié de préciser que le paramétrage de la requête est unique pour chaque cite il te faudra utiliser l'espion f12 de IE ou celui de Firefox pour le connaitre
    un détail aussi important !!!!!!
    dans cette ligne tu constate que je prend un cookie
    ReQ.setRequestHeader "Cookie", " JSESSIONID=3E554B80B1ABBC36A2C53EC91C219C77.raoul_1;"

    en fait dans la requête il y en a plusieurs mais si j'en accepte pas au moins un!!! j'ai le message forbeden:!!!!
    tout les cookies sont séparés par un point virgule c'est assez facile de récupérer le code pour un!!!
    voici une capture d'écran de l'espion f12 de IE tu reconnaitra les éléments du header de la requête qui sont en bleu dans mon code
    Nom : Capture.JPG
Affichages : 1880
Taille : 330,1 Ko
    Bonne BUCHE!!!!
    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

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/10/2006, 18h55
  2. Réponses: 6
    Dernier message: 06/06/2006, 12h46
  3. XMLHttpRequest : Impossible de récupérer les données
    Par laurent_ifips dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 22/11/2005, 14h28
  4. Réponses: 2
    Dernier message: 05/10/2005, 16h27
  5. [Interbase 5] impossible d'éditer les données
    Par inconu dans le forum InterBase
    Réponses: 4
    Dernier message: 18/08/2005, 14h10

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