Microsoft 365 Récupérer le chemin d'accès de python.exe dans un code VBA

marie49

XLDnaute Occasionnel
Bonjour,
Je dois réaliser un environnement Excel qui lancerait des programmes en python avec VBA.
Cela fonctionne bien sur mon ordinateur car je connais mon chemin d'accès pour Python.exe, il est en dur dans le VBA.
Cependant, il faudrait que je le généralise sur n'importe quel ordinateur.
Est-il possible de récupérer le chemin d'accès de python. exe dans mon code VBA?

Merci

PS : merci de redirige la discussion si elle n'est pas au bon endroitr.
 

Staple1600

XLDnaute Barbatruc
Bonjour @marie49, le fil

Déjà, tu peux récupérer les valeurs contenues dans le PATH
Code:
Sub Test_Path()
Cells(1).Resize(UBound(Split(Environ("PATH"), ";")) + 1) = _
        Application.Transpose(Split(Environ("PATH"), ";"))
End Sub
Et voir dans si ton PC, le dossier où est python apparait dans le résultat produit par la macro ci-dessus
 

marie49

XLDnaute Occasionnel
Merci pour ton aide.
Je viens d'utiliser le code suivant et cela fonctionne. je vais el tester sur d'autres postes pour être sure que c'est compatible ailleurs.

VB:
Sub GetPythonPath()
    Dim command As String
    Dim output As String
   
    ' Construire la commande pour obtenir le chemin d'accès de Python
    command = "where python ""import sys; print(sys.executable)"""
   
    ' Exécuter la commande et capturer la sortie
    output = ExecCmd(command)
   
    ' Afficher le chemin d'accès de Python
    MsgBox output
End Sub

Function ExecCmd(cmd As String) As String
    Dim objShell As Object
    Dim objCmd As Object
    Dim objOutput As Object
   
    ' Créer les objets Shell, Cmd et Output
    Set objShell = VBA.CreateObject("WScript.Shell")
    Set objCmd = objShell.Exec(cmd)
    Set objOutput = objCmd.StdOut
   
    ' Lire la sortie de la commande
    ExecCmd = objOutput.ReadAll
   
    ' Libérer les objets
    Set objOutput = Nothing
    Set objCmd = Nothing
    Set objShell = Nothing
End Function
 

Staple1600

XLDnaute Barbatruc
Re

En un plus court ;)
Enrichi (BBcode):
Sub test_python_OK()
Set objShell = CreateObject("WScript.Shell")
objShell.Run "cmd /c where python>C:\Users\STAPLE\EXCEL\test.txt", 0, True
End Sub
Je récupère bien le path

NB: Adapter le chemin dans le code

Pour généraliser on peut stocker le fichier sur le bureau de l'utilisateur puis le supprimer par un Kill
 

Staple1600

XLDnaute Barbatruc
Re

Comme je le disais, il suffit d'enregistrer le fichier texte sur le bureau de la session Windows active
(donc un SpecialFolder)

PS: Quand je poste un message, je ne pense pas seulement au demandeur mais à tous les potentiels lecteurs de la discussion ;)
Et comme tu as ta propre solution (message#8)
Chaque lecteur prendra le code qui lui sied le mieux.
;)
 

Staple1600

XLDnaute Barbatruc
Re

Donc à toute fins utiles
Ici on enregistre sur le bureau de la session active
VB:
Sub test_python_BIS_OK()
Dim strPath$, strCMD$
Set objShell = CreateObject("WScript.Shell")
strPath = objShell.SpecialFolders("Desktop")
strCMD = "cmd /c where python>" & strPath & "\pPath.txt"
objShell.Run strCMD, 0, True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 171
Membres
112 676
dernier inscrit
little_b