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 :

Déclencher un script SHELL depuis VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Déclencher un script SHELL depuis VBA
    Bonjour,

    Je cherche a copier un fichier sur un serveur distant depuis mon application VBA.
    J'ai commencé par essayer de copier un fichier d'un dossier à un autre mais cela ne fonctionne pas

    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
     
     
    vUrlDeux = ThisWorkbook.Path & "\Automation\CAL\"
     
     'appel de la fonction qui permet de créer un dossier a la date du jour et les fichiers .cal
                newFileInFolder vNomFichierDeux, vUrlDeux, 1
     
     
                'Ouverture du fichier
                Open vUrlDeux & "calendrier_recette_mens.cal" For Output As #1
                ' j'écris dans mon fichier vUrlMen
                Print #1, vDateMen
                'fermeture du fichier
                Close #1
     
    Shell ("cp " & vUrlDeux & "calendrier_recette_mens.cal " & ThisWorkbook.Path)


    J'aurais besoin d'une aide pour pouvoir avancer

  2. #2
    Expert éminent sénior
    Citation Envoyé par joss_villiers Voir le message
    J'ai commencé par essayer de copier un fichier d'un dossier à un autre mais cela ne fonctionne pas
    Si tu es en Windows (donc un pseudo MS-DOS), l'instruction pour copier est COPY.
    CP, c'est pour Unix ou ses variantes.
    A lire : https://fr.wikipedia.org/wiki/Commande_DOS
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre du Club
    Citation Envoyé par Menhir Voir le message
    Si tu es en Windows (donc un pseudo MS-DOS), l'instruction pour copier est COPY.
    CP, c'est pour Unix ou ses variantes.
    A lire : https://fr.wikipedia.org/wiki/Commande_DOS

    J'ai utilsé COPY merci pour ton apport mais le problème mon script plante toujours au niveau de la fonction

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    Shell ("COPY " & vUrlDeux & "calendrier_recette_mens.cal " & ThisWorkbook.Path)


    pourtant je fais COPY urlFichier urlFichierCopie

    Je suis un peu perdu du coup

  4. #4
    Expert éminent sénior
    Déjà, essaye d'être un peu plus descriptif dans la description de ton dysfonctionnement que "cela ne fonctionne pas" ou "mon script plante".
    S'il y a un message d'erreur, il faut le donner.

    A ta place, juste avant cette ligne, je vérifierais ce que contient exactement cette chaine de caractère, par exemple avec un :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Debug.Print "COPY " & vUrlDeux & "calendrier_recette_mens.cal " & ThisWorkbook.Path


    Si tu ne vois pas de problème dans la chaine qui apparait dans la fenêtre d'exécution, essaye de la copier dans l'invite de commande MS-DOS pour voir s'il ne donne pas une indication plus explicite sur le problème.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre confirmé
    bonjour,
    quand je lis serveur distant, je comprend loin, je conclue FTP!

    j'ai commencé par essayer de copier un fichier d'un dossier à un autre mais cela ne fonctionne pas


    comment le fais tu à la main?

  6. #6
    Membre du Club
    Citation Envoyé par Menhir Voir le message
    Déjà, essaye d'être un peu plus descriptif dans la description de ton dysfonctionnement que "cela ne fonctionne pas" ou "mon script plante".
    S'il y a un message d'erreur, il faut le donner.

    A ta place, juste avant cette ligne, je vérifierais ce que contient exactement cette chaine de caractère, par exemple avec un :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Debug.Print "COPY " & vUrlDeux & "calendrier_recette_mens.cal " & ThisWorkbook.Path


    Si tu ne vois pas de problème dans la chaine qui apparait dans la fenêtre d'exécution, essaye de la copier dans l'invite de commande MS-DOS pour voir s'il ne donne pas une indication plus explicite sur le problème.
    Après vérification il n'y a pas de souci avec la chaîne de caractère je tester en ligne de commande.

  7. #7
    Membre du Club
    Citation Envoyé par Thumb down Voir le message
    bonjour,
    quand je lis serveur distant, je comprend loin, je conclue FTP!



    comment le fais tu à la main?

    Bonjour,

    Effectivement il s'agit d'un FTP

    Je créer un fichier.txt
    Je me connecter au ftp
    je copie le fichier.txt sur dans un dossier sur le serveur

    Voila ce que je dois faire mais j'essai déjà de copier le fichier.tx d'un dossier à un autre.

  8. #8
    Membre confirmé
    déjà es tu capable de faire un ficher bat qui fonctionne?

    https://www.developpez.net/forums/d1...l/#post7886239

  9. #9
    Expert éminent sénior
    Citation Envoyé par joss_villiers Voir le message
    Après vérification il n'y a pas de souci avec la chaîne de caractère je tester en ligne de commande.
    Ca veut dire que si tu copies cette chaine dans l'invite de commande par un simple copier/coller, l'exécution se passe sans problème et le fichier se copie correctement ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  10. #10
    Membre du Club
    Citation Envoyé par Menhir Voir le message
    Ca veut dire que si tu copies cette chaine dans l'invite de commande par un simple copier/coller, l'exécution se passe sans problème et le fichier se copie correctement ?
    Désolé de revenir que maintenant.

    Je suis finalement parvenu à copier un fichier sur un serveur SFTP en utilisant Putty

    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
     
     
    Public Sub SftpPut(ByVal urlFichier As String, ByVal nomFichier As String, ByVal identifiant As String, ByVal password As String)
     
        Const cstrSftp As String = """C:\Program Files (x86)\PuTTY\0.62\pscp.exe"""
        Dim strCommand As String
        Dim pUser As String
        Dim pPass As String
        Dim pHost As String
        Dim pFile As String
        Dim pRemotePath As String
        Dim resultShell As Double
     
     
     
        On Error GoTo ErrorHandler
     
        pUser = identifiant
        pPass = password
        pHost = "monUrl"
        pFile = urlFichier 
        pRemotePath = "/home/"
     
        strCommand = cstrSftp & " -pw " & pPass & " " & pFile & " " & pUser & "@" & pHost & ":" & pRemotePath
     
       'Lancement de la commande
       resultShell = Shell(strCommand, 1)
     
     
       Debug.Print resultShell
     
    ErrorHandler:
     
            If Err <> 0 Then
                MsgBox vbCrLf & Err.Description, , "Error"
     
            End If
     
    End Sub