Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 shell dans vba et les espaces

macseb

XLDnaute Nouveau
Salut tout le monde,

Je viens chercher de l'aide, J'ai déjà ratissé large mais sans succès. Je souhaiterais utiliser une commande shell dans vba pour lancer VLC et jouer un fichier précis.
Mon code est donc de ce type:
VB:
PID = Shell("C:/Program Files (x86)/VideoLAN/VLC/vlc.exe D:/Bureau/Vidéothèque/Anniv julie/Vidéos/001 - James Bond (Thème Du Film).mp3")
Le shell me lance bien VLC mais VLC m'affiche une erreur m'indiquant qu'il ne trouve pas le fichier indiqué, tout simplement comme le dossier "Anniv julie" contient un espace il considère ca comme la fin de la commande.
J'ai beau avoir essayé de remplacer les espaces du chemin vers mon fichier avec des %20, des ^, des ` et des \ rien à faire ca ne fonctionne pas...
Je vois plus trop quoi faire et je ne veux pas m'amuser à supprimer les espaces de tous les fichiers sons, je tiens à conserver ces espaces.

Est-ce que quelqu'un aurait une botte secrète s'il vous plait?
 
Solution
re
et pour compléter l'intérogation de @TooFatBoy
n'y aurait il pas des caractères particuliers dans le nom du fichier
car en ligne de commande ca peut jouer des tours

le mieux pour ne pas te tromper c'est d'aller dans le dossier de ton fichier
click droit en restant appuyé sur la touche MAJ
et là ton menu contextuel apparait mais avec un item en plus
l'item "copier le chemin d'accès"
tu click et tu vas dans ton vbe et tu colle dans ton code après l'exe

macseb

XLDnaute Nouveau
Alors oui excusez moi, j'ai oublié de répondre à votre question. Je suis bien sur windows et le chemin d'accès est correct, j'ai effectivement un lecteur D: ou j'ai déplacé mon dossier bureau de Windows. J'ai tjs fais ça pour ne pas surcharger le C: d'une part ( car sur le bureau on y dépose souvent pas mal de chose) et pour qu'en qu'à de crache, bug ou formatage du C: j'ai tjs mes documents du bureau sauvegardés sur le D:
voilà pour les éclaircissements, concernant mon problème, avec l'utilisation des doubles guillemets, les erreurs affichées par VLC disparaissent mais le fichier ne s'exécute pas pour autant. En gros VLC est lancé mais sans fichier a lire...
 

TooFatBoy

XLDnaute Barbatruc
Autrefois je déplaçais le Bureau, mais pour l'instant j'ai abandonné cette façon de procéder.

Merci pour tes éclaircissements.
Je réitère toutefois ma question : es-tu certain que le chemin du fichier est le bon ?
 

patricktoulon

XLDnaute Barbatruc
re
et pour compléter l'intérogation de @TooFatBoy
n'y aurait il pas des caractères particuliers dans le nom du fichier
car en ligne de commande ca peut jouer des tours

le mieux pour ne pas te tromper c'est d'aller dans le dossier de ton fichier
click droit en restant appuyé sur la touche MAJ
et là ton menu contextuel apparait mais avec un item en plus
l'item "copier le chemin d'accès"
tu click et tu vas dans ton vbe et tu colle dans ton code après l'exe
 

job75

XLDnaute Barbatruc
Bonjour macseb, TooFatBoy, Patrick,

Je n'ai pas beaucoup utilisé la fonction Shell mais quand je l'utilise :

- le chemin du fichier est à la suite de celui de l'application sans guillemets supplémentaires

- j'ajoute vbNormalFocus pour mettre l'application au 1er plan.

A+
 

patricktoulon

XLDnaute Barbatruc
@job75 les guillemets sont obligatioire quand il y aplusieurs mots séparés par un espace dans le nom
c'est valable avec shell, run, exec et cmd
 

dysorthographie

XLDnaute Accro
Bonjour,
Code:
PID = Shell("'C:/Program Files (x86)/VideoLAN/VLC/vlc.exe' 'D:/Bureau/Vidéothèque/Anniv%20julie/Vidéos/001%20-%20James%20Bond%20(Thème%20Du%20Film).mp3'")
Je pense que VLC attend une URL pas un chemin Windows, à vérifier mais je suis convaincu qu'il faut remplacer les espaces par des %20?????
 

patricktoulon

XLDnaute Barbatruc
re
l'espace est un caractères de programmation( souvent accompagné de "/" qui est lui même un caractère d'échappement ou de paramétrage en bath/CMD en ligne de commande quoi)

donc quand tu code
shell(" mon exe monfichier super music.mp3")

Alors le shell tente de te lancer
  1. ton exe monfichier
  2. ton exe super
  3. ton exe music.mp3
ces fichiers il ne peut les trouver bien entendu
quand tu met les guillemets c'est tout la chaine qui est prise en compte
en ligne de commande l'exe ne doit pas être entouré de guillemets
c'est une règle d'or

Bonjour Robert
non ça ne peut pas fonctionner
edit: je viens de tester et ça ne fonctionne pas
 

patricktoulon

XLDnaute Barbatruc
re
perso je ne vois pas l'intérêt ici d'utiliser VLC
utilise l'ocx.7 de Wmp en VBA suffirait pour un seul mp3 lancé

surtout que tu peux piloter les commandes du lecteur

VB:
'Jouer un mp3 patricktoulon
Dim player As Object
 
Sub test()
playMP3 "H:\mes musique\Amy Mc Donald\This is the Life - Amy Mac Donald\02 - This is the life2.mp3"
End Sub

Sub playMP3(chemin)
Set player = CreateObject("new:WMPlayer.OCX.7")
player.URL = chemin
End Sub
 
Sub playerStop()
player.Controls.Stop
End Sub
et là tu n'a pas besoins de faire attention au espace ou quoi qu'est ce
 

macseb

XLDnaute Nouveau
Re
Le problème est résolu, grâce à votre aide et notamment celle de patrickToulon grâce à son astuce de la touche MAJ+click droit qui permet de copier le chemin d'accès au fichier.

Le soucis était double:
  • La première erreur a été la mauvaise utilisation des guillemets pour encadrer le nom du fichier mp3.
  • La seconde, c'est grâce à l'astuce de patrickToulon que j'explique au-dessus où je me suis rendu compte que les slash étaient orientés dans l'autre sens que les miens. En clair VLC nécessite l'utilisation d'antislashs (\) au lieu de slash (/).
L'application de ces 2 corrections a permis de résoudre le dilemme. Le code à écrire est donc le suivant:
VB:
PID = Shell("C:/Program Files (x86)/VideoLAN/VLC/vlc.exe ""D:\Bureau\Vidéothèque\Anniv julie\Vidéos\001 - James Bond (Thème Du Film).mp3""")

Voila merci encore à tout le monde ;-)
 

TooFatBoy

XLDnaute Barbatruc
C'est quoi la différence avec #4 ?


C'est bizarre que ça fonctionne car si on le tape dans une fenêtre d'invit' de commande, ou dans une fenêtre PowerShell, bien sûr ça ne fonctionne pas.
 
Dernière édition:

macseb

XLDnaute Nouveau
C'est quoi la différence avec #4 ?


C'est bizarre que ça fonctionne car si on le tape dans une fenêtre d'invit' de commande, ou dans une fenêtre PowerShell, bien sûr ça ne fonctionne pas.
Tu as raison TooFatBoy, le #4 était correct mais j'ai du m'emmêler les pinceaux entre la correction des guillemets et de l'antislash.
C'est donc bien la bonne méthode: windows = \ et les espace à traiter avec un "".
Merci encore!
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…