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 :

Addition et contrôle de temps


Sujet :

Python

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 112
    Par défaut
    pas de message d'erreur
    elle tourne ce matin 3h toujours rien
    XLWING0.20.8
    PYTHON 3.9
    Office 365 E5

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 218
    Par défaut
    1 - Il faudrait vérifier dans le gestionnaire de tâche qu'il n' y a pas plein de sessions Excel qui tournent et les tuer.
    2 - Rendre Excel Visible pendant le traitement
    3 - faire un try finally pour fermer excel en cas de plantage

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 112
    Par défaut
    Bonjour
    Je n'ai pas de message d'erreur
    Il y que une session excel ouvert.
    Il ouvre le fichier exécute son filtre.par contre il n'arrive pas à copier la selection
    Il bloque durant des heures, sans possibilité d'aller au bout

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 218
    Par défaut
    Hello,
    Citation Envoyé par pratick Voir le message
    Bonjour
    Je n'ai pas de message d'erreur
    Il y que une session excel ouvert.
    Il ouvre le fichier exécute son filtre.par contre il n'arrive pas à copier la selection
    Il bloque durant des heures, sans possibilité d'aller au bout
    est-ce qu'il y a des choses qui sont écrites dans la console (par ex les temps d'exécution) ?
    Si tu débogues ton programme pas à pas, à partir de quelle ligne on ne passe plus à la ligne suivante ?
    Ami calmant, J.P

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 112
    Par défaut
    Bonjour
    excuse moi pour le long delais
    tous passe bien jusque cette ligne
    la console reste en rouge et rien ne ce passe durant des heures


    j'ai la sensation que c'est l'API qui bloque certaine action

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.range('A1:C' + str(nb_row)).api.SpecialCells(12).copy

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 112
    Par défaut
    Bonjour jurassic
    j'ai trouver l'erreur et corriger en temps que telle merci pour tout

    je mets là solution fonctionnelle chez moi
    Cordialement

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    import xlwings as xw
    from datetime import datetime, timedelta
    def tempsReserv(res,deltamax):
        print("res",res)
        arrTemps =  res.split(';')
        cumuldelta = timedelta()
        for temps in arrTemps:
            t =  datetime.strptime(temps,'%H:%M HEURES').time()
            delta = timedelta(hours=t.hour, minutes=t.minute)
            if delta >= deltamax:
                delta = delta - timedelta(hours=1)
            cumuldelta = cumuldelta + delta
        return cumuldelta
     
     
     
     
     
     
    wb_from = xw.Book(r"C:/Users/II1154/Downloads/BT/export_BT_20220425.xlsx")
    wb_to = xw.Book(r"C:/Users/II1154/Downloads/BT/classeur.xlsx")
     
    ws_from = wb_from.sheets['BT']
    ws_to = wb_to.sheets['BT2']
     
    # Copy the sheet BEFORE the sheet of another book.
    #ws_from.api.Copy(Before=ws_to.api)
     
     
    ws_from.range("A1:C1").api.AutoFilter(field:=1, Criteria1:="NO")
    ws_from.range("A1:C1").api.AutoFilter(field:=31, Criteria1:="<>")
    ws_from.range("A1:C1").api.AutoFilter(field:=7, Criteria1:="OUI")
     
     
     
    ws_from.range('A1').expand('table').api.Copy()
    wb_to.sheets['BT2'].select
    wb_to.sheets['BT2'].range('A1').paste()
     
    nb_row = wb_to.sheets['BT2'].range('A1').end('down').row # dernière ligne
    datain = wb_to.sheets['BT2'].range('AG2:AG' + str(nb_row)).value
     
    deltamax = timedelta(hours=4,minutes=0)
    tpslist = []
    for x in datain:
        tps = tempsReserv(x, deltamax)
        hours, remainder = divmod(tps.seconds, 3600)
        minutes = remainder//60
        tpslist.append('{:02}:{:02}'.format(tps.days*24 + hours,minutes))
    wb_to.sheets['BT2'].range('BL2:BL' + str(nb_row)).number_format = '@'
    wb_to.sheets['BT2'].range('BL2').options(transpose=True).value = tpslist
     
     
     
     
    print(nb_row)
    #wb_to.sheets['BT2'].select
    print(tpslist)
    #"ws_to.range('A1').api.select
    print("3")
    print("4")
    # Copy the sheet AFTER the sheet of another book.
    ws_from.range('B8').api.Copy()

  7. #27
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    re-bonjour

    Pas obligatoirement d'accord, car utiliser datetime est à priori plus lent qu'une fonction "maison". Ici c'est ton calcul lourd dans ta boucle donc il faut impérativement tester

    Un rapide test (sans doute à affiner) donne la fonction avec datetime() 10 fois plus lente

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    import timeit
    from datetime import datetime, timedelta
     
    def tempsReserv(res,deltamax):
        #print("res",res)
        arrTemps =  res.split(';')
        cumuldelta = timedelta()
        for temps in arrTemps:
            t =  datetime.strptime(temps,'%H:%M HEURES').time()
            delta = timedelta(hours=t.hour, minutes=t.minute)
            if delta >= deltamax:
                delta = delta - timedelta(hours=1)
            cumuldelta = cumuldelta + delta
        return cumuldelta
     
    def tempsReserv2(res,deltamax):
        arrTemps =  res.split(';')
        cumuldelta = 0
        for temps in arrTemps:
            h,m = (int(x) for x in temps[:-7].split(":", 1))   # A voir si cela passe toujours ...
            hm = h * 60
            if hm + m > deltamax:
                hm -= 60
            cumuldelta += hm+m
        # plus simple/rapide de retourner directement au bon format texte ?
        # h = cumuldelta//60
        # return f"{h:02d}:{cumuldelta-(h*60):02d}")
        return cumuldelta
     
    test = "04:31 HEURES;02:31 HEURES;" *10  # 7-1 == 6 heures (60 heures et 20 minutes)
    test = test[:-1]
    print(test)
     
    deltamax = timedelta(hours=4,minutes=0)
    ret = tempsReserv(test, deltamax)
    hours, remainder = divmod(ret.seconds, 3600)
    minutes = remainder//60
    t = timeit.timeit(lambda: tempsReserv(test, deltamax), number=100000)
    print("tempsReserv", t, ret, f" ==> {ret.days*24+hours}:{minutes}")
    print()
     
    deltamax = 4*60
    ret = tempsReserv2(test, deltamax)   # juste pour voir si les 2 fonctions retournes bien la même valeur
    hours, remainder = divmod(ret*60, 3600)
    minutes = remainder//60
    t = timeit.timeit(lambda: tempsReserv2(test, deltamax), number=100000)
    print("tempsReserv2", t, ret, f" ==> {hours}:{minutes}")
    ps: je n'ai aucune idée si cette fonction tempsReserv() est le goulot d'étranglement, une fonction 10 fois plus rapide peut n'avoir qu'un faible impact au final

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [MySQL-5.7] Contrôle de temps entre insertion
    Par _Agrid dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 05/02/2020, 17h10
  2. [AC-2010] Addition de contrôles dans un formulaire.
    Par chmouky dans le forum Access
    Réponses: 7
    Dernier message: 26/05/2016, 14h59
  3. Sicstus Prolog : contrôle du temps d'exécution
    Par mcc39 dans le forum Prolog
    Réponses: 1
    Dernier message: 17/05/2013, 18h06
  4. Contrôle de temps des développements
    Par tssi555 dans le forum Débats sur le développement - Le Best Of
    Réponses: 35
    Dernier message: 08/10/2012, 09h14
  5. Contrôle des temps de réponses réseau
    Par AAWOOPY56 dans le forum Solaris
    Réponses: 1
    Dernier message: 16/06/2011, 14h59

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