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 :

Envoyer des données via FTP


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Envoyer des données via FTP
    Bonjour à tous

    je suis nouveau dans le forum et pas tres vieux dans l'outil Excel.voila ce qui m'ammene:
    Je travail sur un environement Excel 2003

    j'ai crée un reporting sous excel.Ce document est distribué a une vingtaine de poste voir plus au minimum.
    Pour ramasser les données je voudrais créer via un bouton un envois direct du document sur un serveur FTP.

    Plusieurs contraintes:
    -garder l'intitulé du document
    -envoyer de n'importe quel emplacement du disque ou est ouvert le fichier
    -pour eviter l'ecrasement de donnée sur le FTP,incrémenté le nom du fichier automatiquement avec le nom de l'utilisateur, date et heure.
    -au niveau de l'accés du FTP il y a un login et password,le tout via internet
    -et enfinla possibilité de copier la macro pour l'appliquer à un autre document excel


    depuis une semaine je bidouille des bout de codeque je recupere de part et d'autre ,mais honnetement je ne suis pas assez calé pour sniffer la solution.

    La seule chose sur laquelle j'ai abouti ,envoyer via un fichier defini et un fichier batch,une feuille avec le meme nom.Evidement quand je change de PC il faut réecrire les adresses dossiers.

    pour l'instant j'ai trouvé ça ,mais j'avoue ne pas savoir comment l'exploiter




    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
    Const FTP_TRANSFER_TYPE_UNKNOWN = &H0   'Type de transfert FTP auto 
    Const FTP_TRANSFER_TYPE_ASCII = &H1     'Type de transfert FTP ASCII 
    Const FTP_TRANSFER_TYPE_BINARY = &H2    'Type de transfert FTP Binaire 
    Const INTERNET_DEFAULT_FTP_PORT = 21    'Port FTP par défaut 
    Const INTERNET_SERVICE_FTP = 1          'Type de connextion Internet = FTP 
    Const INTERNET_FLAG_PASSIVE = &H8000000 'FTP Mode Passif 
    Const INTERNET_OPEN_TYPE_PRECONFIG = 0  'Connexion selon la config en base de registre 
    Const INTERNET_OPEN_TYPE_DIRECT = 1     'Connexion directe 
    Const INTERNET_OPEN_TYPE_PROXY = 3      'Connexion via proxy (à nommer) 
    Const INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4 'Connexion selon la config en base de registre, mais pas de connexion auto au proxy 
    Const MAX_PATH = 256                    'Taille maximum du buffer pour les chaînes de caractères 
    Const PassiveConnection As Boolean = True 'Pour définir le serveur FTP en mode passif 
     
    'Pour fermer tout handle de type Internet 
    Private Declare Function InternetCloseHandle Lib "wininet" (ByRef hInet As Long) As Long 
    'Pour créer la connexion de type Internet 
    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 
    'Pour créer une ouverture Internet sur laquelle on placera la connexion 
    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 
    'Pour mettre un fichier via FTP sur un serveur 
    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 
     
    Private Sub CommandButton1_Click() 
        Dim hOpen As Long 
        Dim hConnection As Long 
        Dim sLocalFileName As String 
        Dim sLocalTempFileName As String 
        Dim sDistantFileName As String 
     
        hOpen = InternetOpen("Mettre le nom de l'appli ou rien", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0) 
        hConnection = InternetConnect(hOpen, "nom du serveur", INTERNET_DEFAULT_FTP_PORT, "login", "mot de passe", INTERNET_SERVICE_FTP, IIf(PassiveConnection, INTERNET_FLAG_PASSIVE, 0), 0) 
     
        sLocalFileName = ThisWorkbook.Path & "\" & ThisWorkbook.Name 
        sLocalTempFileName = sLocalFileName & ".tmp" 
        sDistantFileName = "/apps/kycUAT/" & ThisWorkbook.Name 
     
        ThisWorkbook.SaveAs sLocalTempFileName 
        FileSystem.Kill sLocalFileName 
        ThisWorkbook.SaveAs sLocalFileName 
     
        If FtpPutFile(hConnection, sLocalTempFileName, sDistantFileName, FTP_TRANSFER_TYPE_BINARY, 0) Then 
            MsgBox "Transfert FTP de " & sLocalFileName & " réussi" 
        Else 
            MsgBox "Transfert FTP de " & sLocalFileName & " raté" 
        End If 
     
        FileSystem.Kill sLocalTempFileName 
     
        InternetCloseHandle hConnection 
        InternetCloseHandle hOpen 
    End Sub
    Est ce réalisable ?ou bien je passe à autre chose?

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Bonjour stef, bienvenue sur le forum
    Pour ce qui est d'internet, je ne pourrai pas t'aider. Par contre, pour les questions suivantes, on peut voir ça

    -garder l'intitulé du document
    Rien ne t'en empêche. Un "enregistrement d'une copy sous" (Savecopy as au lieu de saveas évite d'avoir à ré-ouvrir l'original)

    -envoyer de n'importe quel emplacement du disque ou est ouvert le fichier
    Si la macro est dans le document à envoyer, ThisWorkbook.path te donne son chemin. Sinon on peut le chercher sur le disque mais depuis une macro située dans un autre classeur (!)

    -pour eviter l'ecrasement de donnée sur le FTP,incrémenté le nom du fichier automatiquement avec le nom de l'utilisateur, date et heure.
    Quant tu dis "incrémenter", tu veux dire concaténer avec la nom de l'utilisateur et incrémenter un N° ?
    Pour concaténer, tu peux faire ça
    Environ("Username") te donne le nom de l'utilisateur de chaque poste, celui qu'il a pour ouvrir sa session.
    Filename = Left(Thisworkbook.name, instr(Thisworkbook.name,".")-1) & "_" & NomUser & "_" & date & ".xls"
    Pour incrémenter un N° existant, il faut avoir le N° précédent, auquel cas tu devras avoir ce N° quelque part, soit dans l'original de chaque poste, soit dans le nom du fichier... et, une fois incrémenté, l'insérer dans le nom.

    -au niveau de l'accés du FTP il y a un login et password,le tout via internet
    Je pense avoir vu passer une réponse sur le forum... Une recherche sur le forum, peut-être...

    -et enfin la possibilité de copier la macro pour l'appliquer à un autre document excelLe mieux serait que la macro serait dans un module isolé. Un export + un import depuis un classeur quelconque permet de transférer une macro d'un classeur à l'autre. Encore faut-il savoir dans quel répertoire exporter. Le mieux est de le créer sur la racine de C: qui existera quelque soit le poste.
    Pour exporter et importer des modules, le code est dans la FAQ et dans Contribuez Excel.

    Pour tes autres questions, je cède la place aux érudits d'internet, il y en a plein sur le forum

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Edit
    Pour le logon et le password, Cafeine propose une réponse ici http://www.developpez.net/forums/sho...26&postcount=9, mais tu l'as également dans la FAQ VBA-Excel

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour ouskel'nor
    Je te remercie pour ta réactivité
    je viens de regarder les liens proposés.N'y a t'il pas de difference entre l'internet expolerer et le FTP.Si je fais la comparaison aux lignes de codes que j'ai emise dans le post,ce n'est pas le meme principe.

    Les constante fonctionnent,la ou ça coince ,c'est a partir de"PRIVATE DECLARE FONCTION".
    La il serait plutot facher:

    erreur de compilation
    seul les commentaires peuvent apparaitre aprés END SUB,END FONCTIONet END PROPRIETE

    Est ce que les parametres sont au mauvais endroit?,y a t'il un manque de balise?
    La c'est trop pointu pour moi

    - quand je parlais d'incrémentation ,je voulais placer à la suite du label de la feuille le nom de l'utilisateur ,la date et l'heure.je continus à investiguer....

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    la ou ça coince ,c'est a partir de"PRIVATE DECLARE FONCTION".
    Là, il doit te manquer une référence -> Outils -> Références. Par contre, je ne sais pas laquelle.
    Il y aura bien quelqu'un pour te l'indiquer
    Bonne chance

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    les problémes sont resolus à 70%.
    -L'envois par FTP fonctionne à merveille,je plaçais ma macro apres "private sub".or tout le debut du texte ne sont que des constantes.Je ne savais pas que les constantes ne pouvaient etre dans les commandes.

    -le petit texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sLocalFileName = ThisWorkbook.Path & "\" & ThisWorkbook.Name 
        sLocalTempFileName = sLocalFileName & ".tmp" 
        sDistantFileName = "repertoire de destination" & ThisWorkbook.Name 
     
        ThisWorkbook.SaveAs sLocalTempFileName 
        FileSystem.Kill sLocalFileName 
        ThisWorkbook.SaveAs sLocalFileName
    me permet d'envoyer le fichier ,depuis l'emplacement ou il est placé.

    Jusque la

    il me reste un probleme:je cherche une solution pour que le nom d'utilisateur ,l'heure et la date apparaisse en plus de dans le titre du classeur.Ceci pour eviter d'écraser un classeur deja posé portant le meme nom...

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Avec SaveAs, si un homonyme existe, tu as le message d'Excel qui te prévient...
    En fait je ne comprends pas ta question : Qu'appelles-tu "le titre du classeur" ?

Discussions similaires

  1. envoyer des données via JMS
    Par boobaie dans le forum Général Java
    Réponses: 0
    Dernier message: 15/05/2013, 14h41
  2. Envoyer des données via un port USB
    Par bouraouimed dans le forum Administration système
    Réponses: 3
    Dernier message: 20/06/2011, 19h17
  3. Envoyer des données, via BlueTooth, depuis votre Pocket PC
    Par Thomas Lebrun dans le forum Contribuez
    Réponses: 0
    Dernier message: 29/12/2010, 10h54
  4. Envoyer des données, via BlueTooth, depuis votre Pocket PC
    Par Thomas Lebrun dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 23h18
  5. envoyer des données via POST
    Par sohaieb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/05/2010, 01h11

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