Import d'un fichier txt situé sur un serveur FTP vers un disque local

Fred92

XLDnaute Nouveau
Bonjour à tous,

Voilà plusieurs heures que je passe sur le net pour trouver une réponse à mon problème sans aucun succès! Mon problème est, au moyen d'un code VBA, de réussir à importer un fichier se trouvant sur un serveur FTP vers mon disque local.

L'opération inverse se fait très facilement au moyen de l'API FtpPutFile (de nombreux contributeurs ont proposé du code VBA fonctionnant très bien). En revanche, en utilisant l'API FtpGetFile je n'obtiens aucun résultat. J'ai même par ailleurs désactivé le Pare-feu Windows pensant que le problème pouvait venir de là, mais sans aucun résultat pour autant.

Ainsi je vous livre le code que j'ai rédigé (et repris!) en espérant qu'un internaute aura la solution.

Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
ByVal sAgent As String, _
ByVal lAccessType As Long, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, _
ByVal lFlags As Long) As Long

Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _
ByVal hInternetSession As Long, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUsername As String, _
ByVal sPassword As String, _
ByVal lService As Long, _
ByVal lFlags As Long, _
ByVal lContext As Long) As Long

Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" ( _
ByVal hFtpSession As Long, _
ByVal lpszDirectory As String) As Boolean

Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" ( _
ByVal hFtpSession As Long, _
ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, _
ByVal fFailIfExists As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal dwFlags As Long, _
ByRef dwContext As Long) As Boolean

Public Sub ImportDepuisServeurFTP()

'PARAMETRES************************
Login = "Admin"
mot_passe = "masterkey"
rép = "\EXPORT\" 'Chemin du répertoire du serveur FTP où se trouve le fichier à importer
bin_asc = &H2 '(&H1 ascii, &H2 binaire)
mode = 0 '(&H8000000 mode passif, 0 mode actif)
'**********************************

Internet_OK = InternetOpen("", 1, "", "", 0)
If Internet_OK = 0 Then
MsgBox "connection internet impossible"
Exit Sub
End If

FTP_OK = InternetConnect(Internet_OK, "XXX.XXX.X.XX", 21, Login, mot_passe, 1, mode, 0)
If FTP_OK = 0 Then
MsgBox "Connection impossible"
Exit Sub
End If

sélect_rép = FtpSetCurrentDirectory(FTP_OK, rép)
If sélect_rép = 0 Then
MsgBox "impossible de trouver le répertoire "
Exit Sub
End If

'transférer le fichier
succès = FtpGetFile(FTP_OK, "NomduFichier.txt", "c:\NomduFichierdansDisqueLocal.txt", False, 0, &H0, 0)
If succès Then
résult = "\EXPORT\NomduFichier.txt a été transféré"
Else
résult = "\EXPORT\NomduFichier.txt n'a pas pu être transféré"
End If

' Ferme le handle de connection puis celui d'Internet
InternetCloseHandle FTP_OK
InternetCloseHandle Internet_OK

'annoncer le résultat de l'opération
If résult <> "" Then
MsgBox résult
Else
MsgBox "aucun fichier transféré"
End If

End Sub

Je remercie par avance toutes les personnes qui se seront panchées sur mon problème.

Bonne fin de journée.

Fred92
 

Fred92

XLDnaute Nouveau
Re : Import d'un fichier txt situé sur un serveur FTP vers un disque local

Re bonjour à tous,

J'ai finalement résolu le problème. En effet, mon disque C: étant protégé en écriture (autorisation seulement faite à l'utilisateur ayant le statut d'Administrateur), l'importation du fichier était systématiquement bloquée. En changeant de disque ou bien en permettant à toute utilisateur d'enregistrer des fichiers sur le disque C: le problème est résolu.

Bonne fin de journée à vous tous.

Fred92
 

Discussions similaires

Réponses
2
Affichages
2 K

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote