manipulation de IE sous VBA (transféré du forum Contribuez)
Tout d'abord bonjour à tous et merci pour le tuto très instructif de Qwazerty (auquel il faut se référer pour comprendre mon sujet) qui m'a décidé à ré-écrire des macros en VBA pour automatiser certains accès à une BDD sur un site professionnel sécurisé.
Je précise que j'avais déjà écrit de telles macros quelques années auparavant et que tout marchait bien. Mais depuis, mon PC et ses logiciels ont changé et là rien ne va plus...
Je suis sous W7 Édition familiale Premium SP1 64 bits, avec Office pro + 2010 (v.14.0.7147.5001 32 bits) et donc VBA (v.7.0.1628), avec IE11 (v.11.0.9600.17691 màj 11.0.17 32 bits semble-t-il) ; je précise également que Java 32 bits et 64 bits sont à jour également.
Évidemment, les références HTML Object Library et Internet Controls sont activées et pas qu'elles.
Mon problème dès le code de base du tuto : j'ai l'erreur "objet non défini" sur la ligne Set IEDoc = IE.document alors qu'il est préalablement bien défini par "Dim IEDoc As HTMLDocument" donc, avant le WaitDoc...
J'ai suivi pas à pas le tuto et les ajouts des commentaires.
Voici le code avec d'abord les déclarations (je ne reproduis évidemment pas le contenu des constantes) :
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
|
Option Explicit
Public Const CNX_URL As String = "http:xxxx"
Public Const CNX_LOG As String = "xxxx"
Public Const CNX_MDP As String = "xxxx"
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Essai1_VBA_IE()
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
'Chargement d'une page Web Google (pour info la constante est déclarée
IE.navigate CNX_URL
IE.Visible = True
WaitIE IE
Set IEDoc = IE.Document
WaitDoc IEDoc
IEDoc.getElementById("le_log").Value = CNX_LOG
IEDoc.getElementById("le_pass").Value = CNX_MDP
IEDoc.getElementById("btnConnexion").Click
WaitIE IE
' suite du code...
'On libère les variables
Set IE = Nothing
Set IEDoc = Nothing
End Sub
Sub WaitIE(IE As Internet.Explorer)
Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Sleep 1000
Loop
End Sub
Sub WaitDoc(IEDoc As HTMLDocument)
Do While Not IEDoc.readyState = "complete"
DoEvents
Sleep 1000
Loop
End Sub |
J'ai ré-essayé en faisant une autre déclaration de IE (cf. un des commentaires du tuto) sans plus de succès :
Code:
1 2 3
|
Dim IE As Object
Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") |
Merci d'avance