Soyez le premier à donner votre avis sur cette source.
Vue 6 826 fois - Téléchargée 503 fois
Dim HTML_INFOS() As String Dim DocumentContent As String Private Sub CommandButton1_Click() Winsock1.Close HTML_INFOS = Split(Text1.Text, "/") Winsock1.Connect HTML_INFOS(0), 80 CommandButton1.Visible = False Label3.Caption = "Connection to server " & HTML_INFOS(0) Label3.Visible = True Text1.Enabled = False End Sub Function LoadingFinish() CommandButton1.Visible = True Label3.Visible = False Text1.Enabled = True End Function Private Sub Winsock1_Close() LoadingFinish MsgBox "Document chargé avec succés !", vbInformation + vbOKOnly, "Finit" ' Le document se trouve dans la variable DocumentContent ' cependant elle contient aussi les Headers du protocole HTTP End Sub Private Sub Winsock1_Connect() Dim ExcelDoc As String Label3.Caption = "Connexion établie - Attente du document" ExcelDoc = Join(HTML_INFOS, "/") Winsock1.SendData "GET http://" & ExcelDoc & " HTTP/1.1" & vbCrLf & vbCrLf DocumentContent = Empty End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Label3.Caption = "Document en cours de reception" Dim message As String Winsock1.GetData message DocumentContent = DocumentContent & message End Sub Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) MsgBox "Erreur de transfert : " & vbCrLf & vbCrLf & Description, vbCritical + vbOKOnly, "Erreur " & Number Winsock1.Close LoadingFinish End Sub
J'ai déjà eu ce probléme, alors l'astuce est simple, et pas trop compliquée à mettre en place :
On déclare le string qui va contenir tout le fichier :
Dim Buffer as string
On le dimensionne à la taille totale du fichier :
Buffer = space(Longeur de Fichier)
Puis on écrit dedans :
Mid(Buffer, Position d'écriture) = Texte à y inscrire ...
Pour ce genre de cas il faudrais avoir une variable de type Long pour savoir à quel emplacement du fichier on se trouve...
Bréf ce n'est que de la methodo, et en plus pour être minutieux il aurrais fallu être plus complet dans la requette Get, voir même donne que le répértoire et le nom de fichier, mais le code répond à un certain besoin donné, qui ne demande pas de gros fichiers, et dont le server accepte (j'espére) ce genre de requette "primitive" ...
Une alternative aurais été d'utiliser les api de windows, mais je ne suis pas sûr que ça passe dans les VBA (manque de practique), en tout cas, c'est une base pour débutter à télécharger des fichiers avec excel.
Par pur plaisir, et non par plagiat, voilà la fonction utilisée par API Guide pour télécharger un fichier :
Compatibilité : Requires Windows NT 4.0 or later; Requires Windows 95 or later
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
Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
If lngRetVal 0 Then DownloadFile True
End Function
Private Sub Form_Load()
'example by Matthew Gates (Puff0rz@hotmail.com)
DownloadFile "http://www.allapi.net", "c:allapi.htm"
End Sub
Bréf, walla si ça peut vous aider, j'en serais ravi, à +, et bonne prog, akh
lors de la reception de gros fichier a un debit important
le programme ralenti de maniere exponentiel due a
la concatenation des tampons. cela meme apres compilation
du projet.
Une solution consiste a utiliser un tableau de type byte
pre dimentionner selon le "Content-Length" et de copier
le tampon bout a bout
Bon je sait pas si je suis bien clair mais je voulais juste indiquer
ce probleme...
Peut importe
Bonne pr@g
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.