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 :

Aller récupérer des infos sur internet explorer depuis une feuille excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 35
    Points
    35
    Par défaut Aller récupérer des infos sur internet explorer depuis une feuille excel
    Bonjour,

    je en sais pas trop où trouver la solution à mon problème. peut -être pourrez-vous m'éclairer.

    j'ai une liste sous excel de termes en colonne.
    j'aimerai savoir s'il est possible d'automatiser cette tâche à partir d'excel (j'ai un gros doute):
    aller sur Internet explorer (qui est ouvert). rentrer le terme de la cellule dans un moteur de recherche (au hasard google); récupérer le nombre d'occurences et placer ce nombre sur la cellule de la colonne suivant le terme.

    l'occurence est a priori désignée par la variable swrnum visible avec affichage code source par exemple.

    pas de problème évidemment pour me déplacer dans les cellules excel, la problématique évidemment c'est la possibilité de travailler sur IE.

    peut être faut il passer par un script style php mais je n'y connais rien dans ce domaine et je n'ai pas encore posé la question sur le forum php car si c'est possible par excel...

    notez que le nombre de terme sera limité et je me moque de la performance du "script" niveau temps d'exécution.

    si quelqu'un peut me guider: merci à lui (elle).

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tape "Internet" en recherche sur le forum, tu as un grand nombre de réponses et il me semble bien en avoir vu passer une récemment sur le sujet

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    merci ouskel'nor car effectivement j'ai pu trouver des choses intéressantes.
    Maintenant j'arrive sans problème à aller sur IE à l'adresse désirée et recopier une table d'une page internet dans mon classeur excel (c'est déjà un grand pas!).

    Maintenant le problème c'est que les données à récupérer sur ma page web ne sont pas dans des tables.

    un exemple tout simple: sur cette url, je souhaiterai récupérer le nombre d'articles soit 218.

    http://fr.news.search.yahoo.com/sear...ion=&fl=0&n=15

    et je vois pas comment faire.

    sur le code source de la page, l'info est donnée dans ce contexte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    </div></div><div id=yschpri><div id=yschhdr><div class=hd><h2>Résultats d'actualités pour <span>ramadan</span></h2>
    <em>(Résultats 1 - 15 sur 218)</em>
    ...
    une idée?

    PS: j'utilise l'excellente macro prise sur le forum:

    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
    Sub Importer_tableauPageWeb()
    'Activez les références
        'Microsoft HTML Objects Library
        'et
        'Microsoft Internet Controls
     
    Dim IE As InternetExplorer
    Dim maPageHtml As HTMLDocument
    Dim Htable As IHTMLElementCollection
    Dim maTable As IHTMLTable
    Dim j As Integer, i As Integer
     
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = False
     
    IE.navigate "http://le site qui va bien"
    Do Until IE.readyState = READYSTATE_COMPLETE
    DoEvents
    Loop
     
    Set maPageHtml = IE.document
    'objet type table
    Set Htable = maPageHtml.getElementsByTagName("table")
     
    'x ème tableau dans la page Web
    Set maTable = Htable(x-1)
     
    Application.ScreenUpdating = False
    'boucle sur toutes les lignes du tableau
    For i = 1 To maTable.Rows.Length
        'boucle sur les cellules dans chaque ligne
        For j = 1 To maTable.Rows(i - 1).Cells.Length
        Cells(i, j) = maTable.Rows(i - 1).Cells(j - 1).innerText
        Next j
    Next i
     
    Columns("A:D").AutoFit
    Application.ScreenUpdating = True
     
    MsgBox "Opération terminée."
    IE.Quit
    Set IE = Nothing
     
    End Sub
    qui fonctionne pour les tables. j'ai essayé en remplaçant table par <em> comme tag (on sait jamais) mais ça marche pas.=> incompatibilté de type.

  4. #4
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Un exemple qui recherche les articles dans la page "Actualités" de Yahoo
    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
    Sub recherche_sur_page_web()
    Dim AdresURL As String, SHtemp As Worksheet, c As Range, Result As String, Achercher As String
    Dim MotCle As String, MoisDeb As String, JourDeb As String, MoisFin As String, JourFin As String
    Application.ScreenUpdating = False
     
    MotCle = "ramadan" '<-- si plusieurs mots clés il faut les séparer par le signe + (sans espace)
    MoisDeb = "8" '<-- mois du début de la recherche
    JourDeb = "31" '<-- jour du début de la recherche
    MoisFin = "9" '<-- mois de fin de recherche
    JourFin = "1" '<-- jour de fin de recherche
    Achercher = "(Résultats *)" '<-- chaîne de caractères à chercher
     
    'adresse URL complète
    AdresURL = "http://fr.news.search.yahoo.com/search/news?ei=UTF-8&.bcrumb=721db856818e6b51f345501a3c86130b%2C1220284130&fr=yfp-t-501&va=" & MotCle & "&va_vt=any&vp=&vp_vt=any&vo=&vo_vt=any&ve=&ve_vt=any&datesort=&timeago=&pub=1&smonth=" & MoisDeb & "&sday=" & JourDeb & "&emonth=" & MoisFin & "&eday=" & JourFin & "&source=&location=&fl=0&n=15"
    'création d'une feuille temporaire pour accueillir la requête
    Set SHtemp = Sheets.Add(after:=Sheets(Sheets.Count))
     
    'exécution de la requête
    With SHtemp.QueryTables.Add(Connection:="URL;" & AdresURL, Destination:=Range("A1"))
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .Refresh BackgroundQuery:=False
    End With
     
    'recherche du résultat
    Set c = SHtemp.Cells.Find(Achercher)
        If Not c Is Nothing Then
            Result = c.Text
        Else
            MsgBox "La recherche n'a donné aucun résultat"
        End If
     
    'suppression de la feuille temporaire
    Application.DisplayAlerts = False
    SHtemp.Delete
    Application.DisplayAlerts = True
     
    'affichage du résultat
    If Result <> "" Then
        Result = Split(Result, "sur ")(1)
        Result = Left(Result, Len(Result) - 1)
    End If
    MsgBox Result & " articles trouvés"
     
    'libération de la mémoire
    Set SHtemp = Nothing
    Set c = Nothing
     
    Application.ScreenUpdating = True
    End Sub
    à adapter selon l'endroit où se trouve le(s) mot(s) clé(s), la fourchette des dates et le résultat final souhaité.
    .
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    merci beaucoup c'est pile poil ce qu'il me fallait et ça marche.


    j'ai juste un problème de résultat non concordant avec une recherche manuelle dans le cadre des mots composés.

    Sur yahoo pour rechercher marilyn monroe, je demande "marilyn monroe". (je veux la chaîne de caractère exacte marilyn monroe.

    Avec la macro je ne sais pas comment lui insérer les " car il n'accepte pas d'avoir deux "" de suite ni même avec un espace. y'a t il un code à entrer pour lui faire taper " ? (code ascii peut être? )

    merci encore pour cette ultime précision; relativement vitale car les concordance du résultat obtenu entre la recherche manuelle doit être parfaite.
    (j'ai essayé marilyn+monroe et (marilyn monroe) mais ça ne concorde pas mieux. )

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Pour rechercher plusieurs mots cela ne change pas à ce que j'ai précisé dans le premier code, les mots doivent être séparés par le signe + et sans espace.
    Exemple : mot1+mot2+mot3

    Concernant le résultat de la recherche ça se complique un peu, tu n'obtiens pas le même résultat parce qu'il faut spécifier le type de la recherche dans l'adresse URL.

    L'adresse URL contient différentes variables spécifiant ce type. Il y a 12 types de recherche possible mais nous allons uniquement tenir compte des 6 principaux.
    • &va=MOT&va_vt=any --> tous les mots n'importe où dans les articles (si pas utilisé &va=&va)
    • &va=MOT&va_vt=title --> tous les mots dans le titre des articles (si pas utilisé &va=&va)
    • &vp=MOT&vp_vt=any --> phrase exacte n'importe où dans les articles
    • &vp=MOT&vp_vt=title --> phrase exacte dans le titre des articles
    • &vo=MOT&vo_vt=any --> au moins un des mots n'importe où dans les articles
    • &vo=MOT&vo_vt=title --> au moins un des mots dans le titre des articles

    Observe le code, tu verras comment ces variables sont utilisées.

    J'en ai profité pour un peu retravailler le code afin de faire les saisies dans des Inputbox sans devoir aller dans le 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
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    Sub recherche_sur_page_web()
    Dim AdresURL As String, SHtemp As Worksheet, c As Range, Result As String, Achercher As String
    Dim MotCle As String, MoisDeb As String, JourDeb As String, MoisFin As String, JourFin As String
    Dim TypRech As String, ParamRech As String, vartemp As String
    Application.ScreenUpdating = False
     
    MotCle = InputBox("Spécifiez le ou les mots à chercher" & Chr(10) _
                    & "Si plusieurs mots, séparez les par le signe +" & Chr(10) _
                    & "Exemple : mot1+mot2+mot3")
     
    vartemp = InputBox("Spécifiez les dates de début et de fin de la recherche" & Chr(10) & Chr(10) _
                    & "Les dates doivent être au format jour/mois" & Chr(10) _
                    & "Les 2 dates sont séparées par un point-virgule ;" & Chr(10) _
                    & "Exemple : 1/9;4/9")
     
    JourDeb = Split(Split(vartemp, ";")(0), "/")(0) '<-- jour du début de la recherche
    MoisDeb = Split(Split(vartemp, ";")(0), "/")(1) '<-- mois du début de la recherche
    JourFin = Split(Split(vartemp, ";")(1), "/")(0) '<-- jour de fin de recherche
    MoisFin = Split(Split(vartemp, ";")(1), "/")(1) '<-- mois de fin de recherche
    Achercher = "(Résultats *)" '<-- chaîne de caractères à chercher
     
    reco:
    'paramètre de la recherche
    ParamRech = UCase(InputBox("Spécifiez le type de la recherche" & Chr(10) _
                    & "TMA = tous les mots n'importe où dans l'article" & Chr(10) _
                    & "TMT = tous les mots dans le titre de l'article" & Chr(10) _
                    & "PEA = phrase exacte n'importe où dans l'article" & Chr(10) _
                    & "PET = phrase exacte dans le titre de l'article" & Chr(10) _
                    & "1MA = au moins un des mots n'importe où dans l'article" & Chr(10) _
                    & "1MT = au moins un des mots dans le titre de l'article"))
     
    Select Case ParamRech
        Case "TMA"
            TypRech = "&va=" & MotCle & "&va_vt=any&vp=&vp_vt=any&vo=&vo_vt=any&ve=&ve_vt=any"
        Case "TMT"
            TypRech = "&va=" & MotCle & "&va_vt=title&vp=&vp_vt=any&vo=&vo_vt=any&ve=&ve_vt=any"
        Case "PEA"
            TypRech = "&va=&va_vt=any&vp=" & MotCle & "&vp_vt=any&vo=&vo_vt=any&ve=&ve_vt=any"
        Case "PET"
            TypRech = "&va=&va_vt=any&vp=" & MotCle & "&vp_vt=title&vo=&vo_vt=any&ve=&ve_vt=any"
        Case "1MA"
            TypRech = "&va=&va_vt=any&vp=&vp_vt=any&vo=" & MotCle & "&vo_vt=any&ve=&ve_vt=any"
        Case "1MT"
            TypRech = "&va=&va_vt=any&vp=&vp_vt=any&vo=" & MotCle & "&vo_vt=title&ve=&ve_vt=any"
    Case Else
            MsgBox "Type de la recherche non valide" & Chr(10) _
                & "Veuillez spécifier un des types suivants : TMA, TMT, PEA, PET, 1MA, 1MT", vbExclamation
            GoTo reco
    End Select
     
     
    'adresse URL complète
    AdresURL = "http://fr.news.search.yahoo.com/search/news?ei=UTF-8&.bcrumb=26eec6e9531c603084aa9963a226d75b%2C1220525810&fr=" & TypRech & "&datesort=&timeago=&pub=1&smonth=" & MoisDeb & "&sday=" & JourDeb & "&emonth=" & MoisFin & "&eday=" & JourFin & "&source=&location=&fl=0&n=15"
    'création d'une feuille temporaire pour accueillir la requête
    Set SHtemp = Sheets.Add(after:=Sheets(Sheets.Count))
     
    'exécution de la requête
    With SHtemp.QueryTables.Add(Connection:="URL;" & AdresURL, Destination:=Range("A1"))
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .Refresh BackgroundQuery:=False
    End With
     
    'recherche du résultat
    Set c = SHtemp.Cells.Find(Achercher)
        If Not c Is Nothing Then
            Result = c.Text
        Else
            MsgBox "La recherche n'a donné aucun résultat"
        End If
     
    'suppression de la feuille temporaire
    Application.DisplayAlerts = False
    SHtemp.Delete
    Application.DisplayAlerts = True
     
    'affichage du résultat
    If Result <> "" Then
        Result = Split(Result, "sur ")(1)
        Result = Left(Result, Len(Result) - 1)
        MsgBox Result & " articles trouvés"
    End If
     
     
    'libération de la mémoire
    Set SHtemp = Nothing
    Set c = Nothing
     
    Application.ScreenUpdating = True
    End Sub
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    excelentissime! c'est une recherche PEA qu'il me faut. j'ai "adapté" pour la lecture des termes dans une colonne excel (donc plus d'input ni de msgbox)
    il faut compter 1min 30 pour 50 termes ce qui me va parfaitement.
    je fignole tout ça lundi.
    merci encore.

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

Discussions similaires

  1. Récupérer des infos sur une page externe
    Par Horrigan dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/07/2006, 14h46
  2. Tester et récupérer des infos sur fichier distant
    Par cybertj dans le forum Langage
    Réponses: 2
    Dernier message: 17/05/2006, 09h18
  3. Récupérer des infos sur mes sites
    Par meufeu dans le forum Langage
    Réponses: 3
    Dernier message: 27/04/2006, 10h25
  4. [servlet] Récupérer des infos sur le client
    Par kenito dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/09/2005, 18h08
  5. Récupérer des infos sur un AVI
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2003, 14h25

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