Macro qui utilise IE ne marche plus sous Windows 7

Résolu
joey_nmuk -  
Valéry01 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Dans le cadre du travail, je dois faire des extractions de données en remplissant un formulaire assez régulièrement, sur une page intranet. Donc, J'ai créé une macro excel qui marche très bien sous XP mais plus sous Windows 7 (j'ai migré vers W7). J'utilise office pro 2010.
Cette macro ouvre internet explorer, remplit certains champs et puis appuie sur un bouton.
Les champs ont été repérés en utilisant le code de la page HTML.
Sous W7, la page s'ouvre bien mais les champs ne sont pas renseignés

J'ai une fonction qui me sert de tempo pour donner le temps à IE de prendre en compte mes manip.

Est-ce que sous windows 7, il faut une librairie spéciale pour pouvoir utiliser les fonctionnalité d'IE?
J'ai les références suivantes :
- Microsoft office 14.0 Object library
- Microsoft HTML Object Library
- Microsoft Internet Controls
- OLE automation
- Visual basic for Applications
- Microsoft Excel 14.0 Object Library


Voici le code simplifié

Sub ExtractFromLB()

On Error GoTo fin
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")

'Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument

IE.navigate "http://www" ' l'adresse a été enlevé car c'est un site intranet
IE.Visible = True


Call WaitIE(IE)
Set IEDoc = IE.document
Call WaitIE(IE)
IEDoc.all("drpProfile").Value = "5969"
Call WaitIE(IE)
IEDoc.all("lnkExpand").Click
Call WaitIE(IE)
IEDoc.all("dfFuncGrpFrom$ctl01").Value = "2861"
Call WaitIE(IE)
IEDoc.all("dfFuncGrpTo$ctl01").Value = "2862"
Call WaitIE(IE)
IEDoc.anchors("btnExcelExport").Click
Set IE = Nothing
Exit Sub

End Sub

Sub WaitIE(IE2 As InternetExplorer)
Dim Nowa As Date
Nowa = Now
Do While IE2.Busy
Application.Wait DateAdd("s", 1, Now)
If Now > DateAdd("s", 3000, Nowa) Then Call Animation.Killmacro("No IE answer")
Loop
End Sub




A voir également:

6 réponses

CaRoule
 
Hello les guys!
J'ai trouvé!!
Remplacé le code :

Dim IE As Object
Set IE = 'CreateObject("InternetExplorer.Application")


PAR
 Dim IE As Object
 Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") 


et le miracle se produit.
C'est une histoire à base de registre et de protect mode d'IE.
11
Nicky22140 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
Punaise t'es un Warrior !
3 jours que je me galere avec mon ancien code a mettre au gout de Win7, et que je me farcis tous les forums excel/VBA en vain
You save my life thx!
0
déon
 
trop fort :)
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Pour répondre à ta question : Est-ce que sous windows 7, il faut une librairie spéciale pour pouvoir utiliser les fonctionnalité d'IE?
La réponse est non, seules sont utiles les deux références suivantes :
- Microsoft HTML Object Library
- Microsoft Internet Controls

Par contre, si tes "champs" ne se remplissent pas, c'est, à mon avis, parce qu'ils ne sont pas clairement identifiés.
Si tes champs sont de type "input", avec un "id" personnel, je n'utiliserai pas .all pour les identifier, mais l'élément html Input : HTMLInputElement, s'ils sont de type link, utiliser HTMLLinkElement.
Voici un exemple :
Sub test()
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim HtmlElemUtilisateur As HTMLInputElement
Dim HtmlElemPassword As HTMLInputElement
Dim Valider As HTMLLinkElement

IE.navigate "[http://]"
IE.Visible = True
WaitIE
Set IEDoc = IE.document
'ici on affecte à notre variable HtmlElemUtilisateur l'élément input de la page html dont l'id est "j_username"
Set HtmlElemUtilisateur = IEDoc.getElementById("j_username")
'idem avec l'id "j_password"
Set HtmlElemPassword = IEDoc.getElementById("j_password")

'on remplit les champs input correspondants avec des valeurs
HtmlElemUtilisateur.Value = "Utilisateur"
HtmlElemPassword.Value = "azerty123"

'on affecte à notre variable Valider l'élément link de notre page html ayant pour id "btnAction"
Set Valider = IEDoc.Links("btnAction")
'on clic
Valider.Click
End Sub

Sub WaitIE()
Do Until IE.readyState = READYSTATE_COMPLETE
    DoEvents
Loop
End Sub


Sache également que l'on peux déclencher une fonction javascript depuis VBA. La syntaxe est :
IEDoc.parentWindow.execScript "NomDeLaFonction;", "javascript"


Après cela, sans élément supplémentaire (extraits du code source de la page html) il sera très difficile de t'aider davantage.
Cordialement,
Franck P
0
CaRoule
 
Merci pour ton aide pijaku.
joey_nmuk, j'ai le même problème, tout marche bien sous XP, je passe à Windows 7 et le code bloque au nieau de
IE.visible = true.
"L'instance n'existe pas".
Je continue mes recherches
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Salut,
De rien...

Avant la ligne :
IE.Visible = True

as tu bien ces lignes de code :
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application") 


Sinon, pour faciliter vos recherches, regardez ce super tuto!!!
0
CarRoule
 
non, j'ai mis
Dim IE As New InternetExplorer
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
as tu été voir le tutoriel donné précédemment?
0
joey_nmuk Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
SAlut,
C'est ce tuto qui m'a fortement inspiré.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Salut,
As-tu essayé de remplacer :
Dim IE As New InternetExplorer

IE.navigate "http://blablabla"
IE.Visible = True


par :
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application") 
IE.navigate "http://blablabla"
IE.Visible = True


Perso, je suis sous W7 avec IE9 et n'ai aucun souci, ni avec l'un, ni avec l'autre, du moment ou les références sont bien cochées.......
0
CaRoule
 
Oui mais sans progrès.
Il semblerait que le problème puisse venir de conflit lié au version 32 et 64 bit d'IE.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Alors je n'ai pas de solution.
Désolé.
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
joey_nmuk
 
Génial
0
Valéry01 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Peut-être une idée de piste à creuser:
Ma macro (avec "fonction IE. ") fonctionne sous :
- XP Excel 2007 IE8
- W7 32 Excel 2007 IE8
- W7 64 Excel 2010 IE11

J'essaie de la faire fonctionner sous W7 64 Excel 2007 IE11 et j'obtiens l'erreur :
Erreur de compilation :
Mécanisme de bibliothèque d'objet non géré
sur :
IEDoc dans:
Set IEDoc = IE.document

bien entendu dans la déclaration j'ai :
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument

et sur le PC en question j'ai bien intégré les références : « Microsoft Internet Controls » et « Microsoft HTML Object Library ».

La seule différence c'est Excel 2007 / Excel 2010 ?

En relisant le post une deuxième voir une troisième fois j'ai LA SOLUTION :

sous le pc W7 64 Excel 2007 IE11
j'ai remplacé :
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
par :
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")

Et ça fonctionne
Merci Pijaku

Désolé je n'ai pas utilisé les balises HTML pour présenter mon message
0