Sélectionner un Element d'un menu déroulant avec valeur

Bonjour,

En tant que débutant et malgré les nombreuses consultations sur les forums, je ne peux pas résoudre un problème : sélectionner un élément en fonction de sa valeur sur VBA.

En tant normal, il faut cliquer sur le bouton "--Select--" pour afficher les éléments du menu déroulant (London, Paris, Madrid) et cliquez ensuite sur l'un de ces pays pour que le site charge la page du pays en question (Fonction Countryredirect).

J'ai essayé différentes manipulations comme IE.document.getElementById ou tagname ou encore all mais sans succès. Je sais aussi que je dois utiliser FireEvent pour l'élément "onchange". Si vous pouvez m'éclairer sur le sujet. Merci.

Voici le début de mon code VBA

Private Sub Country()

Dim IE As New InternetExplorer

Dim IEDoc As HTMLDocument

URL = "xxxxxxx"

IE.navigate URL

Do Until IE.ReadyState = 4

DoEvents

Loop

IE.Visible = True

Call IE.Document.getElementById("uname").setAttribute("value", "user")

Call IE.Document.getElementById("pass").setAttribute("value", "password")

Call IE.Document.getElementById("btn").Click

Do Until IE.ReadyState = 4

DoEvents

Loop

'C'est ici que je dois sélectionner mon pays.

End Sub


Ci dessous vous trouverez le code source de la page WEB.

<form name="form1" method="post" action="">

<div class="mdx-div-qwup mdx-gen-d2c7gwdanimation">Select your country:</div>

<div class="">

<select class="mdx-div-1y6e selectlist" id="countryselect" name="countryselect" onChange="countryRedirect(this.value);" >

<option id="countrySelect" selected="selected">--Select--</option>

<option value= London >- London</option>

<option value= Paris >- Paris</option>

<option value= Madrid >- Madrid</option>

</select>

Je vous mets aussi la fonction pour mieux comprendre le code.

function makeSelect(value) {

var selectedVal = document.getElementById("countrySelect");

selectedVal.value = value;

selectedVal.text = value;

selectedVal.style.fontWeight = 'bold';

}

function countryRedirect(value){

//alert("Val : "+value);

if (value =='London')

{

document.getElementById("selCountry").value='L';

verInformeMarca("L") ;

}

else if (value =='Paris')

{

document.getElementById("selCountry").value='P';

verInformeMarca("P");

}

else if (value =='Madrid')

{

document.getElementById("selCountry").value='M';

verInformeMarca("M");

Bonjour,

Vous avez peut-être déjà essayer de la sorte mais voici un essai :

Private Sub Country()

Dim IE As New InternetExplorer

URL = "xxxxxxx"

with IE
    .navigate URL
    AttenteIE IE
    .Visible = True
    with .Document
        .getElementById("uname").setAttribute("value", "user")
        .getElementById("pass").setAttribute("value", "password")
        .getElementById("btn").Click
    end with
    AttenteIE IE
    temporiser
    with .Document
        if range("A1").value <> "" then 'exemple de condition ou les villes se trouvent en A1 (en liste déroulante)
            .getElementById("countrySelect").value = range("A1").value '<<< prend nom de la ville
        end if
        .getElementById("btn2").Click 'hypothétique bouton2 à cliquer suite au choix de ville
    end with
end with

End Sub

Sub AttenteIE(IE as InternetExplorer)
Do Until
    IE.ReadyState = 4
    DoEvents
Loop
end sub

Sub temporiser()
Application.wait now + timevalue("00:00:01")
end sub

Pour l'instant, je me suis seulement intéressé au code HTML.

Cdlt,

Bonjour,

Tout d'abord, merci pour votre message.

j'ai essayé votre code sans succès. Apres plusieurs recherche je pense que le problème est que dès que une fois la connexion au compte établie, l'url est change.

Url page login: xxx com

Ensuite après avoir cliquer sur le button "btn", l'url change pour arriver sur la page ou je dois sélectionner un pays:

Url selection pays: xxx com/country.jsp

Le code n'arrive apparemment pas comprendre cela et a tendance à chercher les éléments HTML sur l'url de départ. C'est ce que je pense mais je n'arrive pas à résoudre le problème. J'ai souvent l'erreur "91" : variable objet ou variable de bloc with non définie.

Pour verifier cette hypothèse, j'ai utiliser Msgbox ie.LocationURL et je vois s'afficher l'url de départ. Alors que je souhaiterais que ce soit l'Url selection pays: "xxx com/country.jsp"

'début du code

ie.document.getElementById("btn").click

Do until ie.ReadyState=4

doEvents

application.wait now + TimeValue("00:00:05")

msgbox ie.LocationURl   'le message affiche l'url de départ

End Sub

Je pense qu'une fois ce problème résolu, je pourrais vérifier si votre code ainsi que les autres déjà essayés sont corrects.

Cordialement et Merci encore pour votre message.

Bonjour,

Oui, j'y ai pensé à ce problème ! Est-ce que vous obtenez une nouvelle fenetre avec le clic ?

Pouvez-vous essayer ce code dans un premier temps :

Private Sub Country()

Dim IE As New InternetExplorer
Dim oHTML as HTMLDocument

URL = "xxxxxxx"

with IE
    .navigate URL
    AttenteIE IE
    set oHTML = .Document
    .Visible = True
    with oHTML
        .getElementById("uname").setAttribute("value", "user")
        .getElementById("pass").setAttribute("value", "password")
        .getElementById("btn").Click
    end with
    AttenteIE IE
    temporiser
    set oHTML = .Document 'après tempo et IE complet, on capte le nouvel objet document html
    oHTML.getElementById("countrySelect").value = "Paris"
end with

End Sub

Sub AttenteIE(IE as InternetExplorer)
Do Until
    IE.ReadyState = 4
    DoEvents
Loop
end sub

Sub temporiser()
Application.wait now + timevalue("00:00:05")
end sub

et dans un second temps, avec une fonction (en gardant les 2 autres procédures que je n'ai pas reprises ici) :

Private Sub Country()

Dim IE As New InternetExplorer
Dim oHTML as HTMLDocument

URL = "xxxxxxx"

with IE
    .navigate URL
    AttenteIE IE
    set oHTML = .Document
    .Visible = True
    with oHTML
        .getElementById("uname").setAttribute("value", "user")
        .getElementById("pass").setAttribute("value", "password")
        .getElementById("btn").Click
    end with
    AttenteIE IE
end with

temporiser 'apres tempo, on essaie de capter la nouvelle fenetre IE via notre recupie
set IE = RecupIE 'fonction permettant de récupérer la derniere fenetre IE
msgbox IE.locationurl 'pour test
set oHTML = IE.Document 'capte le html document
oHTML.getElementById("countrySelect").value = "Paris" 'assigne à l'élément countryselect la valeur Paris

End Sub

Function RecupIE() as InternetExplorer

Dim oShell As ShellWindows
Dim obj As IWebBrowser2
Dim oIE As InternetExplorer

Set oShell = New ShellWindows

For Each obj In oShell
    If obj.Application = "Internet Explorer" Then
        Set oIE = obj
    End If
Next obj

Set RecupIE = oIE

End Sub

Pourriez-vous me dire où ça bloque si ça bloque encore ? Merci,

Cdlt,

Re-bonjour,

Franchement, merci beaucoup, je n'ai essayé que le premier code et il a parfaitement fonctionné.

J'ai juste ajouté une petite ligne pour permettre de lancer l'évènement "onchange".

Private Sub Country()

Dim IE As New InternetExplorer
Dim oHTML as HTMLDocument

URL = "xxxxxxx"

with IE
    .navigate URL
    Do Until
    IE.ReadyState = 4
    DoEvents
    Loop
    Set oHTML = .Document
    .Visible = True

With oHTML
        .getElementById("uname").value= "user"
        .getElementById("pass").value= "password"
        .getElementById("btn").Click
    end with
    IE.ReadyState = 4
    DoEvents
    Loop
    Application.wait now + timevalue("00:00:01")

set oHTML = .Document 
    oHTML.getElementById("countrySelect").value = "Paris"
   oHTML.getElementById("countrySelect").FireEvent("onchange")
 End with
  Do Until
    IE.ReadyState = 4
    DoEvents
    Loop
    Application.wait now + timevalue("00:00:01")

End Sub

Grâce à Application.Wait now + ("00:00:01") , on laisse à IE suffisamment de temps pour charger et donc pour capturer le nouvel objet document html.

Un grand merci à vous.

Cordialement,

Super ! Je suis content que ça marche !

Au cas où, le second code est plus approprié lorsque le clic ouvre une nouvelle fenêtre et donc un nouvel IE.

Bonne continuation,

Cdlt,

Rechercher des sujets similaires à "selectionner element menu deroulant valeur"