Remplir un formulaire web (liste déroulante) via VBA
Bonjour, j'espère que vous vous portez bien. Je travaille sur un projet actuellement mais je rencontre quelques difficultés que je tiens à partager avec vous pour que vous puissiez m'aider à le résoudre.
Je veux remplir un formulaire web contenant des listes déroulantes, des boutons radio via vba mais quand l'application vba se connecte au site, elle n'arrive pas à remplir les listes déroulantes et les boutons radio. Je suis certainement en train de faire une erreurs quelque part. Merci de m'aider !
Voici un exemple du code html de la balise select
<select id="j_id_jsp_132384828_4:selectval::content" name="j_id_jsp_132384828_4:selectval" style="background-color: rgb(51,204,255);color: rgb(0,0,0);" class="x2f" theme="dark" title="">
<option value="0" title=""></option>
<option value="1" selected="" title="ABJC">ABJC</option>
<option value="2" title="BICC">BICC</option>
<option value="3" title="BNBC">BNBC</option>
<option value="4" title="BOAB">BOAB</option>
<option value="5" title="BOABF">BOABF</option>
</select>
Bonjour,
voici un exemple pour connaitre les différent objets d'une page web,
cette exemple concerne le site "http://www.google.ca/"
vous aurai à adapter.
Sub WebObjectsName()
Dim i As Integer
Dim IE As InternetExplorer
Dim maPageHtml As HTMLDocument
Dim Helem As IHTMLElementCollection
Set IE = CreateObject("internetExplorer.Application")
IE.Visible = True
IE.navigate "http://www.google.ca/"
Do Until IE.readyState = READYSTATE_COMPLETE
DoEvents
Loop
Set maPageHtml = IE.Document
Set Helem = maPageHtml.getElementsByTagName("input")
For i = 0 To Helem.Length - 1
Range("A" & i + 1) = Helem(i).getAttribute("name")
Range("B" & i + 1) = Helem(i).getAttribute("value")
Next
End Sub
une fois l'objet connu
For i = 0 To Helem.Length - 1
If Helem(i).getAttribute("name") = "q" Then 'q est le nom de la case pour
entrer le mot ou la phrase à rechercher
Helem(i).innerText = "je recherche un mot"
Helem(i + 1).Click 'le bouton Recherche Google vient juste après q donc i + 1
End If
Next
Merci pour l'aide mais elle ne règle pas mon problème. Voici mon code :
Sub Bouton1_Cliquer()
'If MsgBox("Etes-vous sûrs de vouloir valider le formulaire? ", vbYesNo + vbQuestion, "Demande de confirmation") = vbYes Then
Dim IE As InternetExplorer
Dim IEdoc As Object
Dim DOCelement As Object
Dim htmlTagCol As IHTMLElementCollection
Set IE = New InternetExplorer
IE.Visible = True
IE.navigate ("http://bit.ly/2sLyatD")
' attente de fin de chargement
Do Until IE.readyState = 4
DoEvents
Loop
Set IEdoc = IE.document
'On liste les éléments de type input : login
Set htmlTagCol = IEdoc.getElementsByTagName("input")
Set DOCelement = htmlTagCol.Item("j_id_jsp_926394357_14::content")
DOCelement.Value = "username"
'On liste les éléments de type input : password
Set htmlTagCol = IEdoc.getElementsByTagName("input")
Set DOCelement = htmlTagCol.Item("idpass::content")
DOCelement.Value = "password"
'On liste les éléments de type input : connexion
Set htmlTagCol = IEdoc.getElementsByTagName("button")
Set DOCelement = htmlTagCol.Item("cmdCon")
DOCelement.Click
Dim htmlSelectElem As HTMLSelectElement
'On va sur l'objet qui contient la liste des indices
[color=#0000FF]Set htmlSelectElem = IEdoc.all("j_id_jsp_132384828_4:selectval::content")
[/color]
'On sélectionne l'indice "ter" via sa valeur unique
[color=#FF0000] htmlSelectElem.Value = "2"[/color]
'End If
'libérer la mémoire
Set IE = Nothing
Set IEdoc = Nothing
End Sub
Tout le code fonctionne sauf les parties colorées. Lors de l'exécution du code, l'erreur suivant apparait: Variable objet non définie (Erreur 91). En cherchant à résoudre ce problème, j'ai constaté Set htmlSelectElem=Nothing. Plus précisément, la page ne se charge pas totalement avant que le choix est fait dans la liste déroulante. Je ne sais donc pas concrètement comment régler cela . Merci de m'aider !
Bonjour,
avez-vous essayer avec une pause
'On va sur l'objet qui contient la liste des indices
Set htmlSelectElem = IEdoc.all("j_id_jsp_132384828_4:selectval::content")
' attente de fin de chargement
Do Until IE.readyState = 4
DoEvents
Loop
'On sélectionne l'indice "ter" via sa valeur unique
htmlSelectElem.Value = "2"
Oui, je l'ai essayé mais c'est toujours le même problème.