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 :

Intégration Python avec Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 363
    Par défaut Intégration Python avec Excel
    Bonjour,

    je viens de découvrir qu'Excel sait intégrer du code Python, quelqu'un à-t-il déjà exploré cette possibilité

    Mon application Excel devant maintenant correspondre avec une application externe écrite avec Python

    J'ai une trouvé une vidéo intéressante sur le sujet, mais j'aimerai une retour de mise en oeuvre et des conseils

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 236
    Par défaut info
    https://www.youtube.com/@LeilaGharani

    Elle est très forte ... et parle anglais.

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 389
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    je viens de découvrir qu'Excel sait intégrer du code Python, quelqu'un à-t-il déjà exploré cette possibilité
    Mon application Excel devant maintenant correspondre avec une application externe écrite avec Python
    J'ai une trouvé une vidéo intéressante sur le sujet, mais j'aimerai une retour de mise en oeuvre et des conseils
    Merci
    Hello,
    Il y a aussi la possibilité d'utiliser LibreOffice Calc qui permet d'utiliser des macros Python.
    Sinon moi je n'ai pas Excel365 et je crois que son Python ne s'intègre pas directement en macro ou dans du vba. Sinon pour Excel avec un serveur COM python (facile à mettre oeuvre si on a python installé sur sa machine) c'est aisé d'appeler des fonctions qui se trouvent dans le serveur COM Python et de récupérer les résultats dans du code VBA.
    Voici un exemple qui calcule la répartition de fruits en 2 groupes (sans permutation) :

    Le code python de la fonction dans le serveur COM python qui utilise la classe combinations du module itertools (module standard de python) :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
        def generer_repartitionsN(self, elements, separateur=""):
            from itertools import combinations
            try:
                e = []
                for ligne in elements:
                    valeur = ligne[0]
                    if valeur is not None and str(valeur) != "":
                        e.append(str(valeur))
                n = len(e)
                # Pas assez d'éléments pour faire une répartition
                if n < 2:
                    return [[], 0]
     
                data = []
                # ---------------------------------------------------------
                # Génération des répartitions
                # ---------------------------------------------------------
                for k in range(1, n // 2 + 1):
                    for c in combinations(e, k):
                        # Lorsque les deux groupes ont la même taille,
                        # on évite de générer les deux répartitions miroir.                   #
                        # Exemple :
                        # A,B | C,D
                        # C,D | A,B                   #
                        # Une seule des deux est conservée.
                        if 2 * k == n and e[0] not in c:
                            continue
     
                        groupe1 = list(c)
                        groupe2 = [x for x in e if x not in c]
                        # Le séparateur est utilisé exactement tel quel.
                        g1 = separateur.join(groupe1)
                        g2 = separateur.join(groupe2)
                        data.append([g1, g2])
     
                return [data, len(data)]
     
            except Exception as ex:
                return [[], str(ex)]
    l'appel de la fonction à partir du VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub CalculRépartitions()
        Dim r As Variant, t As Variant, elements As Variant
        InitPythonServer
        ' ---------------------------------------------------------
        ' Source : éléments par cellule dans la colonne D
        ' ---------------------------------------------------------
        elements = Range("D2:D" & CStr(1 + Range("B1").Value2)).Value2
        ' ---------------------------------------------------------
        ' Nettoyage de l'ancienne sortie
        ' ---------------------------------------------------------
        [A3:B512].ClearContents: [E18].ClearContents
        ' ---------------------------------------------------------
        ' Calcul Python
        ' ---------------------------------------------------------
        r = objPy.generer_repartitionsN(elements, ",")
        ' ---------------------------------------------------------
        ' Récupération des résultats
        ' ---------------------------------------------------------
        If r(1) > 0 Then
            ' Index transforme tableau python Base 0 en tableau Excel base 1
            t = Application.Index(r(0), 0, 0)
            [E18].Value = r(1)
            [A3].Resize(r(1), 2).Value2 = t
        Else
            [E18].Value = 0
        End If
    End Sub
    La fonction InitPythonServer initialise l'objet objPy qui est global
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub InitPythonServer()
        On Error Resume Next
        If objPy Is Nothing Then
            Set objPy = CreateObject("PythonXl.Server")
            PythonReady = True
            Application.StatusBar = "? Moteur Python prêt à l'emploi."
        End If
        On Error GoTo 0
    End Sub
    comme c'est cette fonction qui est la plus longue à s'exécuter ( car lance le python et le serveur COM) l'astuce consiste à appeler InitPythonServer à l'ouverture du classeur.
    Voici ce que cela donne dans un Excel 2021 :
    Nom : XlRepartition.gif
Affichages : 39
Taille : 290,7 Ko
    Comme on peut le constater, l'appel au Python est très rapide.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko :zen:

Discussions similaires

  1. [XL-2019] Gros problème avec Excel après avoir tourné le code Python. Problème de function
    Par victorpythonfinance dans le forum Excel
    Réponses: 2
    Dernier message: 09/01/2021, 20h25
  2. [Python 3.X] Gros problème avec Excel après avoir exécuté le code Python
    Par victorpythonfinance dans le forum Général Python
    Réponses: 2
    Dernier message: 04/01/2021, 17h02
  3. Bordure de excel en python avec xlrd
    Par Alex86 dans le forum Général Python
    Réponses: 1
    Dernier message: 19/02/2016, 11h00
  4. Analyse avec Excel
    Par Ric500 dans le forum Access
    Réponses: 6
    Dernier message: 15/02/2005, 15h12
  5. [C#] [EXCEL] Travailler avec EXCEL sans ouvrir le logiciel
    Par Fabsou dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/07/2004, 10h29

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