DHTML sans le webbrowser

Le
Gloops
Bonjour tout le monde,

Je cherche à récupérer des infos d'un serveur (en fait des coordonn=
ées
de salariés dans un annuaire interne) afin de les exploiter dans une
base de données (Oracle avec frontal Access). Je les reçois via un
intranet sous Internet Explorer, en réponse à une recherche (chaque p=
age
est obtenue par clic sur la liste de résultats de recherche ; il y a
toutefois moyen de reconstituer les adresses des pages à obtenir).

Si je charge le document résultant dans Word pour en extraire les infos=

des cellules de tableaux, j'obtiens quelque chose d'exploitable (sous
réserve de la stabilité de la structure du document), mais avec
toutefois le gros handicap que dans Word (ou dans Excel d'ailleurs) le
document met plus de trente secondes à se charger (par individu).
Sachant que dans IE il met à peine deux secondes, je me dis que ça
serait probablement une meilleure idée d'ouvrir ça dans IE, la
difficulté devenant alors de sélectionner la fenêtre pour la traite=
r
dans l'application. En fait je n'ai guère que la bureautique sous le
coude, même pas de WebBrowser dans les références (possible, ça, =
ou j'ai
vraiment mal regardé ? Le navigateur est Internet Explorer 6.0)

Est-il possible de déclarer un objet DHtml sur une fenêtre Internet
Explorer, comme on fait d'habitude sur un WebBrowser ? Forcément ça s=
era
plus lourd comme syntaxe, mais je n'ai pas vraiment l'impression d'avoir =

le choix. Pas vu de référence DHTML, mais j'ai peut-être mal cherch=
é.
Ah, en revanche j'ai une collection de références xml (2.0, 2.6, 3.0,=

4.0, 5.0). Mais si je regarde là-dedans (avec la version 2.0), je vois =

le chargement depuis un fichier.

J'ai essayé ça :
Dim objetFSO As Scripting.FileSystemObject
Dim Fic As TextStream
Dim Doc As New MSXML.DOMDocument
Dim b As Boolean
Set objetFSO = CreateObject("Scripting.FileSystemObject")
Set Fic = objetFSO.OpenTextFile(<url>, ForReading)
Doc.loadXML Fic.ReadAll

mais à OpenTextFile on me dit nom ou numéro de fichier incorrect.
Pour ouvrir une URL, le TextStream n'a pas l'air d'être le bon filon. J=
e
mets quoi à la place ? ça pourrait être ça ma question, vu que ma=

première tentative a été de passer par un document Word, et que ç=
a s'est
avéré beaucoup trop lent.

Pour résumer j'ai essayé via Word, trop lent, pas trouvé la réfé=
rence
pour WebBrowser, j'essaierais bien de manipuler le document depuis
Internet Explorer si je trouve la syntaxe pour ça, ou encore la solutio=
n
la plus prometteuse est peut-être xml mais j'ai bêtement buté sur l=
a
lecture d'un fichier directement depuis son URL. Certes on pourrait me
parler de FTP mais avant de m'engager là-dedans j'aimerais que quelqu'u=
n
me confirme que c'est une voie adaptée, ou au contraire ait déjà vu=
que
c'était trop lourd par rapport au but.

Je commence par tâcher de me débrouiller avec ce que j'ai. Après,
j'essaierai de voir si il n'y a pas moyen d'accéder à la base source =

avec d'autres outils (quitte à passer par une fonction Java), mais ça=

suppose vraisemblablement des pesanteurs administratives, donc ça
pourrait motiver un autre fil, plus tard. L'intérêt sera alors de
s'assurer la stabilité de l'entrée de données (plutôt que de repo=
ser sur
une interface de sortie qui peut changer).

A défaut d'une bonne solution, question subsidiaire : quel serait le
meilleur newsgroup pour poser cette question ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
didier.lefebvre
Le #15359071
On 2 juil, 06:16, Gloops
Bonjour tout le monde,

Je cherche à récupérer des infos d'un serveur (en fait des coordonn ées
de salariés dans un annuaire interne) afin de les exploiter dans une
base de données (Oracle avec frontal Access). Je les reçois via un
intranet sous Internet Explorer, en réponse à une recherche (chaque p age
est obtenue par clic sur la liste de résultats de recherche ; il y a
toutefois moyen de reconstituer les adresses des pages à obtenir).

Si je charge le document résultant dans Word pour en extraire les infos
des cellules de tableaux, j'obtiens quelque chose d'exploitable (sous
réserve de la stabilité de la structure du document), mais avec
toutefois le gros handicap que dans Word (ou dans Excel d'ailleurs) le
document met plus de trente secondes à se charger (par individu).
Sachant que dans IE il met à peine deux secondes, je me dis que ça
serait probablement une meilleure idée d'ouvrir ça dans IE, la
difficulté devenant alors de sélectionner la fenêtre pour la traite r
dans l'application. En fait je n'ai guère que la bureautique sous le
coude, même pas de WebBrowser dans les références (possible, ça, ou j'ai
vraiment mal regardé ? Le navigateur est Internet Explorer 6.0)

Est-il possible de déclarer un objet DHtml sur une fenêtre Internet
Explorer, comme on fait d'habitude sur un WebBrowser ? Forcément ça s era
plus lourd comme syntaxe, mais je n'ai pas vraiment l'impression d'avoir
le choix. Pas vu de référence DHTML, mais j'ai peut-être mal cherch é.
Ah, en revanche j'ai une collection de références xml (2.0, 2.6, 3.0,
4.0, 5.0). Mais si je regarde là-dedans (avec la version 2.0), je vois
le chargement depuis un fichier.

J'ai essayé ça :
Dim objetFSO As Scripting.FileSystemObject
Dim Fic As TextStream
Dim Doc As New MSXML.DOMDocument
Dim b As Boolean
Set objetFSO = CreateObject("Scripting.FileSystemObject")
Set Fic = objetFSO.OpenTextFile(<url>, ForReading)
Doc.loadXML Fic.ReadAll

mais à OpenTextFile on me dit nom ou numéro de fichier incorrect.
Pour ouvrir une URL, le TextStream n'a pas l'air d'être le bon filon. J e
mets quoi à la place ? ça pourrait être ça ma question, vu que ma
première tentative a été de passer par un document Word, et que ç a s'est
avéré beaucoup trop lent.

Pour résumer j'ai essayé via Word, trop lent, pas trouvé la réf érence
pour WebBrowser, j'essaierais bien de manipuler le document depuis
Internet Explorer si je trouve la syntaxe pour ça, ou encore la solutio n
la plus prometteuse est peut-être xml mais j'ai bêtement buté sur l a
lecture d'un fichier directement depuis son URL. Certes on pourrait me
parler de FTP mais avant de m'engager là-dedans j'aimerais que quelqu'u n
me confirme que c'est une voie adaptée, ou au contraire ait déjà vu que
c'était trop lourd par rapport au but.

Je commence par tâcher de me débrouiller avec ce que j'ai. Après,
j'essaierai de voir si il n'y a pas moyen d'accéder à la base source
avec d'autres outils (quitte à passer par une fonction Java), mais ça
suppose vraisemblablement des pesanteurs administratives, donc ça
pourrait motiver un autre fil, plus tard. L'intérêt sera alors de
s'assurer la stabilité de l'entrée de données (plutôt que de repo ser sur
une interface de sortie qui peut changer).

A défaut d'une bonne solution, question subsidiaire : quel serait le
meilleur newsgroup pour poser cette question ?



Avec Office 2000, XP et IE6 pour utiliser un webbrowser, les
références à activer sont :
- Microsoft HTML Object Library (C:WINNTsystem32MSHTML.TLB)
- Microsoft Internet Controls (C:WINNTsystem32shdocvw.dll)

Tu peux aussi très bien manipuler le document affiché dans une fenêtr e
d'IE avec les objets de MSHTML. Le plus simple est probablement de
créer sa propre instance d'Internet Explorer et de capturer
l'évènement DocumentComplete.

Mais dans ton cas, j'attaquerais directement la base source (ton
annuaire) depuis la base Oracle ou depuis VBA et ADO si il y a un
driver de disponible.
Gloops
Le #16313221
Bonjour,

Pour finir mon client s'est farci l'import à la main, du coup, avec mon
emploi du temps fourni je n'ai plus pensé à venir voir. Ce serait qua nd
même bien que je finisse par trouver quelque chose de plus viable pour
une mise à jour.

a écrit, le 04/07/2008 09:31 :
Avec Office 2000, XP et IE6 pour utiliser un webbrowser, les
références à activer sont :
- Microsoft HTML Object Library (C:WINNTsystem32MSHTML.TLB)
- Microsoft Internet Controls (C:WINNTsystem32shdocvw.dll)



Ah, avec des références précises, je vais bien voir ce que ça va
répondre, merci.


Tu peux aussi très bien manipuler le document affiché dans une fenê tre
d'IE avec les objets de MSHTML. Le plus simple est probablement de
créer sa propre instance d'Internet Explorer et de capturer
l'évènement DocumentComplete.



C'est ce que j'essayais de faire, au départ. J'obtiens l'objet par un
CreateObject, qu'est-ce que je lui donne comme argument, le titre de la
fenêtre ? Et un type d'objet, aussi, peut-être ?


Mais dans ton cas, j'attaquerais directement la base source (ton
annuaire) depuis la base Oracle ou depuis VBA et ADO si il y a un
driver de disponible.




Oui, bien entendu, c'est à ça que je penserais bien en premier. L'enn ui
quand on est recruté en intérim par l'utilisateur, c'est que la DOSI ne
collabore pas toujours aussi bien que si on en faisait partie. Après,
bien entendu, une fois que je saurais ce que c'est comme base, à quelle
adresse, et que je serais sûr d'avoir les droits pour l'attaquer avec l e
protocole que je veux ...

Si je finis en avance sur mon développement lui-même, c'est probablem ent
comme ça que ça va finir, sous réserve de trouver les bons
interlocuteurs, et ... les bons arguments :) .

En tout cas merci pour cette réponse, et pardon d'y répondre si tardi vement.
didier.lefebvre
Le #16332061
On 13 juil, 08:26, Gloops
> Tu peux aussi très bien manipuler le document affiché dans une fen être
> d'IE avec les objets de MSHTML. Le plus simple est probablement de
> créer sa propre instance d'Internet Explorer et de capturer
> l'évènement DocumentComplete.

C'est ce que j'essayais de faire, au départ. J'obtiens l'objet par un
CreateObject, qu'est-ce que je lui donne comme argument, le titre de la
fenêtre ? Et un type d'objet, aussi, peut-être ?



Un petit exemple en VBA d'Excel 2000 par exemple avec les références
- Microsoft HTML Object Library (C:WINNTsystem32MSHTML.TLB)
- Microsoft Internet Controls (C:WINNTsystem32shdocvw.dll)

Une classe que je nomme cIE :

Option Explicit

Public Event DocComplete()
Private WithEvents m_IE As InternetExplorer
Private m_hDoc As MSHTML.HTMLDocument

Public Sub NavigateTo(sUrl As String)
m_IE.Navigate2 sUrl
End Sub

Public Property Get hDoc() As MSHTML.HTMLDocument
Set hDoc = m_hDoc
End Property

Private Sub Class_Initialize()
Set m_IE = New InternetExplorer
End Sub

Private Sub Class_Terminate()
Set m_IE = Nothing
Set m_hDoc = Nothing
End Sub

Private Sub m_IE_DocumentComplete(ByVal pDisp As Object, URL As
Variant)
If Not (pDisp Is m_IE) Then
Exit Sub
End If

Set m_hDoc = m_IE.Document
RaiseEvent DocComplete
End Sub


Utilisation depuis un UserForm :

Option Explicit

Private WithEvents m_cIE As cIE
Private m_hDoc As MSHTML.HTMLDocument

Private Sub CommandButton1_Click()
m_cIE.NavigateTo "http://www.google.fr/"
End Sub

Private Sub m_cIE_DocComplete()
Set m_hDoc = m_cIE.hDoc
MsgBox m_hDoc.Title
End Sub

Private Sub UserForm_Initialize()
Set m_cIE = New cIE
End Sub

Private Sub UserForm_Terminate()
Set m_cIE = Nothing
Set m_hDoc = Nothing
End Sub
Gloops
Le #16397861
Ah, ça fait un moment que je ne suis plus venu.

Le test de ma messagerie que je viens de réinstaller est une occasion d e
découvrir ta réponse :)

Pour l'exemple qui m'a amené à poser la question on s'est organisé
autrement, mais il est fort probable que la question reviendra sur le tap is.

Quand est-ce que je vais tester ça ... ?
Dans un peu plus de deux semaines, probablement.
Mes utilisateurs seront partis en vacances, donc je tente de leur
refiler un maximum de tests à pratiquer avant sur leur base de donnée s
(pas celle d'où on tire l'annuaire, l'autre, celle que je développe).

Peut-être seras-tu parti aussi ?
Bonnes vacances alors.
Bon, dans ce cas on en reparle à la rentrée. :)

Merci pour le tuyau.
______________________________________________________
a écrit, le 15/07/2008 17:37 :
Un petit exemple en VBA d'Excel 2000 par exemple avec les référence s
- Microsoft HTML Object Library (C:WINNTsystem32MSHTML.TLB)
- Microsoft Internet Controls (C:WINNTsystem32shdocvw.dll)

Une classe que je nomme cIE :


Publicité
Poster une réponse
Anonyme