Partage
  • Partager sur Facebook
  • Partager sur Twitter

Commander un fichier excel + VBA depuis python

Sujet résolu
    29 janvier 2015 à 16:57:11

    Bonjour à tous,

    Je dispose de feuilles de calculs Excel programmées en VBA et j'aimerai les piloter depuis python. Est-ce possible ?

    Je m'explique : dans l'état actuel des choses, j'ouvre ma feuille Excel 2010 je rentre mes données d'entrée dans un tableau, je clique sur un bouton, ça calcul, et ça affiche un résultat. Je n'ai malheureusement pas le temps de reprogrammer ces fichiers, et je dois répéter beaucoup de fois l'opération.

    Ce que j'aimerai faire, c'est de créer une fonction python qui ouvre le fichier excel, qui fait automatiquement ce que je fais à la main, et qui me récupère les résultats, que je stock dans python.

    Ecrire des fichiers excel semble faisable de ce que j'ai trouvé, mais commander un fichier, ça je n'ai pas trouvé...

    Une petite aide ?

    Question Bonus : est-il possible de faire ça sans ouvrir l'interface graphique d'Excel (ça risque de faire perdre beaucoup de temps sinon d'ouvrir et fermer à chaque fois l'interface non ?) ? Avec certains logiciels c'est possible de faire le calcul sans lancer l'interface. Mais je ne sais pas si c'est faisable dans ce cas.

    Merci d'avance !!

    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2015 à 17:01:27

      Salut

      Je suis quasi persuadé qu'il y a un module de "macro" dans Excel, et que tu peux enregistrer des actions et les répéter en appuyant sur un simple bouton. Ca sera beaucoup plus simple de faire ça que de tout coder en Python :)

      Edit : Lien macro

      -
      Edité par InhumanRampage 29 janvier 2015 à 17:12:35

      • Partager sur Facebook
      • Partager sur Twitter
        29 janvier 2015 à 18:54:04

        D'abord, merci pour vos réponses. Je m'explique un peu plus, les tableurs en question représentent des années de travail... S'il n'avait tenue qu'à moi, j'aurais tout fait en python. Malheureusement j'en hérite sans pouvoir les modifier (parce qu'on ne m'en donne pas le temps). Et comme je ne maitrise pas du tout le VBA, et que je suis pro python (ben voui ^^), je souhaite commander Excel via python, comme si c'était une fonction. Un truc du genre :

        JeControlMonFichierExcelDepuisPython = f(chemin du fichier excel, données d'entrées, données de sorties)

        Parce qu'en plus, je n'en ai pas qu'un seul... du coup je pourrais utiliser la même fonction pour les différents fichiers... Oui, dit comme ça...

        Mais merci quand même pour vos propositions ^^

        Edit par rapport à Inhuman : oui effectivement il existe un module macro. Tout le fichier excel a été fait avec justement. Mais ça représente beaucoup de travail et de temps que je n'ai pas pour faire une routine. Sans parler de mon choix de python :p

        -
        Edité par lelorrain7 29 janvier 2015 à 18:56:26

        • Partager sur Facebook
        • Partager sur Twitter
          29 janvier 2015 à 20:22:43

          Il s'emblerait que j'ai un début de réponse ici :

          http://nbviewer.ipython.org/github/sanand0/ipython-notebooks/blob/master/Office.ipynb

          et là :

          http://stackoverflow.com/questions/19616205/running-an-excel-macro-via-python

          -
          Edité par lelorrain7 29 janvier 2015 à 20:26:06

          • Partager sur Facebook
          • Partager sur Twitter
            30 janvier 2015 à 11:37:06

            Et voilà ma solution, merci moi ^^

            import os
            import win32com.client
            
            if os.path.exists("MonFichierExcel.xlsm"):
                xl=win32com.client.Dispatch("Excel.Application")
                wb=xl.Workbooks.Open(Filename="CheminCompletVersMonFichierExcel.xlsm", ReadOnly=1)
            
                " change Values in table "
                ws=wb.Worksheets("Feuil1")
                ws.Cells(4,4).Value = 1  
                
                ws.Cells(6,4).Value = 2  
                ws.Cells(7,4).Value = 3 
                ws.Cells(8,4).Value = 4  
                ws.Cells(9,4).Value = 5  
                ws.Cells(10,4).Value = 6  
                ws.Cells(11,4).Value = 7  
                ws.Cells(12,4).Value = 8  
                ws.Cells(13,4).Value = 9  
                ws.Cells(14,4).Value = 10  
                ws.Cells(15,4).Value = 11  
            
                " Click button action "
                xl.Application.Run("MonFichierExcel.xlsm!Feuil1.CommandButton1_Click")
            
                
            ##    xl.Application.Save() # if you want to save then uncomment this line and change delete the ", ReadOnly=1" part from the open function.
                xl.Application.DisplayAlerts = False    # Don't display dialog bow "would you like to save data ?". It save nothing
                xl.Application.Quit() # Comment this out if your excel script closes
                del xl



            • Partager sur Facebook
            • Partager sur Twitter

            Commander un fichier excel + VBA depuis 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