IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment télécharger des fichiers avec VBA ?


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut Comment télécharger des fichiers avec VBA ?
    Salut à tous,
    Travaillant sur un petit projet professionnel, je viens ici pour réclamer un peu d'aide

    Le but de mon projet se découpe ainsi:

    - Récupérer des .tgz contenant les .rar sur un poste disant
    o Se connecter au poste
    o Lister toutes les archives dans le répertoire
    o Transférer les fichiers


    - Dézipper les deux archives
    - Passer une moulinette

    Grace aux forum/tuto, j'ai pu réaliser mon projet. Malheureusement, je bloque sur un point: j'aimerais transférer des fichiers .tgz d'un poste distant vers mon poste de travail sous Windows en utilisant une macro VBA (2010).

    Manuellement, je télécharge les .tgz avec filezilla. Je rentre un login/pass, une adresse de serveur puis tout se passe bien.

    Avec VBA, je ne sais pas du tout comment faire. Auriez vous une piste ? Peut etre pourrais je piloter filezilla avec Shell ?

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Bonjour,

    peut-être avec ce tutoriel : VBA et développement Web

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse rapide

    Je vais jeter un coup d’œil

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonsoir,

    avec une API si utilise filezilla cela doit-être du ftp :

    http://access.developpez.com/sources...hiers#EnvoiFTP

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Ok, merci pour ta réponse.
    Je vais essayer cette méthode. Par contre, de quoi ai je besoin pour faire tourner ce script, hormis excel?
    Je ne crois pas avoir Access de base, et ton script nécessite un certain nombre de dll si je ne me trompe.

    Bon week end

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour,

    le code peu-être utilisé dans excel VBA sans modifications..

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    D'accord.
    J'ai encore quelques petites question concernant ce script:

    SiteWeb = l'adresse ip ou se trouve mes fichiers a rapatrier ?
    <ftp> = quelle est la différence avec la variable SiteWeb ?
    <username> = login du ftp ?
    <password> = pass du ftp ?"

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Oui c'est cela .. pour site web et ftp tu peu mettre la même chose ... en théorie le premier paramètre de InternetOpen et une chaîne définissant le programme appelant ...

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Avec VBA, je ne sais pas du tout comment faire. Auriez vous une piste ?
    Peut être avec cette Api
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Declare Function URLDownloadToFile& Lib "urlmon" Alias "URLDownloadToFileA" ( _
      ByVal pCaller&, ByVal szURL$, ByVal szFileName$, _
      ByVal dwReserved&, ByVal lpfnCB&)
     
     
    Sub DownloadUrlMon()
    ' Téléchargement depuis FTP avec mot de passe
    URLDownloadToFile 0, "ftp://login:pass@monftp.com/monfichier.tgz", ThisWorkbook.Path & "\monfichier.tgz", 0, 0   'adaptez "ftp://login:pass@monftp.com/monfichier.tgz"
    End Sub

  10. #10
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par bbil Voir le message
    Bonsoir,

    avec une API si utilise filezilla cela doit-être du ftp :

    http://access.developpez.com/sources...hiers#EnvoiFTP
    Salut à tous.
    Merci beaucoup à tous pour votre aide.

    J'ai pu m’atteler à cette Macro VBA ce week-end.

    Tout d'abord, j'ai tenté d'envoyer ou récupérer un fichier grâce à ton lien bbil. J'ai tenté d'envoyé un fichier .txt sur un serveur free, mais ça ne marche pas.

    D'ou ma nouvelle question:
    Cette partie de code:

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'positionnement du curseur dans le répertoire 
    FtpSetCurrentDirectory HwndConnect, "page_web/documents" 
     'Téléchargement de test.txt 
    FtpGetFile HwndConnect, "test.txt", "C:\WINDOWS\Bureau\test.txt", _
      False, 0, &H0, 0
    Permet de télécharger le fichier test.txt du serveur sur mon ordinateur ?

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FtpPutFile HwndConnect, "C:\windows\bureau\test.txt", "shwin.txt", &H0, 0
    'Envoi du fichier test.txt en le renommant shwin.txt sur le serveur
    Cette ligne de code envoie envoie le fichier "test.txt" sur le serveur free ?

    Désolé pour les questions. C'est dommage car je n'obtiens pas ce que je veux et je n'ai pas de messages d'erreurs.

    Bon week end

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonsoir,

    oui pour tes deux questions ... tu as utilisé quel code exactement ? poste le ici entre balise de code ...[CODE][/CODE]

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Concernant le dézipage de fichier, ça marche niquel. Grace à votre aide, voici mon code:

    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
     
     
    Declare Function OpenProcess Lib "kernel32" _
                                 (ByVal dwDesiredAccess As Long, _
                                  ByVal bInheritHandle As Long, _
                                  ByVal dwProcessId As Long) As Long
     
    Declare Function GetExitCodeProcess Lib "kernel32" _
                                        (ByVal hProcess As Long, _
                                         lpExitCode As Long) As Long
     
    Public Const PROCESS_QUERY_INFORMATION = &H400
    Public Const STILL_ACTIVE = &H103
     
    Public Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
        Dim hProg As Long
        Dim hProcess As Long, ExitCode As Long
        If IsMissing(WindowState) Then WindowState = 1
        hProg = Shell(PathName, WindowState)
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
        Do
            GetExitCodeProcess hProcess, ExitCode
            DoEvents
        Loop While ExitCode = STILL_ACTIVE
    End Sub
     
     
    Sub Dezipper()
     
    Dim CheminZip As String
    Dim DossierUnZip As String
    Dim FichierZip As Variant, ShellStr As String
     
    CheminZip = "C:\program files\7-Zip\"
     
    DossierUnZip = "C:\Documents and Settings\Propriétaire\"
    FichierZip = "C:\Documents and Settings\Propriétaire\Nouveau Document texte.rar"
    ShellStr = CheminZip & "7z.exe x -aoa -r" _
             & " " & Chr(34) & FichierZip & Chr(34) _
             & " -o" & Chr(34) & DossierUnZip & Chr(34) & " " & "*.*"
     
    ShellAndWait ShellStr, vbHide
     
    End Sub

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par bbil Voir le message
    Bonsoir,

    oui pour tes deux questions ... tu as utilisé quel code exactement ? poste le ici entre balise de code ...[CODE][/CODE]
    Voici le code que j'ai utilisé pour uploader ou downloader un fichier sur un serveur:

    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
    54
    55
     
    '-------------------
    '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
     
     
     
     
    'Envoi et réception d'un fichier
    Private Sub Commande27_Click()
    Dim HwndConnect As Long
    Dim HwndOpen As Long
    'Ouvre internet
    HwndOpen = InternetOpen("SiteWeb", 0, vbNullString, vbNullString, 0)
    'Connection au site ftp
    HwndConnect = InternetConnect(HwndOpen, "ftpperso.free.fr", 21, "admin", "pass", 1, 0, 0)
    'positionnement du curseur dans le répertoire
    FtpSetCurrentDirectory HwndConnect, "page_web/documents"
     'Téléchargement de test.txt
    FtpGetFile HwndConnect, "tttt.txt", "C:\Documents and Settings\Propriétaire\Bureau\Olivier\Macro Excel\Perso\Fonctions de base\12_Lire_un_serveur\tttt.txt", _
      False, 0, &H0, 0
     
    FtpPutFile HwndConnect, "C:\windows\bureau\test.txt", "shwin.txt", &H0, 0
    'Envoi du fichier test.txt en le renommant shwin.txt sur le serveur
     
    InternetCloseHandle HwndConnect 'Ferme la connection
    InternetCloseHandle HwndOpen 'Ferme internet
    End Sub
    Dans le code, j'ai remplacé mes vrais admin/password par admin et pass

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Ok super, ça marche maintenant sur mon ordi.

    Merci

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Petites questions subsidiaire. Est-il possible de lister les fichiers se trouvant sur mon serveur FTP ? Si oui, avec quelle commande puis-je faire cette opération ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/02/2009, 14h44
  2. Comment envoyer des fichiers avec winsock2 ?
    Par x-programer dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 08/02/2009, 08h29
  3. Réponses: 0
    Dernier message: 01/09/2008, 20h17
  4. Réponses: 1
    Dernier message: 25/10/2007, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo