OVH Cloud OVH Cloud

accès à une page web

7 réponses
Avatar
jamillou
Bonjour,

Quelqu'un aurait-il une id=E9e de la fa=E7on dont on ouvre une=20
page web depuis un module VB?
Cette page web =E9tant le r=E9sultat de l'ex=E9cution d'un CGI-
bin, comment fait-on, toujours depuis un module VB, pour=20
l'enregistrer en tant que fichier excel dans un r=E9pertoire=20
donn=E9?
Merci d'avance de vos suggestions.
V=E9ronique

7 réponses

Avatar
ng
Salut,

Tu veux l'ouvrir dans un navigateur ? (Comme Internet Explorer (cf donc
automation IE et ShellExecute()) ?) ou simplement recuperer la source de la
page/télécharger un fichier ? (cf URLDownloadToFile()).

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



jamillou a écrit :

Bonjour,

Quelqu'un aurait-il une idée de la façon dont on ouvre une
page web depuis un module VB?
Cette page web étant le résultat de l'exécution d'un CGI-
bin, comment fait-on, toujours depuis un module VB, pour
l'enregistrer en tant que fichier excel dans un répertoire
donné?
Merci d'avance de vos suggestions.
Véronique


Avatar
François Picalausa
Hello,

je te conseille de jeter un oeil à l'API URLDownloadToFile:
Private Declare Function URLDownloadToFile _
Lib "urlmon" _
Alias "URLDownloadToFileA" _
( _
ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long _
) _
As Long

URLDownloadToFile(0,http://www.toto.com/url.exe?test=0,
"c:dossierfichier.htm", 0, 0)

Tu peux aussi voir du côté du webbrowser/internet explorer qui te permettra
de manipuler des tags html au travers de quelques objets.
WinInet (contrôle buggé ou API) permet aussi d'accéder à internet et de
transférer des données. Winsock aussi mais demande d'envoyer sois même les
requêtes.

Si le téléchargement est plutôt gros, tu peux obtenir des informations sur
la progression comme ceci:
Ajoute un usercontrol a ton projet qui contient ce code:
Option Explicit

Private mTarget As String

Public Event Progress(lngProgress As Long, lngProgressMax As Long)
Public Event StateChange(lngSate As Long, strState As String)
Public Event Complete(bSuccess As Boolean)

Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
'Si on a terminé le téléchargement
If AsyncProp.StatusCode = vbAsyncStatusCodeEndDownloadData Then
'on copie le fichier
FileCopy AsyncProp.Value, AsyncProp.PropertyName
End If

'Notifie le parent
RaiseEvent StateChange(AsyncProp.StatusCode, AsyncProp.Status)
RaiseEvent Complete(AsyncProp.StatusCode vbAsyncStatusCodeEndDownloadData)

mTarget = ""
End Sub

Private Sub UserControl_AsyncReadProgress(AsyncProp As AsyncProperty)
'On progresse
Select Case AsyncProp.StatusCode
's'il s'agit d'une notification de progression
Case vbAsyncStatusCodeDownloadingData
'on notifie l'utilisateur du contrôle
RaiseEvent Progress(AsyncProp.BytesRead, AsyncProp.BytesMax)
Case Else
'Sinon on informe du changement d'état
RaiseEvent StateChange(AsyncProp.StatusCode, AsyncProp.Status)
End Select
End Sub

Public Sub Cancel()
If Busy Then
UserControl.CancelAsyncRead mTarget
RaiseEvent Complete(False)
End If
End Sub

Public Property Get Busy() As Boolean
Busy = Len(mTarget)
End Property

Public Sub Download(URL As String, Target As String)
'un seul téléchargement à la fois
'pour cet exemple
If Busy Then Exit Sub

On Error GoTo errhandler

mTarget = Target
UserControl.AsyncRead URL, vbAsyncTypeFile, Target, 0

On Error GoTo 0

Exit Sub

errhandler:
mTarget = ""
RaiseEvent Complete(False)

'MsgBox "Une erreur s'est produite : " & Err.Description
End Sub



Tu peux ensuite le poser sur n'importe quelle feuille et l'appeler comme
ceci:
Private Sub Form_Load()
UserControl11.Download "http://...", "c:fichier.txt"
End Sub

Private Sub UserControl11_StateChange(lngSate As Long, strState As String)
If lngSate = 0 Then
MsgBox "Erreur !"
End If
End Sub


--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"jamillou" a écrit dans le
message de news:2cbf001c46a65$49078fd0$
Quelqu'un aurait-il une idée de la façon dont on ouvre une
page web depuis un module VB?


Avatar
Tout d'abord merci de répondre
Oui je veux récupérer la source de la page et
l'enregistrer en tant qu fichier .xls
-----Message d'origine-----
Salut,

Tu veux l'ouvrir dans un navigateur ? (Comme Internet


Explorer (cf donc
automation IE et ShellExecute()) ?) ou simplement


recuperer la source de la
page/télécharger un fichier ? (cf URLDownloadToFile()).

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



jamillou a écrit :

Bonjour,

Quelqu'un aurait-il une idée de la façon dont on ouvre




une
page web depuis un module VB?
Cette page web étant le résultat de l'exécution d'un




CGI-
bin, comment fait-on, toujours depuis un module VB, pour
l'enregistrer en tant que fichier excel dans un




répertoire
donné?
Merci d'avance de vos suggestions.
Véronique




.



Avatar
Bonjour,

Tout d'abord merci des infos.
Je viens donc d'essayer, mais le résultat donne une
erreur, en déclarant en haut du module "Private Declare
Function URLDownloadToFile(......) As long".
Voilà ce que j'ai écrit dans le module:
Private Sub telechargeDonnees()
Dim retour As Long
retour = URLDownloadToFile
(0, "http://www.brg.prd.fr", "c:OutilAP_Colfichier.htm",
0, 0)
If retour = 0 Then
MsgBox "erreur"
End If
End Sub
Y a-t-il une erreur quelque part?
Où pourrais-je trouver de la doc sur cette fonction?
A+
Véronique
-----Message d'origine-----
Hello,

je te conseille de jeter un oeil à l'API


URLDownloadToFile:
Private Declare Function URLDownloadToFile _
Lib "urlmon" _
Alias "URLDownloadToFileA" _
( _
ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long _
) _
As Long

URLDownloadToFile(0,http://www.toto.com/url.exe?test=0,
"c:dossierfichier.htm", 0, 0)

Tu peux aussi voir du côté du webbrowser/internet


explorer qui te permettra
de manipuler des tags html au travers de quelques objets.
WinInet (contrôle buggé ou API) permet aussi d'accéder à


internet et de
transférer des données. Winsock aussi mais demande


d'envoyer sois même les
requêtes.

Si le téléchargement est plutôt gros, tu peux obtenir des


informations sur
la progression comme ceci:
Ajoute un usercontrol a ton projet qui contient ce code:
Option Explicit

Private mTarget As String

Public Event Progress(lngProgress As Long, lngProgressMax


As Long)
Public Event StateChange(lngSate As Long, strState As


String)
Public Event Complete(bSuccess As Boolean)

Private Sub UserControl_AsyncReadComplete(AsyncProp As


AsyncProperty)
'Si on a terminé le téléchargement
If AsyncProp.StatusCode =


vbAsyncStatusCodeEndDownloadData Then
'on copie le fichier
FileCopy AsyncProp.Value, AsyncProp.PropertyName
End If

'Notifie le parent
RaiseEvent StateChange(AsyncProp.StatusCode,


AsyncProp.Status)
RaiseEvent Complete(AsyncProp.StatusCode =
vbAsyncStatusCodeEndDownloadData)

mTarget = ""
End Sub

Private Sub UserControl_AsyncReadProgress(AsyncProp As


AsyncProperty)
'On progresse
Select Case AsyncProp.StatusCode
's'il s'agit d'une notification de progression
Case vbAsyncStatusCodeDownloadingData
'on notifie l'utilisateur du contrôle
RaiseEvent Progress(AsyncProp.BytesRead,


AsyncProp.BytesMax)
Case Else
'Sinon on informe du changement d'état
RaiseEvent StateChange(AsyncProp.StatusCode,


AsyncProp.Status)
End Select
End Sub

Public Sub Cancel()
If Busy Then
UserControl.CancelAsyncRead mTarget
RaiseEvent Complete(False)
End If
End Sub

Public Property Get Busy() As Boolean
Busy = Len(mTarget)
End Property

Public Sub Download(URL As String, Target As String)
'un seul téléchargement à la fois
'pour cet exemple
If Busy Then Exit Sub

On Error GoTo errhandler

mTarget = Target
UserControl.AsyncRead URL, vbAsyncTypeFile, Target, 0

On Error GoTo 0

Exit Sub

errhandler:
mTarget = ""
RaiseEvent Complete(False)

'MsgBox "Une erreur s'est produite : " &


Err.Description
End Sub



Tu peux ensuite le poser sur n'importe quelle feuille et


l'appeler comme
ceci:
Private Sub Form_Load()
UserControl11.Download "http://...", "c:fichier.txt"
End Sub

Private Sub UserControl11_StateChange(lngSate As Long,


strState As String)
If lngSate = 0 Then
MsgBox "Erreur !"
End If
End Sub


--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"jamillou" a écrit


dans le
message de news:2cbf001c46a65$49078fd0$
Quelqu'un aurait-il une idée de la façon dont on ouvre




une
page web depuis un module VB?




.



Avatar
François Picalausa
Hello,

Tu pourra trouver la documentation à cette adresse:
http://apisvb.europe.webmatrixhosting.net/article.aspx?articleidV
ou
http://msdn.microsoft.com/workshop/networking/moniker/reference/functions/urldownloadtofile.asp

Le retour de 0 (S_OK) indique un succès.

La fonction retrourne l'une des valeurs suivantes:
E_OUTOFMEMORY : La longueur du buffer est invalide ou il y avait trop peu de
mémoire pour terminer l'opération.
S_OK : L'opération a réussi.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

a écrit dans le message de
news:2cd0801c46a73$9d350f20$
Bonjour,

Tout d'abord merci des infos.
Je viens donc d'essayer, mais le résultat donne une
erreur, en déclarant en haut du module "Private Declare
Function URLDownloadToFile(......) As long".
Voilà ce que j'ai écrit dans le module:
Private Sub telechargeDonnees()
Dim retour As Long
retour = URLDownloadToFile
(0, "http://www.brg.prd.fr", "c:OutilAP_Colfichier.htm",
0, 0)
If retour = 0 Then
MsgBox "erreur"
End If
End Sub
Y a-t-il une erreur quelque part?
Où pourrais-je trouver de la doc sur cette fonction?


Avatar
jamillou
Merci pour la doc.
Concernant mon code, le retour de la fonction est bien 0,
mais le fichier c:OutilAP_Colfichier.htm, n'est pas
créé, (répertoire lui était déjà existant)pourquoi?
A+
Véronique
-----Message d'origine-----
Hello,

Tu pourra trouver la documentation à cette adresse:
http://apisvb.europe.webmatrixhosting.net/article.aspx?


articleidV
ou
http://msdn.microsoft.com/workshop/networking/moniker/refe


rence/functions/urldownloadtofile.asp

Le retour de 0 (S_OK) indique un succès.

La fonction retrourne l'une des valeurs suivantes:
E_OUTOFMEMORY : La longueur du buffer est invalide ou il


y avait trop peu de
mémoire pour terminer l'opération.
S_OK : L'opération a réussi.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

a écrit dans le


message de
news:2cd0801c46a73$9d350f20$
Bonjour,

Tout d'abord merci des infos.
Je viens donc d'essayer, mais le résultat donne une
erreur, en déclarant en haut du module "Private Declare
Function URLDownloadToFile(......) As long".
Voilà ce que j'ai écrit dans le module:
Private Sub telechargeDonnees()
Dim retour As Long
retour = URLDownloadToFile





(0, "http://www.brg.prd.fr", "c:OutilAP_Colfichier.htm",
0, 0)
If retour = 0 Then
MsgBox "erreur"
End If
End Sub
Y a-t-il une erreur quelque part?
Où pourrais-je trouver de la doc sur cette fonction?




.



Avatar
Jamillou
Ne tiens pas compte de ma réponse précédante, c'est moi
qui donnais un chemin d'accès éronné à mon fichier de
stockage. La fonction marche très bien et répond
exactement au besoin.
Encore merci pour ton aide
Bonne fin de journée
Véronique
-----Message d'origine-----
Hello,

Tu pourra trouver la documentation à cette adresse:
http://apisvb.europe.webmatrixhosting.net/article.aspx?


articleidV
ou
http://msdn.microsoft.com/workshop/networking/moniker/refe


rence/functions/urldownloadtofile.asp

Le retour de 0 (S_OK) indique un succès.

La fonction retrourne l'une des valeurs suivantes:
E_OUTOFMEMORY : La longueur du buffer est invalide ou il


y avait trop peu de
mémoire pour terminer l'opération.
S_OK : L'opération a réussi.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

a écrit dans le


message de
news:2cd0801c46a73$9d350f20$
Bonjour,

Tout d'abord merci des infos.
Je viens donc d'essayer, mais le résultat donne une
erreur, en déclarant en haut du module "Private Declare
Function URLDownloadToFile(......) As long".
Voilà ce que j'ai écrit dans le module:
Private Sub telechargeDonnees()
Dim retour As Long
retour = URLDownloadToFile





(0, "http://www.brg.prd.fr", "c:OutilAP_Colfichier.htm",
0, 0)
If retour = 0 Then
MsgBox "erreur"
End If
End Sub
Y a-t-il une erreur quelque part?
Où pourrais-je trouver de la doc sur cette fonction?




.