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 :

Faire une recherche sur une page web d'élément texte sans passer par le code source


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut Faire une recherche sur une page web d'élément texte sans passer par le code source
    Bonjour à tous,

    nouveau challenge aujourd'hui après celui de ses derniers jours :
    Faire une recherche dans la page web (sur IE, toujours le n°8), un peu comme un "ctrl + F" pour récupérer les informations qui sont après le mot cherché.

    Je m'explique : j'ai une page internet, avec un code source tellement horrible qu'on se pique les yeux soit même pour prévenir l'effet du regard qu'on peut lui porter (pardon). Il n'y a dans le code source de cette page aucun identificateur ou nom de classe ou autre manière de trouver un élément.
    L'élément que je cherche est dans une balise td avec pour pauvres attirbuts :
    Nom : CodeSource.png
Affichages : 3499
Taille : 20,6 Ko

    Pour ma part, j'ai besoin de récupérer le nombre "2" qui se trouve entre les crochets devant liaisons. Sur la Page c'est écrit ainsi : "[2] liaison(s)" je ne sais donc pas à quoi sert le " " devant le mot liaisons. Ce que je sais c'est qu'on le trouve un peu partout.

    Ma question, est-il possible de faire une recherche un peu comme un ctrl+F sur la page chargée dans VBA pour récupérer ce nombre ? (Sachant que je ferais ma recherche puis bouclerais pour trouver la bonne valeur qui se trouve devant)

    Mille merci par avance de vos idées et/ou vos conseils.


    Philippe

  2. #2
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    soit chercher dans le code complet de la page un repère texte avec la fonction InStr par exemple
    pour ensuite à partir de cette position trouver celle de la valeur à extraire de la même manière ou avec la fonction InStrRev
    suivant le sens et extraire enfin la valeur avec la fonction Mid (tout ceci étant le B-A-BA des fonctions textes VBA …);

    soit cibler l'objet "TABLE" par GetElementsByTagName sachant qu'une table HTML est composée de lignes dans
    une collection rows, chaque ligne étant composée d'une collection cells contenant les données au format texte (innerText),
    comme une cellule d'une feuille Excel pointée par des numéros de ligne et de colonne …
    A retenir : le premier élément d'une collection a pour indice le zéro.
    Voir l'excellent tutoriel Interaction avec Internet Explorer via VBA Excel comme les exemples
    dans les discussions de ce forum et dans une contribution à mon nom …

    _________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _________________________________________________________________________________________________
    Il n'y a pas que les aigles qui atteignent les sommets, les escargots aussi mais ils en bavent !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    " " les page HTML ne reconnaissent les espace! vola donc le caractère espace façon code HTML.

    en revanche moi sans le html, mais pas seulement la partie qui te concerne (Javascript,<Body></body>,<From></From> par exemple) autant dire tout!.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour oulala !!

    bon je suppose que c'est la suite de ton dernier post
    alors a la place de mon getclassname sur le "thread"de l'exemple que je t'ai donné dans ton autre post

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    set tablTD=IE.document.getelementsbytagname("td") 
     
    for i=0 to tablTD.length
     
    if instr(tablTD(i)).innertext,"[")>0 then 
    msgbox replace ( split(tablTD(i).innertext,"]")(0) & "]","&nbsp;","")
    end if 
    next
    après il y a des solutions beaucoup plus propres et peut être un peut plus complexes mais tout autant efficace



    une idée comme ca juste pour le fun

    pourquoi ne pas récupérer la table en entier la transférer dans un sheet les espaces redeviendront des espaces

    et ensuite travailler sur la table dans le sheets

    dans le cas ou cette solution t'intéresserait

    tu ferais un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    set matable = ie.document.getelementsbytagname("table")
    'tu peut en avoir plusieurs mais on va travailler sur la première pour l'exemple
    'on va memoriser dans le presspapier de IE le code html de la table 
     with IE.document
    faire = .ParentWindow.clipboardData.SetData("text", .getelementsbytagname("table")(0).outerhtml)
     
     With Sheets(1)  'adapte le nom de ton sheet ici et l'addresse de la première cellule gauche de ton tableau (exemple cells(1,1))
            .Cells(1, 1).Select
            .Paste
        End With
    faire = .ParentWindow.clipboardData.ClearData("text")
     End with
    ouais t'a raison c'est dingue
    il est Fou!! ce toulonnais

    faut il que je te fasse un exemple complet ?????
    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

  5. #5
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut




    Salut Patrick !

    Si le besoin n'est de lire qu'un seul élément de la table, autant le récupérer directement sans transfert complet de la table …




    _________________________________________________________________________________________________
    La connaissance, c'est comme la confiture, moins on en a plus on l'étale !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    salut Marc

    je ne faisais que énumérer les possibilités
    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

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    "&nbsp;" les page HTML ne reconnaissent les espace! vola donc le caractère espace façon code HTML.

    en revanche moi sans le html, mais pas seulement la partie qui te concerne (Javascript,<Body></body>,<From></From> par exemple) autant dire tout!.
    J'ai compris pour le &nbsp, mais pas le reste du message !

    PatrickToulon, merci beaucoup pour toutes ces idées, je vais expérimenter ça ce matin, ça m'a l'air super.


    Philippe

  8. #8
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    En posant la question autrement, est-ce qu'il est possible avec du VBA de piloter IE, comme on peut piloter outlook ou excel par exemple et ainsi utiliser la fonction rechercher sur une page ? (fonction "ctrl + f")

    Merci d'avance de vos réponses,


    Philippe

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    Comme précisé dans l'autre post, sur la page en question, je n'arrive pas à récupérer les éléments par la fonction GetElementsByTagName dans ma page, sinon, je l'aurais déjà fait.

    Est-ce que vous auriez connaissance des éléments qui empêcheraient de faire fonctionner cette fonction ?

  10. #10
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut




    Déjà répondu dans l'autre discussion, du reste il n'y en avait pas besoin de deux ! …

    Et l'autre méthode alors ?! …

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    Si je récupère le code source je peux faire une recherche dedans, il me faut récupérer le code source, ok. Mais comment faire ?

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For i = 0 To ShellWindows.Count - 1
        If InStr(ShellWindows.Item(i).FullName, "iexplore.exe") <> 0 Then
            Set IEObject = ShellWindows.Item(i)
        End If
    Next
     
    Set IEDoc = IEObject.document
    texte = IEDoc.body.innerHTML
    msgbox texte
    voici ce que m'affiche la msgbox :
    Nom : Capture.PNG
Affichages : 3601
Taille : 37,7 Ko

    Mon code source est bien plus "gros" si je puis dire...
    Une idée de la raison ?
    Comment avoir tout le code source ?

  12. #12
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut




    Quelle que soit la méthode, si l'objet pointé n'est pas le bon …

    Donc commencer par simplement piloter Internet Explorer pour voir déjà si tu t'en sors car,
    dans la négative, tu n'y arriveras pas plus en interceptant une instance ! …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    L'objet est le bon puisque le titre affiché correspond bien à celui de la page où je me trouve.

    Est-ce que ça ne pourrait pas être dû au fait que la page utilise un autre langage (javascript ou autre, je n'en sais rien) qui rendrait une partie de la source "invisible" ?

    Je fais un essai malgré tout en pilotant IE.

    [EDIT] C'est confirmé : même en pilotant IE directement j'arrive au même résultat[/EDIT]

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Réponses: 1
    Dernier message: 24/07/2009, 15h40
  3. Recuperer les valeur d'une listbox sur un page web
    Par will97 dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 02/03/2009, 04h39
  4. Afficher une donnée sur la page web avec une fonction javascript
    Par Djaiffe dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/01/2008, 00h05
  5. Charger une image sur la page web
    Par gregbart dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/03/2006, 18h18

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