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 :
Ce code fonctionne parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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 :
La ligne 27, Set IEDoc = IE.document renvoie une erreur : "La méthode Document de l'objet IWebBrowser2 a échoué."
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Partager