Bonjour,

Après avoir étudié le tuto se trouvant dans la FAQ pour récupérer un fichier sur un serveur ftp, j'ai toujours quelques soucis pour réaliser cette macro.

Ci-dessous ce que j'ai utilisé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
'-------------------
'Déclaration des API
'-------------------
Private Declare Function InternetCloseHandle Lib "wininet.dll" _
  (ByVal hInet As Long) As Integer
 
Private 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
 
Private 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
 
Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias _
"FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, _
ByVal lpszDirectory As String) As Boolean
 
Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
(ByVal hConnect 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
 
Private Declare Function FtpPutFile Lib "wininet.dll" Alias _
"FtpPutFileA" (ByVal hConnect As Long, ByVal lpszLocalFile As String, _
ByVal lpszNewRemoteFile As String, ByVal dwFlags As Long, _
ByVal dwContext As Long) As Boolean
 
 
'Réception d'un fichier
Private Sub recupfichierintegracsv()
 
Dim HwndConnect As Long
Dim HwndOpen As Long
'Ouvre internet
HwndOpen = InternetOpen("SiteWeb", 0, vbNullString, vbNullString, 0)
'Connection au site ftp
HwndConnect = InternetConnect(HwndOpen, "adresse du ftp", 21, _
  "nom d’utilisateur", "mot de passe", 1, 0, 0)
'positionnement du curseur dans le répertoire
FtpSetCurrentDirectory HwndConnect, "/Cognex"
'Téléchargement de Integra.csv
FtpGetFile HwndConnect, "Integra.csv", "C:\WINDOWS\Bureau\Integra.csv", _
  False, 0, &H0, 0
 
 
InternetCloseHandle HwndConnect 'Ferme la connection
InternetCloseHandle HwndOpen 'Ferme internet
End Sub

J'ai bien évidemment remplacé les zones 'adresse du ftp', 'nom d'utilisateur' et 'mot de passe' par mes données professionnelles.

Pour le moment, mon souci est le suivant :

Une fois mon module créé dans VBA, je ne le vois pas dans Excel (alors que j'ai déjà créé d'autres macros qui fonctionnent). j'ai l'impression que cela vient de la déclaration des API.

Si je garde uniquement la partie macro à partir de 'réception d'un fichier' je vois la macro dans excel (mais elle ne fonctionne pas ==> message d’erreur ‘sub ou function non définie pour la partie 'InternetOpen').

Si je remets la partie du haut pour ‘déclarer les api’, la macro n’apparait plus dans excel.

SI j'ai bien compris, sans cette déclaration la macro ne peut pas fonctionner, du coup je tourne en rond. (j’ai essayé de les mettre ailleurs dans le texte, mais du coup j’ai des messages d’erreur).

Pouvez-vous m'aider ?

Merci
Mélange