Macro qui utilise IE ne marche plus sous Windows 7

Résolu/Fermé
joey_nmuk - 25 juin 2013 à 17:32
Valéry01 Messages postés 7 Date d'inscription samedi 1 juin 2013 Statut Membre Dernière intervention 15 septembre 2016 - 4 sept. 2016 à 08:06
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

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 vendredi 31 octobre 2014 Statut Membre Dernière intervention 31 octobre 2014
31 oct. 2014 à 16:45
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
trop fort :)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 26/06/2013 à 11:58
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
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
27 juin 2013 à 15:07
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
non, j'ai mis
Dim IE As New InternetExplorer
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
28 juin 2013 à 15:37
as tu été voir le tutoriel donné précédemment?
0
joey_nmuk Messages postés 1 Date d'inscription lundi 1 juillet 2013 Statut Membre Dernière intervention 1 juillet 2013
1 juil. 2013 à 15:18
SAlut,
C'est ce tuto qui m'a fortement inspiré.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
1 juil. 2013 à 15:33
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
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
2 juil. 2013 à 15:23
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
Génial
0
Valéry01 Messages postés 7 Date d'inscription samedi 1 juin 2013 Statut Membre Dernière intervention 15 septembre 2016
4 sept. 2016 à 08:06
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