CHARGER UN FICHIER SUR INTERNET À PARTIR D'EXCEL (METHODE AVEC WINSOCK)

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 - 18 nov. 2003 à 15:18
 Utilisateur anonyme - 18 nov. 2003 à 16:59
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18012-charger-un-fichier-sur-internet-a-partir-d-excel-methode-avec-winsock

Utilisateur anonyme
18 nov. 2003 à 16:59
Oui t'as totalment raison, c'est bien de l'avoir vu, j'aurais dû même le préciser, la concaténation de chaines en vb est trés longue, et la gestion des buffers est mal faite. Pour être plus précis , pour concaténer deux chaines vb crée un buffer de la taille total dans lequel il y met les deux chaines, donc ça peut passer encore pour quelques centaines de Ko, mais dépassé le MO il est vraiment lent.

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
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
18 nov. 2003 à 15:18
Ya un pb dans vb avec les tampons de type string dans winsock
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
Rejoignez-nous