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 :

Permission Denied (error 70) sur appel à cmd


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Juin 2015
    Messages : 17
    Par défaut Permission Denied (error 70) sur appel à cmd
    Bonjour,

    Après avoir fait moult recherches et essais, je me résigne à demander de l'aide.

    Ci-dessous un code fort simple permettant de reproduire l'erreur chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub test()
        Dim wsh As Object
        Set wsh = VBA.CreateObject("WScript.Shell")
        Dim waitOnReturn As Boolean: waitOnReturn = True
        Dim windowStyle As Integer: windowStyle = 1
        Dim test
     
        test = wsh.Run("cmd /C dir *.*", windowStyle, waitOnReturn)
     
    End Sub
    A l'exécution sur un windows 7 installé sur un ordi boulot, j'ai l'erreur 70.
    A l'exécution sur un windows 10 personnel, tout se passe bien.

    J'ai tenté de désactiver l'UAC => ça ne change rien.
    J'ai tenté de modifier les droits d'accès au cmd.exe dans le Syswow64 => je n'ai pas les droits pour modifier les autorisations.
    J'ai tenté de copier le cmd.exe dans mon répertoire courant => ça ne change rien.

    J'ai lancé un monitoring de process pour m'assurer que le problème vient bien du cmd.exe => oui, c'est confirmé.

    Auriez-vous une idée sur comment résoudre mon problème ?

    Bien à vous,

    Laurent,

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Déjà :
    1) si ceci exécuté en ligne de commande :
    conduit au même message -->> rien à voir avec VBA et tout avec la configuration de la machine
    2) si le 1 fonctionne : à voir avec le responsable informatique car cela signifierait qu'il a empêché l'utilisation de WScript.Shell
    3) quel est le répertoire en cours lors du message d'erreur ? (il est peut-être affublé d'attributs n'en permettant pas l'accès)

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Ce n'est pas la réponse à la question, mais si votre besoin est d'accéder aux structures fichiers / répertoires, vous pouvez le faire sans passer par des commandes de script shell mais en utilisant le File System Object, qui est natif sous VBA, il faut juste ajouter la référence au 'Microsoft Scripting Runtime'
    Bonne continuation

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour vinc_bilb

    vous pouvez le faire sans passer par des commandes de script shell mais en utilisant le File System Object, qui est natif sous VBA, il faut juste ajouter la référence au 'Microsoft Scripting Runtime'
    Sauf que si l'hypothèse exprimée par mon 2) est ce qu'a décidé le responsable informatique, il aura très probablement également inhibé VBS.

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour vinc_bilb



    Sauf que si l'hypothèse exprimée par mon 2) est ce qu'a décidé le responsable informatique, il aura très probablement également inhibé VBS.
    => Merci, Très juste, mais ça devrait permettre de vérifier si c'est un pb de droits utilisateurs ou d'accès au disque/répertoire
    Voir http://warin.developpez.com/access/fichiers/#LI-C-3 pour les détails du FSO, qui, quand il est accessible, reste assez puissant

  6. #6
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Juin 2015
    Messages : 17
    Par défaut
    Merci pour ton retour si rapide.

    Le 1) fonctionne.
    Le 2) est ce qui m'inquiète, car je n'aurais pas facilement accès à mon responsable informatique. Je suis dans une boite de plusieurs dizaine de milliers de personnes. Nous sommes censé avoir les droits admin sur la machine, sauf certains paramètres qui sont "grisés". Ma question reviendrait donc à "puis-je contourner le problème" ?
    3) => Que veux-tu dire par "répertoire en cours lors de l'erreur" ?
    - Mon fichier excel est dans un répertoire dédié, sur le bureau, qui dispose de tous les droit d'écriture.
    - Le fichier cmd.exe qui est exécuté est dans le sysWow64. Qui est limité, mais que je ne peux modifier.
    - Si je déplace le cmd.exe dans mon répertoire dédié, je vois bien que le cmd exécuté est celui de "mon" répertoire, mais ça ne change rien au problème d'exécution.

    Pour info pour ceux qui connaîtrait QTP : un collègue arrive à exécuter mon script s'il le lance depuis un environnement QTP (il a le même pb que moi s'il lance depuis excel). N'y a t il pas moyen de créer une "bulle" de privilège qui permettrait de lancer l'exécution depuis excel ?
    J'ai tenté d'exécuter excel en mode "administrateur", mais je n'ai pas eu plus de succès.

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ma question reviendrait donc à "puis-je contourner le problème" ?
    Si inhibition, seule sa ré-autorisation le rendra disponible. Et cela ne relève que de la décision de ceux en charge de la sécurité, dont le responsable informatique
    Que veux-tu dire par "répertoire en cours lors de l'erreur" ?
    le curdir, pardi ! Quel est-il ?

  8. #8
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Juin 2015
    Messages : 17
    Par défaut
    Quelle réactivité de la communauté, je suis impressionné ! merci !

    Alors, dans l'ordre :

    - si votre besoin est d'accéder aux structures fichiers / répertoires, (...)
    => mon besoin n'est pas celui là. La commande "dir" avait juste pour objectif d'avoir quelque chose de simple. La finalité est d'exécuter une commande python avec tout un tas de paramètre variabilisé.

    - le curdir, pardi ! Quel est-il ?
    => n'étant pas un "VBA man", je ne connaissais pas cette commande. Elle me donne le répertoire suivant : "c:\Documents". Faut-il que je change pour mettre l'emplacement de mon script ?

    - Si inhibition, seule sa ré-autorisation le rendra disponible. Et cela ne relève que de la décision de ceux en charge de la sécurité, dont le responsable informatique
    => Avez-vous une idée du type de droit qu'il faut demander ? Je ne pense pas que ce soit tout le vba qui soit désactivé, car si je faire un "run" pour ouvrir notepad, ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim objShell
        Set objShell = CreateObject("shell.application")
        objShell.ShellExecute "notepad.exe", "", "", "open", 1
    En alternative, j'ai tenté de mettre ma commande dans un "start.bat", et de lancer ce start.bat. Mais j'obtiens une erreur proche du Permission Denied. Plus précisément, j'ai le message suivant : "Windows ne permet pas d'accéder au périphérique (...). Vous ne disposez peut être pas des autorisations appropriées pour avoir accès à l'élément".

  9. #9
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Juin 2015
    Messages : 17
    Par défaut
    Bonjour,

    Juste pour information, je n'ai plus besoin d'aide sur ce problème.
    Je n'ai pas trouvé de solution (donc je ne mets pas "résolu"), mais j'ai contourné.

    Pour ceux que ça intéressent : mon besoin premier était d'utiliser le module xlwings avec Python. C'est ce module qui demandait l'accès en ligne de commande, pour envoyer le script à l'interpréteur Python.
    En passant par le mode "UDF" de ce module, je n'ai plus de problème.

    C'est juste au cas où ça aiderait un passant perdu qui aurait le même problème :-).

    Cordialement,

Discussions similaires

  1. [ByRef Error] Erreur Bizarre sur appel de sub
    Par |DUCATI| DesMo dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/05/2007, 11h10
  2. "Permission denied" sur certains dossiers
    Par mikool19 dans le forum Apache
    Réponses: 3
    Dernier message: 31/10/2006, 13h57
  3. [VB6] Error 70: Permission denied
    Par pom dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 08/03/2006, 18h56
  4. [Système] fopen()Permission denied sur Apache
    Par manaboko dans le forum Langage
    Réponses: 9
    Dernier message: 15/09/2005, 17h08
  5. Linux error :13: Permission Denied
    Par manue85 dans le forum Oracle
    Réponses: 11
    Dernier message: 31/03/2005, 16h53

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