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 :

Code python qui s'arrête sans raison apparente


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 215
    Points : 60
    Points
    60
    Par défaut Code python qui s'arrête sans raison apparente
    Bonjour.

    J'ai un script python3 qui envoie des requêtes à des balances par port RS232 pour récupérer et logger les masses mesurées.

    Ici le script utilisé:
    https://github.com/hary66/RadWag-and...TP%2BRadWag.py
    Je ne suis pas pro du code et débutant donc soyez indulgent. (après je suis à l'écoute de tout conseil)

    Le script s'arrête sans raison apparente et je ne sais pas comment faire pour détecter la cause de l'arrêt.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par hary66 Voir le message
    Le script s'arrête sans raison apparente et je ne sais pas comment faire pour détecter la cause de l'arrêt.
    Avec aussi peu d'informations c'est pas facile de t'aider.
    Déjà je vois que le script écrit un fichier log nommé "log_DGTP+RAdWag.csv". Donc aller voir ce qu'il contient (et surtout sa dernière ligne) te donnera la dernière ligne de code exécuté (enfin la dernière qui écrit le log).
    De là, tu peux rajouter des print() a des endroits qui te semblent important pour checker son avancement. Si par exemple à partir de la dernière ligne écrivant le log tu vois que le script appelle une fonction, alors tu mets un print() juste après l'appel voir si la fonction s'est exécutée.
    Et ainsi de fil en aiguille tu arriveras à identifier la ligne qui fait planter.

    De mon côté après avoir exécuté ledit script, ça plante à la ligne 60 return port car la variable n'existe pas.
    Et effectivement dans la fonction...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def choosePort():
    	portsDictionnary = checkForPorts()
    	if len(portsDictionnary) == 1:
    		port = portsDictionnary["1"]
    		print(port + " is the only port available and in use !")
    	elif len(portsDictionnary) == 0:
    		print("No serial/RS232 converter found !\nCheck for connection or add converter.\n")
    	else:
    		choosePort = str(input("Confirm the chosen port : "))
    		type (choosePort)
    		port=portsDictionnary[choosePort]
    		print ("You have choosen " + port + " as port to use !")
    	return port
    ... si on passe dans le "elif" alors la variable n'est pas créée. Mon cas est peut-être différent du tien (je teste sur une machine qui n'a pas de RS232) mais déjà c'est une indication que ce script n'est peut-être pas des plus fiables et des plus propres (c'était quand-même pas super compliqué à voir, le truc fait seulement 12 lignes !!!). Ensuite c'est un peu pareil avec ce type(choosePort) de la ligne 56 exécuté dans le vide...

    Un peu pareil avec cette fonction
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def choosePortBaudRate():
    	logger.debug('choosePortBaudRate routine')
    	Baud = input("\nEnter Baud Rate (default to 9600) : ")
    	if Baud == "":
    		Baud = 9600
    	return Baud
    Donc soit on entre une valeur vide (qui normalement se teste if not Baud) et la fonction retourne l'int 9600, soit on entre une valeur concrète style 19200 et la fonction retourne la string 19200. Bref la fonction retourne un type ou un autre selon le sens du vent. Après pour gérer...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par hary66 Voir le message
    Le script s'arrête sans raison apparente et je ne sais pas comment faire pour détecter la cause de l'arrêt.
    Mettre des prints partout peut aider à voir où ça bloque si jamais il n'y a pas d'erreur levée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x = 5
    print('1')
    y = 6
    print('2')
    #...

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    y = 6
    print('2')
    #...
    Oui, si l'instruction y=6 plante (sait-on jamais)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 215
    Points : 60
    Points
    60
    Par défaut
    Désolé, je n'ai pas été assez clair.
    Le script fonctionne bien pendant quelques heures et puis ça s'arrête
    !

    Ici le dernier fichier de log :
    https://github.com/hary66/RadWag-and...P%2BRAdWag.csv

    Je vais revoir mon code en fonctions de vos remarques;

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hary66 Voir le message
    Désolé, je n'ai pas été assez clair.
    Le script fonctionne bien pendant quelques heures et puis ça s'arrête
    !
    Avec ou sans message d'erreur?

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

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Hello,
    Citation Envoyé par hary66 Voir le message
    Je vais revoir mon code en fonctions de vos remarques;
    voici d'autres remarques :
    1 - Pour la gestion des exceptions j'aurais plutôt fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    except serial.SerialException as e:
        logger.critical("Serial error: " + str(e))
    except:
        logger.critical("Error: "  + sys.exc_info()[0])
    2 - Dans ta boucle, si il n'y a pas de données en attente dans les ports série, tu boucles en permanence ce qui doit consommer pas mal de temps CPU. Il serait judicieux de rajouter une petite temporisation (ex :! 10ms) en dernière instruction de cette boucle, par exemple :
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 215
    Points : 60
    Points
    60
    Par défaut
    Je n'avais pas pensé à vous mettre l'erreur apparaissant sur le terminal !
    C'est ici :
    https://github.com/hary66/RadWag-and...erminal_output

    le script utilisé où j'ai ajouté des N° à chaque étape selon les conseils de @LeNarvalo:
    https://github.com/hary66/RadWag-and...TP%2BRadWag.py

    et le fichier de log :
    https://github.com/hary66/RadWag-and...P%2BRAdWag.csv

  9. #9
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Citation Envoyé par hary66 Voir le message
    Je n'avais pas pensé à vous mettre l'erreur apparaissant sur le terminal !
    C'est ici :
    https://github.com/hary66/RadWag-and...erminal_output

    le script utilisé où j'ai ajouté des N° à chaque étape selon les conseils de @LeNarvalo:
    https://github.com/hary66/RadWag-and...TP%2BRadWag.py

    et le fichier de log :
    https://github.com/hary66/RadWag-and...P%2BRAdWag.csv
    Petite digression:
    Il est préférable de poster du contenu au lieu de lien (comme le préconise les règles). Cela rendra ce post plus pérenne (les liens, ça vie et ça meurt.) et plus facile à suivre...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par hary66 Voir le message
    Je n'avais pas pensé à vous mettre l'erreur apparaissant sur le terminal !
    L'erreur renvoie a un problème de communication. Il faudrait regarder ce qu'il se passe côté "balance" a ce moment là (peut être un reset)...
    In fine arbitrer sur la gestion de l'erreur (probablement ré-ouvrir le port après un certain temps, abandonner après certain nombre d'essais)...
    Vous êtes plus dans une logique de programmation réseau que "python".... et si vous voulez un code qui fonctionne en 24/24, c'est difficile à réaliser car il faut gérer des tas de cas de figures et des reprises en cas d'erreur.

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

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Une autre remarque : mélanger la gestion de deux port série dans la même boucle ce n'est peut être pas une bonne idée. L'utilisation de deux threads différents pour les boucles de gestion est sans doute plus appropriée.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  12. #12
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 215
    Points : 60
    Points
    60
    Par défaut
    Ok pour ces quelques conseils.

    Mais où pourrais je me diriger pour voir comment faire celà ?

    La plupart de mes besoins tournent autour de ça, mais je peine à trouver des tutos sur ce type de sujet !

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hary66 Voir le message
    Mais où pourrais je me diriger pour voir comment faire celà ?
    ça fera un code qui pourra se passer d'appels à .inwaiting mais ça ne corrigera pas le problème (qui reste à définir côté causes...).

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

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Citation Envoyé par hary66 Voir le message
    Ok pour ces quelques conseils.
    Dans un premier temps pour avoir les exceptions dans ton fichier log au lieu de tes except OSError tu peux mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    except serial.SerialException as e:
        logger.critical("Serial error: " + str(e))
    except:
        logger.critical("Error: "  + sys.exc_info()[0])
    et surtout pour ne pas avoir un programme mangeur de CPU ajouter un :
    à la fin du while True (donc en dernière ligne à l'intérieur du while true). Ceci peut aussi arranger ton problème.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Ceci peut aussi arranger ton problème.
    Pour l'instant la seule solution sera de gérer l'erreur avec un try... except...

    On peut bien sur secouer le code.

    Cela changera peut être la fréquence du problème mais ça n'a d'intérêt que si on arrive a le reproduire plus vite (car on pourra tester des idées rapidement) pas si on le reproduit plus lentement (car on mettra des lustres à invalider une idée).

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

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Hello
    Citation Envoyé par hary66 Voir le message
    Le script fonctionne bien pendant quelques heures et puis ça s'arrête
    combien d'heures ? toujours à peu près le même nombre d'heures ? y-a-t-il un screensaver actif sur l'ordinateur ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    combien d'heures ? toujours à peu près le même nombre d'heures ? y-a-t-il un screensaver actif sur l'ordinateur ?
    Ça sort en exception au bout d'un certain temps... enfin c'est ce qu'on lit dans les réponses données par le PO.

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

  18. #18
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 215
    Points : 60
    Points
    60
    Par défaut
    Je n'avais pas vue ces dernières réponses et propositions !

    Et surtout, maintenant, ça à l'aire de fonctionner depuis plusieurs jours sans soucis.

    Je pense que l'ajout dans la boucle while de :
    a amélioré les choses.

    Par contre, je voudrai encore ajouter d'autres appareils qui communiquent en RS232/USB. (6, peut être 10, si celà est viable.

    Pensez vous que cela est viable ? Et comment faire tout ça proprement ?

    Je n'ai pas trouvé de tuto pour ce type d'usage. Auriez vous quelques pistes ?

  19. #19
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,
    vous avez toujours la possibilité de relancer le code en boucle en cas d'erreur non gérée.
    Il faut envisager par exemple que la liaison série soit perdue et qu'il faille re-ouvrir la connexion.

    En déplaçant tout votre code main dans une fonction et l'appeler en boucle sauf en cas d'arrêt volontaire (SystemExit, KeyboardInterrupt).

    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
    import logging
    import time
     
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger()
     
    def run(): # {
        while True: # {
            print("run")
            time.sleep(1)
            raise Exception("test")
        # } while
    # } run
     
    if __name__ == '__main__': # {
     
        while True: # {
            try:
                logger.info("Démarrage de l'application...")
                run()
            except Exception as exc_value:
                logger.exception(exc_value)
            except: # SystemExit, KeyboardInterrupt
                logger.info("Bye")
                break
            else: # Fonction run terminée sans exception (return ou pas de boucle sans fin)
                pass
            finally:
                time.sleep(3) # Reprend/sort de la boucle après 3 secondes
        # } while
    # } __main__
    De plus vous pouvez gérer plus localement les erreurs pour éviter de recevoir des exceptions qui vont arrêter tout le code.

    En attrapant spécifiquement les exceptions de la liaison série par exemple : serial.SerialException

  20. #20
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Citation Envoyé par hary66 Voir le message
    Par contre, je voudrai encore ajouter d'autres appareils qui communiquent en RS232/USB. (6, peut être 10, si celà est viable.

    Pensez vous que cela est viable ? Et comment faire tout ça proprement ?

    Je n'ai pas trouvé de tuto pour ce type d'usage. Auriez vous quelques pistes ?
    Pour se faire il vaut mieux écrire un pilote qui va contenir tous les échanges bas-niveau de votre appareil dans une classe, et ensuite d'utiliser plusieurs instances et gérer les possibles erreurs individuellement, si une sonde tombe en rade par exemple il faut que les autres continuent à acquérir.

    Ça vous permettra de faire un code modulaire qui sera capable de gérer plusieurs instruments peu importe le modèle, chaque instance contiendra son propre pilote pour fonctionner (le protocole de communication, les formules de conversions etc...)
    Le tout est de créer des méthodes (fonctions) communes à ces équipements, qui retourne un contenu respectant le même format.

    Voici un exemple tout simple d'un pilote pour une petite sonde de température/humidité : https://github.com/mcauser/micropython-am2320

    Son usage se résume en quelques lignes, l'instanciation et ses méthodes : sensor.measure(), sensor.temperature(), sensor.humidity()

    Encore que dans cet exemple l'instance i2c est créée à l'extérieur du pilote mais dans votre cas il vaut mieux instancier le port série directement dedans ça évite de devoir gérer la liste des instances série en plus des instances de l'instrument.

Discussions similaires

  1. Mon code s'arrête sans raison
    Par michel.amoakon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/05/2011, 00h29
  2. REGEXP_SUBSTR qui mouline sans raison apparente
    Par eparesys dans le forum SQL
    Réponses: 0
    Dernier message: 03/08/2010, 19h20
  3. RuntimeException qui apparait sans raison apparente
    Par m_piou dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 12/09/2008, 17h04
  4. fenêtre qui s'élargit sans raison apparente
    Par Lcf.vs dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 24/11/2007, 22h02
  5. Réponses: 2
    Dernier message: 17/01/2007, 19h23

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