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 :

Import web via QueryTables.Add [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 11
    Par défaut Import web via QueryTables.Add
    Bonjour,
    Je souhaite réaliser un aspirateur pour récupérer des données. Mon code est quasiment fini et m'appréte à effectuer des tests avanr l'exécution finale. J'ai écrit mon code à partir de copier/coller des pages web qui m'intéressent. Tout fonctionne. Sauf que quand je traite en boucle les ennuis commencent.

    Le téléchargement à partir de l'automatisme excel ne me permet pas de récupérer certaines données (les plus importantes évidemment) que j'obtenais à partir du copier/coller de la page web : les cotes des bookmakers.

    Je souhaite utiliser ce mode d'importation, l'importation par pilotage via VBA d'internet exploreur étant trop aléatoire dans la gestion soit d'un timer, soit de la proprité .busy

    Merci pour vos réponses et votre support

    Ci après le code utilisé :

    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
    Sub Téléchargement()
    adr="http://www.betexplorer.com/soccer/world/friendly-international/matchdetails.php?matchid=lMG1hnVh"
     
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;" & Adr, _
            Destination:=Range("$A$1"))
            .Name = "results"
            .FieldNames = False
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = False
            .RefreshOnFileOpen = False
            .BackgroundQuery = False
            .RefreshStyle = xlOverwriteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlEntirePage
            .WebFormatting = xlWebFormattingAll
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = True
            .WebDisableDateRecognition = True
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
            .Delete    
        End With
    End Sub

  2. #2
    Membre habitué
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 11
    Par défaut Relance
    Bonsoir,
    Je me permets de relancer car ne je ne sais quoi faire.
    Je tiens à préciser qu'avant de faire mon post, j'ai effectué des recherches et n'ai rien trouvé sur le sujet hormis des solutions de contournement (pilotage en VBA d'internet explorer avec temporisation).

    J'ai aussi essayé de faire un copier coller du texte du document source HTML dans excel et le résultat est le même.

    cela me fait penser qu'il doit s'agir d'une problématique de codage lié à la page...

    Merci de m'éclairer, impossibilité d'excel de retranscrire dans une feuille? mauvais paramètre dans l'appel?
    Existe t'il un moyen, via les Query, de récuperer la page complète sans l'afficher dans une feuille et de traiter les données en mémoire.

    Merci de m'éclairer

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 121
    Par défaut
    Salut

    As tu jeté un coup d'oeil sur ce tutoriel? Il traite justement de la récupération de donnée via un pilotage d'IE et le site avec lequel tu veux travailler ne semble pas poser de problème majeure.
    Quel sont tes besoins exactes?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre habitué
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 11
    Par défaut
    Bonjour Qwaz et merci pour ton retour, je retrouve le sourire

    Oui j'ai lu ton tuto et meme plusieurs fois, avant et après mes dév...
    Puis me suis arraché la téte jusqu'à 4h du mat , résigné, de devoir passer par là car au delà de mes limites. Mais j'ai fini par découvrir des choses hyper intéressantes, mais j'ai surtout constaté que j'ai encore pas mal de chose à découvrir et que même si je me débrouille en VBA le chemin est long

    Bref, après avoir téléchargé le classeur exemple, j'y ai bidouillé et à force de tatonner pour afficher le texte recherché j'ai fini par le trouver mais avec plein de choses étranges dont du texte visible dans la cellule et pas dans la barre de fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Do
        .cells(i+1) = IEdoc.body.all(i).innerText
        i = i + 1
    Loop Until IEdoc.body.all(i) Is Nothing
    La méthode qui m'est la plus abordable est le Query web, les données arrivent dans une feuille excel, et là je me débrouille, zéro difficulté.
    Le truc c'est que le Query web, tel qu'utilisé dans mon code cité, ne récupère pas les données de cotes des bookmakers.

    Exemple de page problématique
    http://www.betexplorer.com/soccer/ar...tchid=GMTanF7m

    Extrait du Résultat de ma procédure :

    Bla bla bla ............
    Bookmakers: 41 1 X 2
    10Bet (www)
    12BET (www)
    188BET (www)
    5Dimes (www)
    888sport (www)
    Bestbet (www)


    Bref, ma difficulté, dans ton approche réside dans l'identification exacte de l'élément à récupérer (là je suis largué, je viens du cobol), ma peur : le temps avant de reprendre le boulot.

    Merci encore pour ton support

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 121
    Par défaut
    Salut

    Rien de particulier par rapport aux exemples inclus dans le tutoriel.

    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
    Sub Betexplorer()
    'Génére une erreur d'exécution dut au retour de deux élément
    'suite à la recherche faite avec All
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim Generic As HTMLGenericElement
    Dim LigneTableau As HTMLTableRow
    Dim xLigne As Long
    Dim ChildHtml As HTMLGenericElement
     
        'Ouvre la page WEB
        IE.navigate "http://www.betexplorer.com/soccer/argentina/copa-argentina/matchdetails.php?matchid=GMTanF7m"
        IE.Visible = True
        WaitIE IE
        Set IEDoc = IE.document
     
        'On pointe l'éléments le plus proche des données à récupérer ayant un id
        'trouvé avec l'outil inclu dans IE ou Chrome ou FireFox.
        Set Generic = IEDoc.all("sortable-1")
     
        'Son 1er Children correspond à l'entête du tableau (<thead>)
        'le 2ème correspond au tableau de données(<tbody>), c'est lui qu'il faut suivre
        Set Generic = Generic.Children(1)
     
        'On passe ensuite les fils de ce tableau de donnée (<tr class=" odd">), qui représentent les lignes du tableau
        For Each LigneTableau In Generic.Children
            'Set LigneTableau = Generic.Children(0)
     
            'Les données recherchées se trouvent dans la fratrie des enfants de LigneTableau
            'On cherche la première ligne vide  du tableau
            'Feuil1 est le code name de la feuille (pas le nom de l'onglet)
            xLigne = Feuil1.Cells(Feuil1.Rows.Count, "A").End(xlUp).Row + 1
            'On note le nom du titre
            'Pour trouver cette valeur dans les propriétés de l'élément, il suffit de placer un espion sur LigneTableau.Children(0) et tu trouves le nom du produit inscrit dans innerTexte par exemple
            Feuil1.Cells(xLigne, "A").Value = LigneTableau.Children(0).innerText
            'La valeur 1
            Feuil1.Cells(xLigne, "B").Value = LigneTableau.Children(1).innerText
            'La valeur X
            Feuil1.Cells(xLigne, "C").Value = LigneTableau.Children(2).innerText
            'La valeur 2
            Feuil1.Cells(xLigne, "D").Value = LigneTableau.Children(3).innerText
        Next
     
        Set IE = Nothing
        Set IEDoc = Nothing
    End Sub
    Bon weekend

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre habitué
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 11
    Par défaut Remerciements
    Je tiens ici à remercier publiquement Qwaz pour ses qualités et son savoir faire.

    Cordialement

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

Discussions similaires

  1. [XL-2013] Comment optimiser les données web avec QueryTables.Add ? (freeze+lenteur)
    Par Dan.exe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/02/2014, 14h12
  2. [XL-2000] Importer page web via "Données Externes"
    Par rapheb dans le forum Excel
    Réponses: 0
    Dernier message: 06/05/2011, 09h50
  3. Importer données avec la commande With ActiveSheet.QueryTables.Add
    Par hbc87 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/05/2010, 05h14
  4. [ 10g] import/export via datapump
    Par silverfab95 dans le forum Oracle
    Réponses: 7
    Dernier message: 06/02/2006, 12h19
  5. Réponses: 2
    Dernier message: 08/11/2003, 23h42

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