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

Python Discussion :

Script Python qui s'exécute différemment entre un appel manuel ou automatique


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2019
    Messages : 7
    Par défaut Script Python qui s'exécute différemment entre un appel manuel ou automatique
    Bonjour,

    Le contexte :
    J'avais une application existante excel qui faisait de l'acquisition de donnée via un driver de matériel spécifique, qui rendait des données disponibles par un système DDE.

    à ce fichier je dois ajouter des données disponibles sur des équipements par protocole modbus RTU.

    J'ai donc tenté de faire un script en python pour faire l'acquisition des données modbus.
    Pour transféré mes données de python vers mon appli excel, j'utilise un fichier xlsx, qui me sert de tampon entre les 2 applications.

    mon appli python li donc les données modbus, et ensuite les écrit dans un fichier xlsx.

    Pour synchroniser l'ensemble, mon appli vba lance le script python, et au bout d'une tempo, lance sa lecture dans le fichier excel xlsx, et créer une ligne d'archivage.

    J'avais réussi a faire une appli qui fonctionne en lançant le script python depuis excel par l'intermédiaire d'un batch.bat.

    le problème étant les appel de prompt qui fait que ce n'est pas convivial à utiliser.

    J'ai donc chercher à lancer l'appli python directement depuis excel.

    J'ai bien trouvé la commande qui exécute le script python, le script s’exécute partiellement et pas en totalité.

    Voir le code python ci dessous
    (j 'ai bien les print qui affichent les valeurs dans le prompt)


    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    import minimalmodbus
    import serial
    import time
     
    from openpyxl import load_workbook
     
    colision = 0
     
    # EXTRACTION DES DONNEES
    vitesse = 123.0
    couple = 123.0
    temp = 123.0
     
    #MISE A L'ECHELLE DES DONNEES
    couplech=(couple / 10)
    tempech=(temp /10)
     
    # RENVOI DES VALEURS DANS LE PROMPT
    print('vitesse =', vitesse, 'tr/min')	
    print('couple =', couplech, 'Nm')
    print('temperature =',tempech,'°C')
    time.sleep(0.3)
     
    try:
    	#ECRITURE DES DONNEES DANS UN FICHIER EXCEL
    	wb = load_workbook(filename = 'BDD_MODBUS.xlsx')
    	ws1 = wb.active
    	ws1['A1'] = vitesse
    	ws1['B1'] = couplech
    	ws1['C1'] = tempech
     
    	wb.save(filename = 'BDD_MODBUS.xlsx')
    	time.sleep(0.3)
     
    # GESTION DES EXCEPTIONS D'ACCES AU FICHIER EXCEL BDD_MODBUS
    except PermissionError:
    	colision = colision + 1
    	print("nombre de colisions = ",colision)

    et ci dessous le code vba

    Code VBA : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    'Fonction de récupération des données dans le fichier excel fermé pour données température et variateur
     
    Private Function ExtraireValeur(ByVal Dossier As String, ByVal Fichier As String, ByVal Feuille As String, ByVal Cellule As String)
    Dim Argument As String
        Fichier = Replace(Fichier, "'", "''")
        Argument = "'" & Dossier & "[" & Fichier & "]" & Feuille & "'!" & Range(Cellule).Address(, , xlR1C1)
        ExtraireValeur = ExecuteExcel4Macro(Argument)
    End Function
     
     
    Sub rec()
     
    ' renseignement des parametres pour exécution fonction
     
    sDossier = "D:\PYTHON\"
    sNomFichier = "BDD_MODBUS.xlsx"
    sNomFeuille = "Feuil1"
     
     
    If (Enregistrement = 1) Then
     
    mypy = "D:\PYTHON\modbus2.py"
    X = Shell("C:\Users\micka\AppData\Local\Programs\Python\Python37\python.exe" & " " & mypy, 1)
    If X = 0 Then
        MsgBox "Impossible de lancer Python !", vbOKOnly
    End If
     
     
    Application.Wait (Now + TimeValue("00:00:08"))
     
     
    'Exécution récuparation de données
     
    Sheets("Feuil1").Cells(10, 10) = ExtraireValeur(sDossier, sNomFichier, sNomFeuille, "A1")
    Sheets("Feuil1").Cells(10, 11) = ExtraireValeur(sDossier, sNomFichier, sNomFeuille, "B1")
    Sheets("Feuil1").Cells(10, 12) = ExtraireValeur(sDossier, sNomFichier, sNomFeuille, "C1")
     
     
     Sheets("Feuil1").Range("A10").Value = Now
     
      Sheets("Feuil2").Cells(Compteur + 5, 1).Value = Sheets("Feuil1").Range("A10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 2).Value = Sheets("Feuil1").Range("B10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 3).Value = Sheets("Feuil1").Range("C10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 4).Value = Sheets("Feuil1").Range("D10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 5).Value = Sheets("Feuil1").Range("E10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 6).Value = Sheets("Feuil1").Range("F10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 7).Value = Sheets("Feuil1").Range("G10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 8).Value = Sheets("Feuil1").Range("H10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 9).Value = Sheets("Feuil1").Range("I10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 10).Value = Sheets("Feuil1").Range("J10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 11).Value = Sheets("Feuil1").Range("K10").Value
      Sheets("Feuil2").Cells(Compteur + 5, 12).Value = Sheets("Feuil1").Range("L10").Value
     
      Application.OnTime Now + TimeSerial(0, 0, Sheets("Attaque Al").Range("E22").Formula), "rec"
     
      Compteur = Compteur + 1
    End If
     
    End Sub


    Pouvez vous me dire pourquoi lorsque j'éxécute le script python manuellement ( doubleclik sur le .py) l'ensemble du script s'éxécute (copie des données dans le xlsx)

    et lorsque le code vba tourne, on a bien l'affichage des print dans le prompt, mais la requete d'écriture dans le xlsx ne se fait pas ?

    Je vous remerci

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 211
    Par défaut
    hello,
    ne pas oublier qu'avec openoffice ou libreoffice on peut directement utiliser des macros écrites en python à l'intérieur et donc travailler dans des classeurs de type excel.
    Ami calmant, J.P

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 734
    Par défaut
    Salut,

    Citation Envoyé par mickaelkael30 Voir le message
    Pouvez vous me dire pourquoi lorsque j'éxécute le script python manuellement ( doubleclik sur le .py) l'ensemble du script s'éxécute (copie des données dans le xlsx)

    et lorsque le code vba tourne, on a bien l'affichage des print dans le prompt, mais la requete d'écriture dans le xlsx ne se fait pas ?
    Si le code Python ne fait pas le boulot lancé depuis VBA, c'est peut être qu'il rencontre une erreur. Ce qui suppose avoir une sortie de stderr vers un fichier histoire de regarder après, tester le status du processus qui se termine (ce que vous ne pouvez pas faire avec Shell)...

    En fait la question devrait être comment contrôler l'exécution d'un processus externe lancé depuis VBA: que le programme que tourne ce processus soit écrit avec Python ou autre chose n'a pas grande importance. Et quelque part, c'est une question à poser dans un forum VBA.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Et en utilisant des chemins absolus ?

Discussions similaires

  1. Script Python qui ne fonctionne pas avec cron
    Par azaouali dans le forum Shell et commandes GNU
    Réponses: 18
    Dernier message: 28/06/2021, 11h47
  2. Communication entre deux script Python
    Par fanfouer dans le forum Général Python
    Réponses: 1
    Dernier message: 06/02/2014, 21h38
  3. Communication entre deux scripts python?
    Par kevung dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 09/04/2010, 20h32
  4. pipe entre deux scripts python
    Par julien.63 dans le forum Général Python
    Réponses: 3
    Dernier message: 25/11/2009, 09h24
  5. interaction entre plusieur script python par le biai d'internet
    Par yggdrazil dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 01/11/2006, 14h36

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