• Initiateur de la discussion Initiateur de la discussion ipotez
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ipotez

XLDnaute Occasionnel
Question peut être saugrenue mais je me demandais si il etait possible de programmer l'envoi d'un classeur Excel vers un FTP.

Merci de ne pas rire si c'est ridicule 😛
 
Re : Macro FTP

cool !!
je suis parti la dessus mais vu que je ne suis pas grand chose en vba, je bloque d'entrée là dessus:

Code:
Attribute VB_Name = "transfert_fich"
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 FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" ( _
     ByVal hFtpSession As Long, _
     ByVal lpszLocalFile As String, _
     ByVal lpszRemoteFile As String, _
     ByVal dwFlags As Long, _
     ByVal dwContext As Long) As Boolean
Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer

Ou dois je placer cette partie du code, dans un module avec le reste du code ? (désolé pr cette question de newbie)


je vous montre le code complet
Code:
Attribute VB_Name = "transfert_fich"



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 FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" ( _
     ByVal hFtpSession As Long, _
     ByVal lpszLocalFile As String, _
     ByVal lpszRemoteFile As String, _
     ByVal dwFlags As Long, _
     ByVal dwContext As Long) As Boolean
Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer


Sub ftp()
'transfère des fichiers du disque local vers un serveur ftp (upload, mode passif)

'PARAMETRES************************
fichier = "c:\rien.doc"
login = "zaza"
mot_passe = "miaou"
rép = "/"
bin_asc=&H2 '(&H1 ascii, &H2 binaire)
mode=&H8000000 '(&H8000000 mode passif, 0 mode actif)
'**********************************

'lancer le transfert
internet_ok = InternetOpen("PutFtpFile", 1, "", "", 0)
    If internet_ok = 0 Then
    MsgBox "connection internet impossible"
    Exit Sub
    End If
ftp_ok = InternetConnect(internet_ok, "ftpperso.free.fr", 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

'nom du fichier sans le chemin
    nomfich = fichier
    Do While InStr(nomfich, "\") > 0
    nomfich = Right(nomfich, Len(nomfich) - InStr(nomfich, "\"))
    Loop

'transférer le fichier
     succès = FtpPutFile(ftp_ok, fichier, nomfich,bin_asc, 0)
    If succès Then
    résult = nomfich & " a été transféré "
    Else
    résult = nomfich & " n'a pas pu être transféré"
    End If

'fermer les pointeurs, ménage
    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
 
Re : Macro FTP

Re 🙂,
Désolé, mais on ne peux pas être à ta disposition 24h/24 😡... N'oublie pas que nous sommes tous bénévoles et que c'est pour le plaisir d'aider que nous sommes là, pas pour se faire eng... 😱 !
J'ai cherché ce matin, mais je n'ai pas eu le temps de poster, il faut bien travailler 🙄...
A priori, il semblerait qu'il suffit juste de mettre la ligne Attribute en commentaire (avec un ' devant). Ce qui veux dire quelle sert à rien 😕. J'ai pas trouvé grand chose à ce sujet, ni sur le forum, ni sur le net en général (une explication un peu farfelue suivant laquelle ce serait la marque de fabrique de Frédéric Sigorneau, à voir ICI 😛). Je pense plutôt que c'est une référence qui n'est pas (plus) cochée, et que la ligne subsiste dans le texte des macros. J'ai l'intuition qu'il doit s'agir d'une déclaration d'espace de nom, afin de pouvoir utiliser ces fonctions dans un autre projet, mais le sujet est à creuser. Et d'après tout ce que j'ai lu, un module normal devrait faire l'affaire.
Bonne soirée 😎
 
Re : Macro FTP

Merci JNP, je vais tester ça demain

Quant à l'impression que j'ai peut être donné (bien malgré moi crois le bien), je m'en excuse.

Je me suis juste demandé si c'était trop teubé comme question.
J'ai demandé une formation vba au taf parce que j'en ai ras le bol de ne même pas avoir les bases de ce code, je pense qu'on est pas mal sur les différents forums à bricoler des codes et à bloquer sur des niaiseries.
Bref merci encore et merci à tous les participants de ce forum.
 
Re : Macro FTP

Re 🙂,
Désolé aussi, j'ai été un peu virulent, mais quand je vois, au sortir d'une journée de boulot par forcément marrante, ni reposante, quelqu'un qui se plaint de ne pas avoir sa réponse, alors qu'il y a déjà eu plusieurs réponses en 24h, sachant que certain fils peuvent ne pas en avoir du tout au bout de plusieurs jours, ça me chauffe un peu les oreilles 😛.
Bonne soirée en attendant le résultat de ton test, pour la formation, fait gaffe, les modules proposés en VBA ne sont pas toujours très adaptés... 😎
 
Re : Macro FTP

Ca fonctionne, moi qui voulait un outil utilisable par de grands débutants ! C'est parfait !

Par contre petite question syntaxe :
Dans cette partie du code, comment indiquer que j'ai plusieurs fichiers à Uploader ? Dois je tous les citer en les séparant par des virgules ou ya t il quelque chose de plus souple ? (en sachant qu'il y en a une petite vingtaine).
Merci

Code:
Sub ftp()
'transfère des fichiers du disque local vers un serveur ftp (upload, mode passif)

'PARAMETRES************************
fichier = "C:\Users\lulu\Desktop\pdfmail\12.pdf"
login = "tutute"
mot_passe = "pouetpouet"
rép = "/"
bin_asc = &H2 '(&H1 ascii, &H2 binaire)
Mode = &H8000000 '(&H8000000 mode passif, 0 mode actif)
'**********************************
 
Re : Macro FTP

Bonsoir à tous


Pour infos

Code:
Attribute VB_Name = "transfert_fich"


Ce type de ligne apparait lorsqu'on exporte un module dans VBE
(Fichier/Exporter)


Et cela indique juste le nom du module exporté


Ensuite si on copie le code dans VBE (CTRL+C/CTRL+V) au lieu de faire Fichier/Importer , il faut soit effacer cette ligne, soit la mettre en commentaire (comme suggéré par JNP 😉 )
 
Re : Macro FTP

Re 🙂,
@ JM : Ok, je comprends mieux (quand je disais que la réponse sur le fil était farfelue 😛). Par contre, ils auraient pu en toucher un mot dans l'aide 🙁...
Par contre petite question syntaxe :
Dans cette partie du code, comment indiquer que j'ai plusieurs fichiers à Uploader ? Dois je tous les citer en les séparant par des virgules ou ya t il quelque chose de plus souple ? (en sachant qu'il y en a une petite vingtaine).
S'il suffisait de les séparer par une virgule, là ça serait souple 😀...
Plusieurs solutions : utiliser une boite de dialogue pour choisir les fichiers ou saisir une liste avec un séparateur (la , si tu veux). Mais après, il faut stocker tout cela dans un tableau, boucler sur toutes les valeurs du tableaux et envoyer chaque valeur de chemin dans
Code:
'nom du fichier sans le chemin
    nomfich = fichier
    Do While InStr(nomfich, "\") > 0
    nomfich = Right(nomfich, Len(nomfich) - InStr(nomfich, "\"))
    Loop
 
'transférer le fichier
     succès = FtpPutFile(ftp_ok, fichier, nomfich,bin_asc, 0)
    If succès Then
    résult = nomfich & " a été transféré "
    Else
    résult = nomfich & " n'a pas pu être transféré"
    End If
en modifiant
Code:
résult = [COLOR=red]résult &[/COLOR] nomfich & " n'a pas pu être transféré" [COLOR=red]& VbCrLf[/COLOR]
pour récupérer tous les noms de fichiers et non uniquement le dernier en cas d'échec du transfert.
Bon courage 😎
 
Re : Macro FTP

Re 🙂,
Si tu va sur ce doc MSDN, tu ne trouves pour WinInet.dll au niveau du FTP que les classes suivantes
Code:
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I] 
[I]Ce lien n'existe plus[/I]
donc pas, à priori, de FtpPutDirectory...
Bon courage 😎
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
646
Réponses
1
Affichages
174
  • Question Question
Microsoft 365 problème d'index
Réponses
19
Affichages
498
Réponses
4
Affichages
481
Retour