OVH Cloud OVH Cloud

DHTML : erreur 429

4 réponses
Avatar
Gloops
Bonjour tout le monde,

Aucun problème pour accéder par DHTML à un document web par ouverture,
par exemple

Set IE = New InternetExplorer
IE.Navigate "http://www.google.fr"

(en ayant bien sûr pris soin de sélectionner shdocvw.dll dans les
références)

Mais si maintenant j'ai une fenêtre Internet Explorer déjà ouverte, et
que je veux aller lire dedans ?

Set O = GetObject("http://www.google.fr", "InternetExplorer.Application")
Erreur 432, nom de fichier ou de classe non trouvé pendant l'opération.

Set O = GetObject("http://www.google.fr", "")
Erreur 429, le composant ActiveX ne peut créer l'objet

Set O = GetObject("http://www.google.fr", vbNullString)
Erreur 5, appel ou argument de procédure incorrect

Je réussis à ouvrir un objet sur Internet Explorer en ne précisant pas
d'URL, mais cet objet ne gère pas les collections windows et documents.

Alors, faut-il fermer la fenêtre et rouvrir un navigateur sur la même
adresse ?

J'ai un navigateur de dialogue Yahoo qui ouvre des fenêtres Internet
Explorer, lesquelles semblent prendre un malin plaisir à aller se cacher
derrière. Alors, je les positionne correctement à gauche de la fenêtre
Yahoo, grâce au hWnd et aux API, ça d'accord, mais alors ensuite les
fenêtres ouvertes comportent des tableaux dont seule la deuxième colonne
m'intéresse, et encore pas le haut. Alors j'aimerais bien faire défiler
la fenêtre au bon endroit. Les propriétés DHTML me paraissent adaptées
pour aller plus loin, mais j'ai tendance à trouver "ballot" de devoir
ouvrir un deuxième exemplaire de chaque nouvelle fenêtre ouverte.

4 réponses

Avatar
Alain CROS
Bonjour,

Peut être une piste.

Sub TrouveFenetreExplorer()
'Ajouter une référence à Microsoft Internet Controls
Dim SW As ShellWindows
Dim IE As Object
Set SW = New ShellWindows
For Each IE In SW
If TypeName(IE.Document) = "HTMLDocument" Then
MsgBox IE.Document.URL
End If
Next IE
Set IE = Nothing
Set SW = Nothing
End Sub

Alain CROS

"Gloops" a écrit dans le message de news: 43fa3b89$0$18348$
| Bonjour tout le monde,
|
| Aucun problème pour accéder par DHTML à un document web par ouverture,
| par exemple
|
| Set IE = New InternetExplorer
| IE.Navigate "http://www.google.fr"
|
| (en ayant bien sûr pris soin de sélectionner shdocvw.dll dans les
| références)
|
| Mais si maintenant j'ai une fenêtre Internet Explorer déjà ouverte, et
| que je veux aller lire dedans ?
|
| Set O = GetObject("http://www.google.fr", "InternetExplorer.Application")
| Erreur 432, nom de fichier ou de classe non trouvé pendant l'opération.
|
| Set O = GetObject("http://www.google.fr", "")
| Erreur 429, le composant ActiveX ne peut créer l'objet
|
| Set O = GetObject("http://www.google.fr", vbNullString)
| Erreur 5, appel ou argument de procédure incorrect
|
| Je réussis à ouvrir un objet sur Internet Explorer en ne précisant pas
| d'URL, mais cet objet ne gère pas les collections windows et documents.
|
| Alors, faut-il fermer la fenêtre et rouvrir un navigateur sur la même
| adresse ?
|
| J'ai un navigateur de dialogue Yahoo qui ouvre des fenêtres Internet
| Explorer, lesquelles semblent prendre un malin plaisir à aller se cacher
| derrière. Alors, je les positionne correctement à gauche de la fenêtre
| Yahoo, grâce au hWnd et aux API, ça d'accord, mais alors ensuite les
| fenêtres ouvertes comportent des tableaux dont seule la deuxième colonne
| m'intéresse, et encore pas le haut. Alors j'aimerais bien faire défiler
| la fenêtre au bon endroit. Les propriétés DHTML me paraissent adaptées
| pour aller plus loin, mais j'ai tendance à trouver "ballot" de devoir
| ouvrir un deuxième exemplaire de chaque nouvelle fenêtre ouverte.
|
Avatar
Gloops
Ah, mais c'est que ça a l'air de marcher, ce truc.
Merci.

*

M'étonnerait que je sois le dernier à vouloir faire un truc de cet
acabit. Qu'est-ce qu'on mettrait bien comme mots-clefs pour retrouver ça ?
"Internet Explorer", fenêtre, objet ? Lier fenêtre à objet Internet
Explorer ?

Il en manque, je crois. Appel aux foules : si vous aviez eu ce problème
à résoudre, vous auriez cherché quoi ?

Rappel du problème : on a une fenêtre, on veut accéder à l'objet
Internet Explorer qui lui est lié, pour utiliser la technique DHTML.

Réponse : pour chaque valeur de IE dans le code d'Alain, on va pouvoir
comparer IE.document.Title à la valeur retournée par GetWindowText sur
l'hWnd de la fenêtre.

Avec quels mots-clefs va-t-on vouloir trouver ça ?
_________________________________________
Alain CROS a écrit, le 21/02/2006 16:18 :
Bonjour,

Peut être une piste.

Sub TrouveFenetreExplorer()
'Ajouter une référence à Microsoft Internet Controls
Dim SW As ShellWindows
Dim IE As Object
Set SW = New ShellWindows
For Each IE In SW
If TypeName(IE.Document) = "HTMLDocument" Then
MsgBox IE.Document.URL
End If
Next IE
Set IE = Nothing
Set SW = Nothing
End Sub

Alain CROS


Avatar
Alain CROS
Bonjour,

Déclarer IE as WebBrowser
puis utiliser IE.Hwnd

Alain CROS

"Gloops" a écrit dans le message de news: 43fb725e$0$19699$
|
| Ah, mais c'est que ça a l'air de marcher, ce truc.
| Merci.
|
| *
|
| M'étonnerait que je sois le dernier à vouloir faire un truc de cet
| acabit. Qu'est-ce qu'on mettrait bien comme mots-clefs pour retrouver ça ?
| "Internet Explorer", fenêtre, objet ? Lier fenêtre à objet Internet
| Explorer ?
|
| Il en manque, je crois. Appel aux foules : si vous aviez eu ce problème
| à résoudre, vous auriez cherché quoi ?
|
| Rappel du problème : on a une fenêtre, on veut accéder à l'objet
| Internet Explorer qui lui est lié, pour utiliser la technique DHTML.
|
| Réponse : pour chaque valeur de IE dans le code d'Alain, on va pouvoir
| comparer IE.document.Title à la valeur retournée par GetWindowText sur
| l'hWnd de la fenêtre.
|
| Avec quels mots-clefs va-t-on vouloir trouver ça ?
| _________________________________________
| Alain CROS a écrit, le 21/02/2006 16:18 :
| > Bonjour,
| >
| > Peut être une piste.
| >
| > Sub TrouveFenetreExplorer()
| > 'Ajouter une référence à Microsoft Internet Controls
| > Dim SW As ShellWindows
| > Dim IE As Object
| > Set SW = New ShellWindows
| > For Each IE In SW
| > If TypeName(IE.Document) = "HTMLDocument" Then
| > MsgBox IE.Document.URL
| > End If
| > Next IE
| > Set IE = Nothing
| > Set SW = Nothing
| > End Sub
| >
| > Alain CROS
|
Avatar
Gloops
Encore plus rapide, effectivement !

Et même avec ShellWindows ça marche.

Bon alors je regroupe le tout (enfin, façon de parler, s'agissant de
proposer deux modules) :

Premier module, modInternetExp
(((((((((((((((((((((((((((((((((((((((((((
Option Explicit
Public IE As InternetExplorer

Public Function NavigateurHwnd(hwnd As Long) As Object
Dim SW As ShellWindows
Set SW = New ShellWindows
For Each IE In SW
If IE.hwnd = hwnd Then
Debug.Print IE.Document.URL, , IE.hwnd
Set NavigateurHwnd = IE
'Set IE = Nothing
Set SW = Nothing
Exit Function
End If
Next IE
Set IE = Nothing
Set SW = Nothing

End Function
)))))))))))))))))))))))))))))))))))))))))))))

Deuxième module
((((((((((((((((((((((((((((((((((((((((((((
Option Explicit
Declare Function GetActiveWindow Lib "user32" _
Alias "GetActiveWindow" () As Long

Sub Main()
Dim IE As InternetExplorer
Set IE = NavigateurHwnd(GetActiveWindow)
MsgBox IE.Document.URL
' et les appels DHTML
End Sub
)))))))))))))))))))))))))))))))))))))))))))))

On dirait qu'il faut le compiler pour que GetActiveWindow fonctionne
mais ça c'est une autre question.

J'ai mis en commentaire Set IE = Nothing, c'est pour ça que j'ai déclaré
IE au niveau module, parce que je n'étais pas très sûr de moi quant à
passer le contenu d'une variable après l'avoir mise à Nothing.

Si aucune fenêtre Internet Explorer n'est ouverte il m'a semblé que ça
ne posait pas de problème, c'est pour ça que j'ai laissé le vidage de la
variable à la fin de la fonction. D'ailleurs, en toute logique, la
fonction devrait retourner Nothing dans ce cas, donc peut-être que
j'aurais dû déclarer la fonction en Variant.
_________________________________________
Alain CROS a écrit, le 22/02/2006 08:35 :
Bonjour,

Déclarer IE as WebBrowser
puis utiliser IE.Hwnd

Alain CROS