Macro pour recupere info sur une page web

Bonjour

Je vous explique mon problème. Je travaille bcp avec les autorités britanniques et je dois savoir quel pays a besoin d'un visa pour se rendre au Royaume Uni. Comme ces infos on tendance à changer régulièrement, je souhaiterais une macro pour recuperer ces infos directement sur le site de l'immigration britannique. J'aurais pu me débrouiller seul s'il existait une page web avec sa propre adresse par pays. Or ce n'est pas le cas. Je suis donc obligé de passer par cette adresse :

http://www.ukba.homeoffice.gov.uk/visas-immigration/do-you-need-a-visa/

Y a-t-il un moyen de créer une macro qui va remplir les 3 menus déroulants et qui va récupérer les infos dont j'ai besoin sur la page qui s'affichera une fois les menus remplis?

Je joins un tableau

la 1ere colonne, c'est le nom du pays en FR, la deuxième en anglais, la 3eme indique si un visa est nécessaire. Dans la 4eme je voudrais que la macro indique le résultat de sa recherche sur le site de l'UKBA.

Je recapitule donc :

La macro doit

  • Aller sur la page http://www.ukba.homeoffice.gov.uk/visas-immigration/do-you-need-a-visa/
  • Entrer 'Visit' dans le 1er menu déroulant
  • Entrer le nom anglais du pays en colonne B du tableau (ex Germany) dans le 2eme et 3eme menu deroulant de la page web
  • Cliquer sur 'Find out'
  • Recuperer l'info :
Si 'NO, you do not need a visa to come to the UK' , inscrire NON dans la colonne D du tableau

Si 'YES, you do need a visa to visit the UK', inscrire oui dans la colonne D du tableau

et cela pour tous les pays de la liste

Je vous aurais bien laissé un début de code mais je ne vois absolument pas comment faire, ni quoi chercher sur google.

Une derniere chose, si vous trouvez la macro qui me permettrait de faire ça. Pouvez vous l'écrire à la suite de ce post? La politique de téléchargement de ma boite est assez restrictive et je ne pourrai pas récupérer mon fichier si vous le modifiez.

Merci

Salut,

Je l'ai fait mais.... Les pauses sont importantes, je me base sur le fait que IE a fini de charger la page avant de regarder le contenu, mais comme c'est du Javascript, l'execution du javascript n'entre pas en compte pour l'indicateur de fin de chargement de la page.

La seul solution (yen a sans doute d'autres...) c'est de mettre une pause.

Voici le code.

'Penser a ajouter les references :
'Microsoft HTML Object Library
'Microsoft Internet Controls
'Dans editeur VBA => OUTILS => REFERENCE
'Sinon erreur... ;-)

Private Sub CommandButton1_Click()
Dim retour As String
Dim myie As New InternetExplorer
Dim myhtml As HTMLDocument

i = 4
While Cells(i, 2) <> ""

myie.Visible = True
myie.Navigate2 "http://www.ukba.homeoffice.gov.uk/visas-immigration/do-you-need-a-visa/"
Do Until myie.readyState = 4 'Loop unitl ie page is fully loaded
    DoEvents
Loop

myie.document.all("reasonList").Value = "Visit"
myie.document.all("nationalityList").Value = Cells(i, 2)
myie.document.all("countryList").Value = Cells(i, 2)
myie.document.all("submitBtn").Click  'clique sur le bouton...

Do Until myie.readyState = 4 'Loop unitl ie page is fully loaded
    DoEvents
Loop
'Pause
mysleep 4

'REsultat
Set myhtml = myie.document
retour = myhtml.documentElement.innerText

If InStr(1, UCase(retour), UCase("NO, you do not need")) > 0 Or InStr(1, UCase(retour), UCase("NO, in most cases")) > 0 Then  'pas besoin
    Cells(i, 4) = "Non"
ElseIf InStr(1, UCase(retour), UCase("YES, you do need")) > 0 Then
    Cells(i, 4) = "Oui"
Else
    Cells(i, 4) = "??"
End If
i = i + 1

Wend
End Sub

Function mysleep(mypause As Integer)
Dim d As Double

d = Timer
While Timer < (d + mypause)
    DoEvents
Wend
End Function

Dis moi si ca marche de ton coté.

++

Damien

un gd merci à toi

je vais tester cela dans la matinée

Ca marche très bien pour le 1er pays de la liste mais dès le 2eme pays j'ai une erreur :

'erreur d'execution 91

Variable objet ou variable de bloc with non definie '

Je pense comprendre que le temps d'attente de la macro n'est pas encore assez important mais je ne sais pas quelles données de la macro je dois modifier pour l'allonger. J'ai essayé de la bidouiller un peu mais du coup la macro ne fait plus rien, elle attend.

Il faut savoir qu'au boulot on utilise un truc délirant appelé Internet Explorer 6, je ne sais pas si cela peut faire partie du problème (mais au quotidien c'est très sympa à utiliser XD)

Nous sommes qqs uns (on nous appelle 'les élus') à pouvoir utiliser Firefox (3.6). Serait-ce plus simple pour la macro d'utiliser Firefox plutôt que IE?

En tout cas, merci bcp pour cette macro très prometteuse.

Re,

Le temps d'attente est sur la fonction :

mysleep 4 'on attends 4 secondes : on peut augmenter mais je ne sais pas si cela reglera ton problème.

A mon avis ton problème est sur le code :

myie.document.all("reasonList").Value = "Visit"
myie.document.all("nationalityList").Value = Cells(i, 2)
myie.document.all("countryList").Value = Cells(i, 2)
myie.document.all("submitBtn").Click  'clique sur le bouton...

Si par exemple reasonList n'existe pas sur la page, alors on aura une erreur du même type.

Si l'erreur survient peux-tu vérifier que tu es sur la bonne page ?

Si tu peux rajouter l'instruction comme suit et faire un test :

mysleep 4
myie.document.all("reasonList").Value = "Visit"
myie.document.all("nationalityList").Value = Cells(i, 2)
myie.document.all("countryList").Value = Cells(i, 2)
myie.document.all("submitBtn").Click  'clique sur le bouton...

Pour ma part je ne rencontre pas le problème. (je te renvoi le fichier si jamais tu as une version différentes)

Pour Firefox, oui c'est possible, mais comme tu as pu le constater dans le code j'instancie les objets IE.

Il faudrait revoir le dev pour Firefox et je ne connais pas les objets(methode, propriété etc..)

A te relire.

damien

169navigateie.zip (29.79 Ko)

en rajoutant le 'mysleep4', ca marche nickel

un grand merci à toi

Rechercher des sujets similaires à "macro recupere info page web"