VBA Excel - Clic sur bouton page Internet Explorer

Résolu
dadacourse Messages postés 143 Statut Membre -  
 eric -
Bonjour,
Le code (détail ci-dessous) fonctionne très bien pour ouvrir le tableau PMU "Rapports probables"... Maintenant, je voudrais ensuite ouvrir le tableau "Simple Placé" (bouton à l'intérieur de "Rapports probables".
Je pensais y arriver en ré-utilisant ce code mais je coince.
Pouvez-vous m'aider ?
Jean-Luc

Sub essai01()
'
' essai01 Macro
'

'

Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim DivParent As HTMLSelectElement
Dim Enfants As HTMLSelectElement
Dim Petits_Enfants As HTMLSelectElement
Dim Flag As Boolean

IE.navigate "https://www.pmu.fr/turf/index.html#03012015/R1/C1"
IE.Visible = True
WaitIE IE
Set IEDoc = IE.document
Application.Wait Time + TimeSerial(0, 0, 2)
Set DivParent = IEDoc.getElementById("course-info-plus")
For Each Enfants In DivParent.Children
    For Each Petits_Enfants In Enfants.Children
        If Petits_Enfants.innerText = "Rapports probables" Then Petits_Enfants.Click: Flag = True: Exit For
    Next
    If Flag Then Exit For
Next
Set IE = Nothing
End Sub

Sub WaitIE(IE As InternetExplorer)
   Do Until IE.readyState = READYSTATE_COMPLETE
      DoEvents
   Loop
End Sub


EDIT: Ajout de la coloration syntaxique.

7 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    1- Lorsque tu places du code sur notre forum, merci d'utiliser les balises code à ta disposition.
    Le mode d'emploi (au cas ou) est ICI.

    2- Le titre est bien mieux comme cela. Non?

    3- je vais regarder, analyser la page Internet Explorer et revenir te dire si possible ou non.
    En attendant, je te recommande néanmoins la lecture de ce tutoriel : https://qwazerty.developpez.com/tutoriels/vba/ie-et-vba-excel/

    @+

    🎼 Cordialement,
    Franck 🎶
    0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    je vais regarder, analyser la page Internet Explorer et revenir te dire si possible ou non.

    ça a été plus rapide que prévu car très simple cette fois...

    Que nous apprends l'analyse du code source de la page, et, plus précisément de l'élément concerné?
    Tout simplement qu'il s'agit d'un lien (balise <a></a>) écrit avec cette syntaxe :
    <a class="btn" data-type-pari="SIMPLE_PLACE" href="#">Simple Placé</a>


    Il nous faut donc, pour pouvoir cliquer sur ce lien :
    1- Pointer le membre Document (cf tuto précédemment cité) => obligatoire car on vient de changer la page IE suite au clic généré par le code précédent)
    2- boucler sur toutes les balises de cette page
    3- stocker dans une collection les balises <a>
    4- boucler sur cette collection de balises
    5- si le texte du lien est : Simple placé, alors on clique et on sort de la boucle.

    Ce qui s'écrit, en VBA :

    Set IEDoc = IE.document
    Set Coll_Liens = IEDoc.getElementsByTagName("a")
    For Each Lien In Coll_Liens
        If Lien.innerText = "Simple Placé" Then Lien.Click: Exit For
    Next


    Code à ajouter en fin de macro précédente, comme ceci :
    Option Explicit
    'sources :
    'http://qwazerty.developpez.com/tutoriels/vba/ie-et-vba-excel/
    
    Sub DadaCourse()
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim DivParent As HTMLSelectElement
    Dim Enfants As HTMLSelectElement
    Dim Petits_Enfants As HTMLSelectElement
    Dim Flag As Boolean
    Dim Coll_Liens As IHTMLElementCollection
    Dim Lien As HTMLGenericElement
    
    IE.navigate "https://www.pmu.fr/turf/index.html#03012015/R1/C1"
    IE.Visible = True
    WaitIE IE
    Set IEDoc = IE.document
    Application.Wait Time + TimeSerial(0, 0, 2)
    Set DivParent = IEDoc.getElementById("course-info-plus")
    For Each Enfants In DivParent.Children
        For Each Petits_Enfants In Enfants.Children
            If Petits_Enfants.innerText = "Rapports probables" Then Petits_Enfants.Click: Flag = True: Exit For
        Next
        If Flag Then Exit For
    Next
    Set IEDoc = IE.document
    Set Coll_Liens = IEDoc.getElementsByTagName("a")
    For Each Lien In Coll_Liens
        If Lien.innerText = "Simple Placé" Then Lien.Click: Exit For
    Next
    Set IE = Nothing
    End Sub
    
    Sub WaitIE(IE As InternetExplorer)
       Do Until IE.readyState = READYSTATE_COMPLETE
          DoEvents
       Loop
    End Sub


    NOTA (très important) : Lorsque je place un lien vers une source, dans le code, sous la forme d'un commentaire, il convient de le laisser chez toi dans la macro de manière identique. Cela permet de reconnaitre le bon travail d'un bénévole sur Internet...
    0
    1. eric
       
      bonjour,

      comment puis je copier cela sur excel?

      eric
      0
  3. dadacourse Messages postés 143 Statut Membre 3
     
    ok, je m'y emploie !!
    0
  4. dadacourse Messages postés 143 Statut Membre 3
     
    Salut Franck,
    Absent quelques jours, je m'en occupe dés mon retour et je te tiendrais informé.
    Encore un grand grand merci !!
    Bonne journée
    Jean-Luc
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dadacourse Messages postés 143 Statut Membre 3
     
    Bonjour Franck,

    3 mots à te dire: SUPER,... GRAND MERCI !!!

    Ca fonctionne très bien (et je tiens compte de ton Nota)

    Vive le très bon travail d'un très bon et disponible bénévole.
    Plein de bonnes choses pour toi.

    Jean-Luc
    0
  7. dadacourse Messages postés 143 Statut Membre 3
     
    Bonjour Franck,
    Tous les jours je récupère des informations du site du PMU grâce au "code" que tu m'as fourni en tout début janvier... et cela fonctionne merveilleusement bien (je t'en remercie encore).

    Aujourd'hui, je voudrais une information de plus sur ce site: "Tous les rapports". Après plusieurs heures de tâtonnement, je n'ai toujours pas trouvé le bon "code", aussi je m'en remets encore une fois à toi.
    Une fois le site du PMU ouvert sur la bonne course, je voudrais simplement ouvrir à l'écran le tableau "Tous les rapports" (à l'écran, bouton du côté gauche sous ou à la suite des boutons colorés des différents paris).

    Par avance un grand merci !!

    Ci-après, le code utilisé (et fourni par toi) pour ouvrir la page initiale du PMU.
    En A1, l'URL de la course, par exemple :
    https://www.pmu.fr/turf/index.html#24022015/R1/C2

    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim DivParent As HTMLSelectElement
    Dim Enfants As HTMLSelectElement
    Dim Petits_Enfants As HTMLSelectElement
    Dim Flag As Boolean
    Dim Coll_Liens As IHTMLElementCollection
    Dim Lien As HTMLGenericElement
    
    IE.navigate "" & [A1].Value
    IE.Visible = True
    Application.Wait Time + TimeSerial(0, 0, 2)
    Set IEDoc = IE.document
    Application.Wait Time + TimeSerial(0, 0, 1)
    


    (Je ne suis pas sûr de ma manipulation pour les CS, toutes mes excuses si c'est faux)
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut,

      Désolé, je t'ai oublié.
      Le temps de me refaire un petit fichier exemple et je suis à toi...
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bon...
      Je vais donc te réexpliquer.
      Lorsque tu cherches à cliquer sur un élément d'une page IE, il te faut cibler cet élément.
      Pour cela, tu analyses le code source de ta page html.
      Cette analyse nous donne l'élément :
      <li class="actionbar-item js-all-report-button">
            Tous les rapports
      </li>

      Nous devons donc, dans la page html, ou, plus exactement dans l'élément document de cette page, trouver toutes les balises <li>. Une fois toutes les balises stockées (dans une collection), il nous suffira de boucler sur toutes et de trouver celle qui a pour className "actionbar-item js-all-report-button". Une fois celle-ci trouvée, on clic dessus...
      Voici donc ton code :
      Sub TousLesRapports()
      Dim IE As New InternetExplorer
      Dim IEDoc As HTMLDocument
      Dim coll_Li As IHTMLElementCollection
      Dim Li As HTMLGenericElement
      
      'ouverture de la page Internet Explorer
      IE.navigate "https://www.pmu.fr/turf/index.html#24022015/R1/C2"
      IE.Visible = True
      'attente du chargement complet de la page IE
      WaitIE IE
      'on cible le document de cette page
      Set IEDoc = IE.document
      'attente du chargement complet de l'élément Document de la page IE
      WaitDoc IEDoc
      'on créé notre collection contenant toutes les balises <li>
      Set coll_Li = IEDoc.getElementsByTagName("li")
      'on boucle sur toutes les balises <li> de notre collection
      For Each Li In coll_Li
          'Si la className de la balise <li> est "actionbar-item js-all-report-button"
          If Li.className = "actionbar-item js-all-report-button" Then 
              'on clique
              Li.Click
              'on quitte
              Exit For
          Ned If
      Next
      End Sub
      
      Sub WaitIE(IE As InternetExplorer)
      'attente du chargement complet de la page IE
         Do Until IE.readyState = READYSTATE_COMPLETE
            DoEvents
         Loop
      End Sub
      
      Sub WaitDoc(doc As HTMLDocument)
      'attente du chargement complet de l'élément Document
        Do While Not doc.readyState = "complete"
          DoEvents
        Loop
      End Sub
      
      0
    3. dadacourse Messages postés 143 Statut Membre 3 > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Bonjour Franck
      Navré de répondre si tard mais impossible pour moi de m'y atteler avant ce matin... J'ai bien recopié le code,... la page de la course s'ouvre bien mais aucun clic sur le bouton "Tous les rapports",... ?
      Merci de ton temps passé sur mon souhait
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > dadacourse Messages postés 143 Statut Membre
       
      Bonjour,

      Je viens de réessayer.
      Tout fonctionne pour moi.
      0
    5. dadacourse Messages postés 143 Statut Membre 3 > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      J'ai recommencé et "rien à faire", la course s'ouvre bien mais pas le tableau "Tous les rapports"
      0
  8. dadacourse Messages postés 143 Statut Membre 3
     
    Bonsoir Franck
    Je viens tout juste de découvrir ta réponse. Dés demain matin je m'y attelle et te tiens au courant.
    Grand merci et bonne soirée !!
    0