Comment récupérer un texte sur une page Web sans ID et sans nom

Bonjour,
Pourriez vous m'aider à récupérer une information sur une page web en VBA ? page

Le numéro de série sur lequel je fait une recherche est : H5M9KW2

Pour le moment j'arrive à entrer sur la page web et simulé un clic à l'aide du code suivant :

Dim IE As InternetExplorer
    Set IE = CreateObject("InternetExplorer.Application")
    Dim IEDoc As HTMLDocument
    Dim numserie As Object

    IE.Visible = True
    IE.navigate "le lien"
    Call WaitIE(IE)
    Set IEDoc = IE.document
    Set numserie = IEDoc.getElementsByName("entry-main-input-home")
    numserie.Item.Value = Sheets(8).Cells(57, 3).Value

    'Traitement du bouton dans div
   Dim Generic As HTMLGenericElement
   Set Generic = IEDoc.all("btn-entry-select")
   Generic.Click

Mais maintenant je souhaite récupérer la date de fin de garantie ( j'ai essayé getelementbyclass,getelementbyID.... sans succès).

exemple du code sur lequel je souhaite extraire le innerTEXT :

capture

( Je débute VBA)

<br>

Bonjour,

La manipulation d'Internet Explorer est toujours délicate alors il faut prendre cet essai comme une aide à la compréhension du mécanisme :

Sub Navig()
Dim IE As InternetExplorer, t()
    Set IE = CreateObject("InternetExplorer.Application")
    Dim IEDoc As HTMLDocument
    Dim numserie As Object

    IE.Visible = True
    IE.navigate "le lien"
    Call WaitIE(IE)
    Set IEDoc = IE.document
    Set numserie = IEDoc.getElementsByName("entry-main-input-home")
    numserie.Item.Value = Sheets(8).Cells(57, 3).Value

    'Traitement du bouton dans div
   Dim Generic As HTMLGenericElement
   Set Generic = IEDoc.all("btn-entry-select")
   Generic.Click

   WaitIE IE
   set IEDoc = IE.document 'nouvelle page après clic
   set htmlcoll = iedoc.getelementsbyclassname("warrantyExpiringLabel mb-0 mr-3") 'affectation de la collection des éléments identifiés par la classe "warranty..."
   for each elem in htmlcoll 'pour chaque élément de la collection d'éléments obtenue
        if elem.innertext like "Date d'expiration*" then 'si innertext de l'élément contient "Date..."
            n = n + 1: redim preserve t(1 to n) 'incrémentation n et dimension tableau
            t(n) = elem.innertext 'l'item n du tableau recoit innertext
        end if
   next elem
   msgbox join(t, vblf)
end sub

D'ailleurs, je crois qu'il existe des solutions plus simples, pour ce que vous cherchez à faire, avec PowerQuery notamment mais je n'en suis pas certain.

Cdlt,

Bonjour 3GB,

d'abord merci pour le temps que tu m'a consacré ( grâce à ta proposition j'ai appris ce qu'est Redim Preserve ( un tableau de données)).

Malheureusement, il ne récupère toujours pas le texte demandé, d'après le mode débogage la procédure ne rentre pas dans le IF:

 If elem.innerText Like "Date d'expiration*" Then 'si innertext de l'élément contient "Date..."
            n = n + 1: ReDim Preserve t(1 To n) 'incrémentation n et dimension tableau
            t(n) = elem.innerText 'l'item n du tableau recoit innertext
        End If

Elle fait 3 fois IF et End if puis me retourne une messagebox vide.

Cela voudrais t'il dire que le innertext recherché n'ai pas du HTML ?

Je me renseigne sur PowerQuery, n'hésitez pas à me proposer toutes autres solutions et me faire parvenir vos lumières.

Merci.

Bonjour,

C'est résolu 3GB :).

Grand merci.

Je me suis acharné sur du innertext mais grâce à l'espion VBA, j'ai constaté que c'était un outerText.

Du coup j'ai juste remplacé Innertext par outertext dans le code et voila.

il ne me reste plus qu'a creuser pour trouver pourquoi tu as mis

Dim IE As InternetExplorer, t()

Je sais que T() c'est un tableau,

Mais pourquoi il est a coté de la variable IE et pourquoi il n'y a pas de As quelque chose derrière. Je vais faire mes recherches merci encore.

Salut Mistyk972,

Super, je suis content que ça marche !

En effet, le t() correspond à un tableau dynamique. C'est un type de variable qui peut contenir plusieurs éléments.

Pourquoi le tableau cependant ? Parce que je ne savais rien de la page et il aurait été possible d'avoir plusieurs correspondances avec "Date d'expiration...". Donc, je me suis dit qu'en faisant le plus, on pourrait plus facilement faire le moins.

Donc si le tableau ne contient qu'un élément, nul besoin d'un tableau, une variable de type string suffit :

Sub Navig()
Dim IE As InternetExplorer, sExpir as string
    Set IE = CreateObject("InternetExplorer.Application")
    Dim IEDoc As HTMLDocument
    Dim numserie As Object

    IE.Visible = True
    IE.navigate "le lien"
    Call WaitIE(IE)
    Set IEDoc = IE.document
    Set numserie = IEDoc.getElementsByName("entry-main-input-home")
    numserie.Item.Value = Sheets(8).Cells(57, 3).Value

    'Traitement du bouton dans div
   Dim Generic As HTMLGenericElement
   Set Generic = IEDoc.all("btn-entry-select")
   Generic.Click

   WaitIE IE
   set IEDoc = IE.document 'nouvelle page après clic
   set htmlcoll = iedoc.getelementsbyclassname("warrantyExpiringLabel mb-0 mr-3") 'affectation de la collection des éléments identifiés par la classe "warranty..."
   for each elem in htmlcoll 'pour chaque élément de la collection d'éléments obtenue
        if elem.outertext like "Date d'expiration*" then 'si outertext de l'élément contient "Date..."
            sExpir = elem.outertext 'sExpir vaut outertext
            exit for 'sortie anticipée de la boucle (qui n'aurait pas été adaptée avec des correspondances multiples)
        end if
   next elem
   msgbox sExpir
end sub

Et on peut déclarer plusieurs variables à la suite :

dim o as object, r1 as range, r2 as range,  s as string, ...

Mais il faut bien mettre le type, sinon la variable est de type variant (il n'y a pas de factorisation du typage). Donc comme tu l'as compris, t() est un tableau de type variant. On aurait pu mettre t() as string pour un tableau contenant des chaines de caractères.

J'espère que ces détails pourront t'aider.

Bon courage pour la suite de ta navigation IE, c'est vraiment du boulot !

Cdlt,

Rechercher des sujets similaires à "comment recuperer texte page web nom"