Macro accès internet et Late/early binding
Bonjour à tous,
J'ai suivit le tutoriel de Qwazerty sur la manipulation d'internet explorer via VBA sans problèmes particuliers.
Ci dessous le premier code que j'ai adapté à mon utilisation :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| Sub ABCbourse()
'Déclaration des variables
Dim IE As New InternetExplorer 'cette instance contiendra la page qui charge en boucle
Dim IEDoc As HTMLDocument
Dim Input_Date_debut As HTMLInputElement
Dim Input_Date_fin As HTMLInputElement
Dim Input_ISIN_Number As HTMLInputElement
Dim Input_ISIN_coche As HTMLInputElement
Dim suivant As HTMLInputElement
IE.navigate "http://www.abcbourse.com/download/historiques.aspx?f=ex"
IE.Visible = True
'appelle la macro WaitIE, qui attend le chargement de la page.
waitIE IE
'On pointe le membre document
Set IEDoc = IE.document
'On point la zone de texte IEDoc.all("name", "index si plusieurs noms")
Set Input_ISIN_Number = IEDoc.all("ctl00$BodyABC$txtOneSico")
'On écrit le texte qu'on veut placer dedans :
Input_ISIN_Number.Value = "FR0000045072"
waitIE IE
Set Input_ISIN_coche = IEDoc.all("ctl00$BodyABC$oneSico")
Input_ISIN_coche.Click
Set Input_Date_debut = IEDoc.all("ctl00$BodyABC$strDateDeb")
Input_Date_debut.Value = "01/01/2014"
Set Input_Date_fin = IEDoc.all("ctl00$BodyABC$strDateFin")
Input_Date_fin.Value = "01/09/2014"
Set suivant = IEDoc.all("ctl00$BodyABC$Button1")
suivant.Click
Set IEDoc = Nothing |
Ce code fonctionne parfaitement.
L'inconvénient, c'est que ce classeur que je suis en train de faire est destiné à circuler sur plusieurs postes pour plusieurs personnes.
Je voudrais éviter de devoir activer manuellement ou via une macro les références nécessaires (HTML object library, Microsoft Internet Controls et Microsoft Shell Controls And Automation).
J'ai donc entrepris de modifier le code en déclarant les variables en Late Binding :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
Sub ABCbourse()
'Déclaration des variables
Dim IE As Object
Set IE = CreateObject("InternetExplorer.application") 'pas de soucis particuliers à ce niveau la.
Dim IEDoc As Object
Set IEDoc = CreateObject("htmlfile") 'la non plus aucun problèmes
' Paramètres des champs ABC Bourse, tous déclarés en tant qu'objet.
Dim Input_Date_debut As Object
Dim Input_Date_fin As Object
Dim Input_ISIN_Number As Object
Dim Input_ISIN_coche As Object
Dim suivant As Object
IE.navigate "http://www.abcbourse.com/download/historiques.aspx?f=ex"
IE.Visible = True
'appelle la macro WaitIE, attend le chargement de la page.
waitIE IE
Set IEDoc = IE.document
'On point la zone de texte IEDoc.all("name", "index si plusieurs noms")
Set Input_ISIN_Number = IEDoc.all("ctl00$BodyABC$txtOneSico")
'On écrit le texte qu'on veut placer dedans :
Input_ISIN_Number.Value = "FR0000045072"
waitIE IE
Set Input_ISIN_coche = IEDoc.all("ctl00$BodyABC$oneSico")
Input_ISIN_coche.Click
Set Input_Date_debut = IEDoc.all("ctl00$BodyABC$strDateDeb")
Input_Date_debut.Value = "01/01/2014"
Set Input_Date_fin = IEDoc.all("ctl00$BodyABC$strDateFin")
Input_Date_fin.Value = "01/09/2014"
Set suivant = IEDoc.all("ctl00$BodyABC$Button1")
suivant.Click
waitIE IE
'attente de 5 secondes avant de poursuivre
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 5
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
SendKeys "{tab}"
SendKeys "{enter}"
'On libère la variable IEDoc
Set IEDoc = Nothing
'Penser à quitter internet :
IE.Quit |
La ligne 27, Set IEDoc = IE.document renvoie une erreur : "La méthode Document de l'objet IWebBrowser2 a échoué."
Si je supprime la ligne, le code continue, et la ligne suivante renvoie une erreur également : "Propriété ou méthode non gérée par cet objet."
Je suis bloqué je n'arrive pas à avancer. L'objectif est vraiment de supprimer l'activation des références.
Une autre solution à laquelle j'ai pensé, c'est d'activer les références par macro, j'ai bien le bout de code nécessaire, il fonctionne, mais pour cela il faut activer la case "Accès approuvé au modèle d'objet du projet VBA" dans les paramètres de sécurité des macros.
On peut lire la valeur de la case via une macro, mais je n'ai pas trouvé le moyen de modifier cette valeur via VBA, cela simplifierait énormément la suite de mon travail.
Un autre point dans mon code qui pose un soucis et qui est pas très beau, ce sont les lignes 59 et 60, ces touches permettent d'ouvrir le fichier via une interaction avec la fenêtre "Téléchargement" d'IE.
Y a-t-il un autre moyen que ça ? Surtout que ça risque de ne pas fonctionner sur tous les postes.
Merci d'avance, désolé pour la longueur du message.