Partage
  • Partager sur Facebook
  • Partager sur Twitter

VBA et Python

Importer dans VBA des données traitées sous Python

    28 février 2020 à 17:07:22

    Bonjour,

    En VBA, je souhaite déclencher une fonction écrite sous Python, et récupérer son résultat pour le stocker dans une variable de mon programme VBA.

    De manière plus détaillée, je travaille sous excel sur une une interface avec mon rameur d'appartement de type WaterRower.

    Le rameur en lui-même est très bien, mais son moniteur est très rudimentaire. Il peut être connecté à un ordinateur portable via USB, mais les appli existantes n'apportent pas grand chose de plus. Par exemple, on ne peut pas programmer de séance de fractionné un minimum élaborée.

    Je me suis donc préparé une interface sous excel/VBA. Pourquoi VBA me direz vous? Parce que l'amateur que je suis ne connait que ce langage!

    Le problème est que pour récupérer sous excel les informations transmises par le rameur via USB , ce n'est pas évident!

    (en gros, j'ai besoin de récupérer: temps écoulé, distance effectuée, vitesse instantanée, coups de rame, et éventuellement rythme cardiaque. Avec ces 5 données, je peux ensuite me débrouiller sous VBA)

    Mes recherches sur le net m'ont permis de trouver qu'il existait une bibliothèque spécifique au WaterRower développée sur Github. Je commence donc à m'intéresser à Python (via le cours disponible sur ce site). J'ai vu qu'il existait également des bibliothèque pour passer de VBA à Python et vice-versa.

    Concrètement, est-il possible d'affecter à une variable VBA l'une des valeurs du WaterRower récupérée par la bibliothèque Python?

    Où est-ce que je fais fausse route?

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      1 mars 2020 à 12:22:58

      Bonjour à tous,

      Bon, voilà où j'en suis avec un tout premier essai de dialogue entre python et VBA:

      J'ai installé Python, via Anaconda3, dans le chemin: C:\Users\Laurent

      J'ai ensuite installé  xlwings via Conda

      Ces installations ont bien fonctionné.

      Dans un classeur excel, j'ai réussi à importer le module xlwings.

      J'ai alors crée un autre module, dans lequel j'ai mis cette procédure:

      Sub Essai_Py_VBA()
          RunPython ("import Test_Py_VBA;Test_Py_VBA.TestPyVBA()")
      End Sub

      Puis j'ai enregistré ce classeur sous la même racine (C:\Users\Laurent)

      J'ai ensuite créé la fonction python suivante pour essai. Je l'ai enregistrée en fichier Test_Py_VBA.py, toujours sous la même racine.

      import xlwings as xw
      
      def TestPyVBA() :
          wb = xw.book.caller()
          wb.sheets(0).cells(2,2).value = 3*3

      Quand je lance ma macro excel, j'obtiens ce message d'erreur:

      "'python' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes."

      J'ai l'impression que c'est un problème de chemin d'accès. J'ai essayé en mettant le classeur xls et le fichier Py sous la racine "C:\Users\Laurent\Anaconda3" puisque mon python est à cet emplacement. Mais même problème.

      Merci si quelqu'un peut me venir en aide.

      Laurent

      NB: Ma question aurait-elle dû être postée dans le forum Python? Si oui, comment la déplacer?

      • Partager sur Facebook
      • Partager sur Twitter
        10 mars 2020 à 0:09:20

        Il faut que tu renseigne la variable PATH dans les variables d'environnement :  vu ton C:\User tu es sous windows ... et je n'ai pas ça sous la main.

        un lien : https://stackoverflow.com/questions/3701646/how-to-add-to-the-pythonpath-in-windows-so-it-finds-my-modules-packages

        • Partager sur Facebook
        • Partager sur Twitter
          12 mars 2020 à 19:15:58

          Bonsoir,

          Désolé pour cette réponse tardive, suite absence pro.

          Merci pour la réponse, même si j'ai trouvé une autre façon de procéder en passant par un objet Wscript.shell (cf code ci-dessous)

          Je regarderai quand même le lien dès que j'aurai 5' pour comprendre!

          Dim ObjShell As Object
          Dim PythonExe, PythonScript As String
          
          Set ObjShell = VBA.CreateObject("Wscript.Shell")
          PythonExe = """C:\Users\Laurent\Anaconda3\python.exe"""
          PythonScript = ThisWorkbook.Path & "\Test_Py_to_VBA.py"
          
          Dim command As String
          Dim exec As Object
          Dim output As Object
              
          command = PythonExe & " " & PythonScript
          Set exec = ObjShell.exec(command)
          Set output = exec.StdOut
              
          mavaleur = output.ReadLine
              
          Range("B2") = mavaleur
          
          End Sub

          Et bien sûr, dans le code Python, je termine en faisant un Print de ce que je veux transférer sur excel.

          • Partager sur Facebook
          • Partager sur Twitter
            13 mars 2020 à 14:30:18

            Salut,

            ça vaut le coup de te plonger dans python, c'est tellement génial, c'est lisible, facile à écrire, et profond en même temps !

            Pour démarrer la prog, c'est vraiment top. et il te seras toujours utile ensuite même si t’explores d'autres langages.

            • Partager sur Facebook
            • Partager sur Twitter

            VBA et Python

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown