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 :

Gérer les chemins avec des dossiers contenant des underscores [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut Gérer les chemins avec des dossiers contenant des underscores
    Bonjour,

    Voilà j'ai un chemin qui contient des dossiers qui commencent par des underscores, désolé mais c'est pas moi qui est voulu écrire ces dossiers ainsi

    Du coup lorsque je souhaite lancer ce script :

    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
     
    Function RunBatchFile()
     
        Dim strCommand As String
        Dim lngErrorCode As Long
        Dim wsh As WshShell
        Set wsh = New WshShell
     
        ChDir "C:\users\me\___tmp"
        strCommand = "C:\users\me\___tmp\monscript.bat"
        lngErrorCode = wsh.Run(strCommand, WindowStyle:=0, WaitOnReturn:=True)
        If lngErrorCode <> 0 Then
            MsgBox "Oups !"
        End If
    End Function
    J'obtiens ce message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur d'exécution '-2147024894 (80070002)':
    Erreur Automation
    Le fichier spécifié est introuvable
    Je sais que le soucis vient du ___tmp\ car j'ai effectuer un test en créant un dossier tmp\ et le script fonctionne très bien.
    De plus j'ai cru comprendre que le underscore correspond à un caractère spécial dans VBA

    Comment résoudre ce problème ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Un truc qui me semble douteux dans ton code, c'est l'utilisation de Function.
    Pour moi, une fonction a pour unique usage de renvoyer une valeur, pas de faire une action.
    Or, ta Function ne renvoie aucune valeur mais en plus est remplie de commandes actives, ce qui ne me semble pas très indiqué.
    Je ne sais pas si c'est la cause de ton problème mais, à moins d'avoir une EXCELLENTE raison de conserver ça en Function, à ta place je le convertirais en Sub.

    De plus j'ai cru comprendre que le underscore correspond à un caractère spécial dans VBA
    L'underscore dans le VBE sert à indiquer qu'une ligne de code se prolonge sur la suivante.
    Mais, normalement, ce n'est pas activé quant l'underscore est entre guillemets.
    Et si c'était le cas, c'est l'éditeur lui-même qui t'indiquerait une faute de syntaxe.

    Tu peux commencer par vérifier si ça pose réellement problème.
    Essaye le code ci-dessous (j'ai rajouté deux lignes Debug.Print) :

    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
    Sub RunBatchFile()
        Dim strCommand As String
        Dim lngErrorCode As Long
        Dim wsh As WshShell
        Set wsh = New WshShell
     
        ChDir "C:\users\me\___tmp"
        strCommand = "C:\users\me\___tmp\monscript.bat"
     
        Debug.Print strCommand
        Debug.Print Dir(strCommand)
     
        lngErrorCode = wsh.Run(strCommand, WindowStyle:=0, WaitOnReturn:=True)
        If lngErrorCode <> 0 Then
            MsgBox "Oups !"
        End If
    End Sub
    Qu'est-ce que tu vois s'afficher dans la fenêtre d'exécution ?

  3. #3
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Pour moi, une fonction a pour unique usage de renvoyer une valeur, pas de faire une action.
    Je suis pas habitué avec VBA et ses pratiques, mais c'est logique car dans d'autres langages les fonctions ont la même utilité.

    est remplie de commandes actives
    C'est quoi les commandes actives ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Qu'est-ce que tu vois s'afficher dans la fenêtre d'exécution ?
    J'ai toujours le même message d'erreur et j'obtiens ceci dans la fenêtre d'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\users\me\___tmp\monscript.bat
    C'est la commande Debug.Print strCommand qui est affichée dans la fenêtre d'exécution pas la Debug.Print Dir(strCommand).

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    pas la Debug.Print Dir(strCommand).
    ce qui veut clairement dire que le chemin de fichier 'C:\users\me\___tmp\monscript.bat' n'existe pas.
    --->> Il n'est entre autres pas impossible que le nombre de "_" soit différent ou que le caractère "_" soit un autre caractère que le caractère 95

  5. #5
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour

    ce qui veut clairement dire que le chemin de fichier 'C:\users\me\___tmp\monscript.bat' n'existe pas.
    --->> Il n'est entre autres pas impossible que le nombre de "_" soit différent ou que le caractère "_" soit un autre caractère que le caractère 95
    Ok je crois savoir à quoi c'est dû. Je fais les tests en rentrant chez moi et je vous fait un retour.

    Encore merci pour vos réponses.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Tu ne serais pas en train d'essayer d'accéder aux répertoires user d'un utilisateur qui n'est pas celui logué au lancement de la macro ?

    Dans la fenêtre d'exécution directement, tape :
    Si ça plante, les "_" sont définitivement hors de cause.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gérer un chemin avec des espaces
    Par helaaa dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/03/2013, 19h15
  2. Réponses: 2
    Dernier message: 15/12/2009, 12h29
  3. Réponses: 4
    Dernier message: 29/08/2006, 18h02
  4. Réponses: 18
    Dernier message: 28/08/2006, 23h07

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