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 :

Commande shell ne marchant pas correctement en VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut Commande shell ne marchant pas correctement en VBA
    Bonjour,

    j'utilise une ligne de commande (tester avec l'invite de commande => résultat OK),
    permettant de connaître le nombre de ligne dans un fichier texte
    (je suppose qu'elle marche aussi avec les ".csv") :

    Code invite de commande : Sélectionner tout - Visualiser dans une fenêtre à part
    find /v /c "" < Path/fichier.txt

    Lorsque j'ai voulu l'utiliser en VBA via la commande Shell, j'ai eu des résultats complètement aléatoire.
    (pas de souci avec l'invite de commande)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto = Shell("Cmd.exe /C" & "find /v /c """" < " & """" & Path/fichier.txt & """", 0)
    1- Est ce que cette commande est fiable ?
    2- ai-je loupé quelque chose afin que la commande marche correctement

    Config : cession de démarrage Windows 10 Excel 2010 (je suis sur Mac sinon)

    Merci

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  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
    (sans certitude) essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto = Shell("Cmd.exe /C" & " FIND /v /c """" < Path/fichier.txt", 0)
    En supposant que Path/fichier.txt est un chemin écrit en dur et non des variables.

    Petit détail : sur Windows et Mac, ça ne peut bien sûr pas fonctionner avec la même syntaxe, au moins en ce qui concerne le chemin.

  3. #3
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Coucou Menhir,

    En Effet Path/fichier.txt est bien une variable, je l'ai écrit de cette façon pour que ce soit représentatif.
    Par contre j'ai noté que ton FIND est écrit tout en capital, c'est peut être cette petite différence qui joue sur le résultat …
    Dès que j'ai accès à un PC je tests, au pire je le ferai ce soir.
    Merci

    Edit :
    Petit détail : sur Windows et Mac, ça ne peut bien sûr pas fonctionner avec la même syntaxe, au moins en ce qui concerne le chemin.
    Pour cela pas de souci (toujours bien de le spécifier)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  4. #4
    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
    MS-DOS ne faisait pas de différences entre majuscules et minuscules. Il est donc peu probable que ça ait une incidence.

    Par contre, je crois plus à l'espace entre /C et find et à la suppression des train de ".

    Pour ce qui est de l'introduction de ta variable, j'ai de sérieux doutes.
    Mais comme tu ne donnes pas les infos sur le sujet, difficile d'en dire plus.

  5. #5
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,

    pour être dans le contexte voilà ce que l'on aurait dans le code concernant les variables - dans VBA :
    (j'ai doublé les guillemets au endroits nécessaires normalement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Chm = "C:\Users\UserName\Documents\MesFichiers\"
       NomFichier = "TITI.txt"
       toto = Shell("Cmd.exe /C" & "find /v /c """" < " & """" & Chm & NomFichier  & """", 0)
    Ce que j'ai dans l'invite de commande et qui marche (de tête j'ai pas de PC là):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /V /C "" < "C:\Users\UserName\Documents\MesFichiers\TITI.txt"
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  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
    Citation Envoyé par RyuAutodidacte Voir le message
    (j'ai doublé les guillemets au endroits nécessaires normalement)
    Je peux me tromper mais j'ai l'impression que dans le lot, il y en a quelques uns en trop.
    Je comprends la première série de 4 mais je comprends moins les suivants.

    A ta place, je mettrais tout ça dans une variable String intermédiaire pour pouvoir vérifier ce que ça donne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       Chm = "C:\Users\UserName\Documents\MesFichiers\"
       NomFichier = "TITI.txt"
       MaCommnade = "Cmd.exe /C" & "find /v /c """" < " & """" & Chm & NomFichier  & """"
       Debug.Print MaCommande
       toto = Shell(MaCommande, 0)
    Je peux encore me tromper mais il me semble que ça devrait plutôt ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       MaCommnade = "Cmd.exe /C" & " find /v /c """""" < " & Chm & NomFichier
    Le fait d'avoir une String intermédiaire te permettra de le vérifier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /V /C "" < "C:\Users\UserName\Documents\MesFichiers\TITI.txt"
    Es-tu sûr que les guillemets soient nécessaires pour encadrer le nom de fichier ?

    Si c'est le cas (ce dont je doute), la syntaxe serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       MaCommnade = "Cmd.exe /C" & " find /v /c """""" < " & """" & Chm & NomFichier  & """"

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

Discussions similaires

  1. [AC-2002] Commande "Shell" ne fonctionne pas
    Par pier.antoine dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/04/2010, 12h42
  2. [XL-2007] le tri ne se fait pas correctement en VBA
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/04/2009, 10h59
  3. Réponses: 4
    Dernier message: 10/09/2007, 19h54
  4. ORA-00933 la commande SQL ne se termine pas correctement
    Par habasque dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 09/12/2006, 14h41
  5. La commande sed ne prend pas ma variable du shell
    Par Michaël dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 03/10/2006, 19h11

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