VDH-Bruno
Membres-
Compteur de contenus
1 146 -
Inscription
-
Dernière visite
-
Jours gagnés
20
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par VDH-Bruno
-
Oui tout à fait d’accord, c’est pour cela que je pense que c’est mal formulé, car comme la plupart des utilisateurs lorsqu’il passe par l’icône la sélection est sans doute faite après, alors qu’avec la touche suppr c’est le contraire, ce qui laisse croire que le comportement de la commande est différent. A+
-
Salut, C’est un peu mal formulé en effet, mais je pense qu’il est fait allusion à l’absence de validation de la sélection lorsqu’une commande est lancé sur des objets sélectionnés au moyen des "grippes". De mémoire je n’ai pas connaissance d’astuces simple à par redéfinir en Lisp la commande _erase pour proposer la validation des objets "grippés" avant d’effacer ou pas la sélection.. A+
-
[RÉSOLU] Enigme ou curiosité Lisp du jour…
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Débuter en LISP
Oui en effet c’eut été mieux, et du même coup m’aurait agréablement simplifié les recherches, merci pour le complément d’information. A+ -
[RÉSOLU] Enigme ou curiosité Lisp du jour…
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Débuter en LISP
Bonjour, Après quelques recherches nocturne (le petit dernier fait ses dents ça aide pour rester éveiller la nuit), je pense avoir trouvé un début de réponse du pourquoi comment. En fait les fonctions Lisp peuvent se classer en plusieurs familles celles que nous définissons au moyen de defun du type USUBR et celle qui sont prédéfinit du type SUBR, pour cette dernière catégorie on peut la subdiviser de façon simplifier en 2 grandes familles : Les fonctions usuelles comme les fonctions prédicats, les opérateurs mathématiques, les fonctions de manipulation de listes, en gros toutes "les fonctions de bibliothèques" qui pourrait très bien être définie en Lisp.(ex : + member - nth eq …) Puis les fonctions primitives (en gros ce qui ne peut être écrit en Lisp) tel que les fonctions d’évaluations et les structure de contrôle (on retrouve la notion introduite précédemment par Carboleum) comme progn, quote, defun, if.. .Fonctions que l’on retrouve sous la syntaxe <forme-speciale> dans la littérature (exception faite pour eval ???). Aux <forme-speciale> on peut également leurs joindre des constructions usuelles non primitives (qui peuvent être définie en Lisp mais pas en AutoLisp) des structures du type <forme-macro> comme and, or, cond… Visiblement c’est la deuxième catégorie de fonctions qui font l’objet de la limite : ; erreur: Impossible d'appliquer la feuille spéciale: Voilà en gros le résumé que je peux faire en l’état de mes connaissances, A+ -
[RÉSOLU] Enigme ou curiosité Lisp du jour…
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Débuter en LISP
Bonsoir Carboleum, C’est une piste de réflexion (de toute façon j’ai pas mieux dans ma besace), à l’occasion j’essayerai de réinstaller un dialecte Lisp sur mon poste histoire de m’assurer que ce n’est pas une limitation propre d’AutoLisp ou peut être en postant sur d’autre forum Lisp à voir… Et si j’ai un peu plus de temps j’essayerai également de lister (tester) d’éventuelles autres fonctions au comportement similaire (histoire de faire le tour de la question). A+ et merci -
[RÉSOLU] Enigme ou curiosité Lisp du jour…
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Débuter en LISP
Re, Une explication qui en vaut une autre, un peu plus difficile à transposer avec la fonction and.. ;) A+ -
[RÉSOLU] Enigme ou curiosité Lisp du jour…
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Débuter en LISP
Bonjour Si Tramber en Lisp cela ce fait trés bien, ou j’ai peut-être pas tout compris à ta réponse, mais en reprenant mes exemples précédents les résultats suivant sont tout à fait cohérent contrairement à ceux de mon premier message. _$ (test + 1 2) 3 Ou _$ (setq f eq) #<SUBR @09a1c488 EQ> _$ (f "a" "a") T A+ ------------ EDIT ------------ En fait c’est une coquetterie qui m’a amener à affecter un symbole représentant un appel enveloppant de la fonction or, en fait je cherchais une fonction qui renvoyait nil lorsque son argument était nil et la fonction or me semblait un bon candidat : _$ (or nil) nil Je pensais ainsi gérer élégamment le retour d’appel de certaines fonctions récursives en modifiant la valeur de la fonction enveloppante (pour les cas ou la valeur de retour valait nil) et éviter ainsi un accumulateur ou un if... -
Bonjour, Me livrant à quelques exercices de styles, que je résumerai à ces quelques lignes: _$ (setq f or) #<SUBR @09a5ea3c OR> _$ (f T T) ; erreur: Impossible d'appliquer la feuille spéciale: OR Ou plus exactement à ces dernières _$ (defun test (f a B) (f a B)) TEST _$ (test or t t) ; erreur: Impossible d'appliquer la feuille spéciale: OR Alors qu’en lisp ce sont des opérations basique pourquoi cette limitation avec or (idem avec and et certainement avec d’autres fonctions..), personnellement je sèche, à tous hasard connaîtriez-vous le pourquoi du comment de ceci? A+
-
Filtrer l'objet -Flèche- et -Point- ect... (Dimlk)
VDH-Bruno a répondu à un(e) sujet de guyc64 dans Routines LISP
Ce fut un plaisir et pour ce qui est du temps disons que je m’efforce de rendre (dans la mesure de mes moyens) un peu de celui que d’autres sur le forum ont bien voulu m’accorder :) A+ -
Bonjour maxwell85, Déjà la première droite ne s’efface plus c’est un progrès ;-) Plus sérieusement j’ai essayé ta manip d’ajustement avec sur le fichier que tu as joint en exemple, alors effectivement il y a des cas où l’ajustement n’est pas possible.. La raison du pourquoi comment est brillamment expliqué en réponse n°17 par bonuscad, car maintenant si tu rapproches tes entités de dessin vers l’origine du SCG avant de lancer lwp2cl tu n’auras plus ce problème et tous tes cercles générés pourrons s’ajuster aux droites adjacentes. J’ai testé pour toi, au passage il y a une coquille dans ton fichier dessin au niveau des sommets 11, 12, 13, de ta polyligne, en théorie il manque une courbure au cas où le détail aurait son importance.. (lance la commande liste sur la polyligne pour t’en convaincre). Voilà en espérant ton problème résolu.. A+
-
Bonjour, Dans ma réponse précédente je n’ai pas répondu sur le fonctionnement de ta commande axe, mais sur la conversion de la polyligne en cercle+ligne car le disfonctionnement que tu as relevé, je l’avais reproduit en testant la version de bonuscad, je proposais d’éventuellement de tester avec l’autre code au cas ou.. A+ (Ps : Pour axe difficile de tester et de répondre il manque les routines associées..)
-
Filtrer l'objet -Flèche- et -Point- ect... (Dimlk)
VDH-Bruno a répondu à un(e) sujet de guyc64 dans Routines LISP
Bonjour, Rien de bien méchant juste un problème de casse dans le nom de symbole, dans ton dessin "dot" s’écrit "DOT", pour t’en convaincre tu lance la commande d’insertion des blocs et tu regardes ceux qui sont définie dans le dessin. Sinon tu fais sur la ligne de repère qui pose problème. (vlax-dump-object (vlax-ename->vla-object (car (entsel))) T) Et dans la console VLisp tu recherche la propriété : ; …. ; ArrowheadBlock = "DOT" ; …. Tu peux intégrer la fonction lisp strcase dans le code mais je conseillerai plutôt de sélectionner comme ceci : (selection (ssget "_X" '((0 . "DIMENSION,LEADER"))) "None" "DOT") Le problème venant de ton style de cotation, pour t’en convaincre crée un nouveau style et affecte lui le bloc "dot" et celui-ci sera ajouté à la base de ton dessin. Cordialement, -
Filtrer l'objet -Flèche- et -Point- ect... (Dimlk)
VDH-Bruno a répondu à un(e) sujet de guyc64 dans Routines LISP
Bonjour, Alors très rapidement, j’ai hélas peu de temps.. La fonction recherche bien DimLdrBlk (Propriété ArrowheadBlock pour les lignes de repères) dans le code posté précédement, sauf qu’elle utilise la même valeur de filtre que pour DimBlk1 et DimBlk2 (Propriété Arrowhead1Block et Arrowhead2Block). Pour inclure une recherche spécifique sur DimLdrBlk, il suffit de créer un argument suplémentaire à la fonction selection, permettant à cette dernière de filtrer de manière spécifique la propriété ArrowheadBlock. Le code modifié à voir si il correspond à ton besoin.. (defun selection (ss Dimblk Dimldrblk / ss1 obj ent i) (setq ss1 (ssadd)) (repeat (setq i (sslength ss)) (cond ((vlax-property-available-p (setq obj (vlax-ename->vla-object (setq ent (ssname ss (setq i (1- i)))) ) ) 'ArrowheadBlock ) (if (= (vla-get-ArrowheadBlock obj) Dimldrblk) (ssadd ent ss1) ) ) (T (if (member Dimblk (list (vla-get-Arrowhead1Block obj) (vla-get-Arrowhead2Block obj) ) ) (ssadd ent ss1) ) ) ) ) ss1 ) Pour tester en fonction de tes critères (selection (ssget "_X" '((0 . "DIMENSION,LEADER"))) "None" "Dot") A+ -
Bonjour maxwell85 En utilisant le code que j’ai posté précédemment c:lwp2cl, tu ne devrais pas avoir ce problème, au passage j’ai inclus la propriété Normal, le code devrait maintenant pouvoir supporter les rotations de SCU. Je me fais en ce moment suffisamment de nœud au cerveau pour comprendre les notions de repères (SCO SCU SCG SCV), ainsi que sur les problèmes de transformation (rotations déplacements échelles) qu’il aurait été «criminel» pour moi de ne pas intégrer cette fonctionnalité dans le code que je diffuse. A+
-
Bonjour, J’ai perdu bonuscad a été le plus rapide, ma proposition de code pour une sélection unique.. ;; Décompose une Polyligne (LWPOLYLINE): ;; Les lignes -> lignes ;; Les arcs -> cercle ;; Tapez lwp2cl pour lancer la commande (defun c:lwp2cl (/ space ent) (vl-load-com) (setq space (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))) (cond ((eq (cdr (assoc 0 (entget (setq ent (car (entsel)))))) "LWPOLYLINE") (foreach obj (vlax-invoke (vlax-ename->vla-object ent) 'Explode) (if (eq (vla-get-ObjectName obj) "AcDbArc") ((lambda (obj1 obj2) (foreach prop '(Layer Color LineType LinetypeScale Normal) (vlax-put obj2 prop (vlax-get obj1 prop)) ) (vla-Delete obj1) ) obj (vla-AddCircle space (vla-get-Center obj) (vla-get-Radius obj)) ) ) ) (entdel ent) ) ) (princ) ) EDIT: Intégration de la propriété Normal au code pour supporter d’éventuelles rotations du SCU sur ses axes X et Y.
-
Parcourir les entités qui composent un bloc
VDH-Bruno a répondu à un(e) sujet de Bortch59 dans Débuter en LISP
Bonjour, Pour se balader dans un bloc la bonne réponse est celle de (gile ). Comme je vois que tu travailles par pointage si ton code le permet, je voulais rappeler la possibilité d’extraire directement le nom de l’entité sélectionné à l’intérieur d’une entité complexe au moyen des fonctions nentsel ou nentselp. Ces fonctions en plus de retourner la sous entité sélectionné, elles renvoient également en dernière position de liste le nom de l’entité principal ce qui dans ton cas permet d’interroger les codes DXF contenant d’éventuel changement d’échelle de l’entité "INSERT". Exemple de code pour obtenir par pointage le rayon d’un cercle composant une référence de bloc corrigé du facteur d’échelle. ;; En supposant l'echelle d'insertion uniforme (code DXF 41=42=43) ((lambda (nsel) (* (cdr (assoc 40 (entget (car nsel)))) ; rayon du cercle (cdr (assoc 41 (entget (car (last nsel))))) ; echelle d'insertion du bloc ) ) (nentsel); ou (nentselp) ) Ces fonctions renvoient également une matrice de transformation dont on peut extraire la transformation à appliquer à l’entité sélectionné. Autre exemple de code en exploitant les informations retournées par la matrice de transformation ;; En supposant l'échelle d'insertion uniforme en X Y Z ((lambda (nsel) (* (cdr (assoc 40 (entget (car nsel)))) ; rayon du cercle (vlen (caaddr nsel)) ; facteur d'echelle ) ) (nentsel) ) ;; Retourne la norme d'un vecteur (defun vlen (v) (distance '(0. 0. 0.) v) ) ;;ou (defun vlen (v) (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) v))) ) A+ -
comment faire une fonction si?
VDH-Bruno a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonjour, Oui, attention à fix car il n’arrondi pas à la partie entière la plus proche, en fait la fonction fix tronque la partie décimal d'un reel (c’est une troncature de la partie décimal). Exemple : $ (+ 5 -1.86517e-014) 5.0 _$ (fix (+ 5 -1.86517e-014)) 4 (+ 5 -1.86517e-014) est une valeur approchée par défaut de 5 donc la troncature renvoie 4 _$ (+ 5 1.86517e-014) 5.0 _$ (fix (+ 5 1.86517e-014)) 5 Et (+ 5 1.86517e-014) est une valeur approchée par excès de 5 donc la troncature renvoie 5. (Ps: Finalement la solution avec la fonction round du message précédent est peut être plus sécurisante dans ton cas) Bon courage -
Bonjour, Personnellement si j’ai cité ce numéro c’est parce que je le trouve pas trop mal foutu, pour accéder à de nouvelles connaissances il faut pouvoir rattacher le sujet à quelque chose de concrets ou des à connaissances proches, et je pense qu’ils ont réussi dans leurs numéro. De plus un magazine c’est souvent bien plus digeste qu’un livre pour commencer, après à chacun d’approfondir suivant ses besoins, cerise sur le gâteau c’est en kiosque sans obligation d’achat, alors à feuilleter pour ce faire une idée en fonction de son cas (et pas besoin de commander). Tramber c’est en cours de lecture, à la base c’est un sujet dont j’en connais plus le nom qu’autre chose, je sais qu’à une époque leurs méconnaissances m’ont empêché d’accéder à la maîtrise des milieux continues en RDM. Oui c’est vrai on a beaucoup de chance il est très généreux pour ça, c’est bien de le rappeler (gile) Merci pour test codes et d’avoir fait les liens (notamment celui sur les vecteurs qui est, je pense un bon préalable avant les Matrices) je pensais les rajouter par la suite si le sujet avait de l’écho. Patrick_35 Merci également pour le lien depuis la refonte du site je n’arrivais plus à remettre la main dessus. A+
-
Bonsoir, Je voulais juste faire remarquer aux CADXPIEN(NE) du forum qui souhaiteraient comme moi combler quelques lacunes ou dépoussiérer des notions scolaires qui dates.. <_< Qu’il y a actuellement en librairie le hors série n°44 du magasine Tangente qui traite du sujet, voilà je pense que pour des utilisateurs d’un logiciel de DAO ce n’est pas inintéressant de se réconcilier même tardivement avec la géométrie, les espaces vectoriels et le calcul matriciel. :) A+ (Ps : J’ai pas fait de lien sur leur site, ce dernier n’étant pas à jour).
-
supression d'un atom dans une liste
VDH-Bruno a répondu à un(e) sujet de azop dans Pour aller plus loin en LISP
Bonjour, Supprimer l’atome en 3éme position ou supprimer l’atome qui vaut 3 ??? Si tu veux supprimer toutes les occurrences de l’atome spécifié de ta liste utilise vl-remove _$ (vl-remove 3 '(1 2 3 4 5 3)) (1 2 4 5) Sinon dans la bibliothèque de fonctions de manipulation de liste de (gile), il peut y avoir des fonctions qui peuvent t’intéresser, comme par exemple: Pour ne supprimer que la première occurrence de l’atome spécifié ;; REMOVE-ELE ;; Retourne la liste sans la première occurence de l'expression (defun remove-ele (ele lst) (if (equal ele (car lst)) (cdr lst) (cons (car lst) (remove-ele ele (cdr lst))) ) ) _$ (remove-ele 3 '(1 2 3 4 5 3)) (1 2 4 5 3) Et pour supprimer le troisième atome de la liste (en fonction de sa position), tu as REMOVE-I ;; REMOVE-I ;; Retourne la liste privée de l'élément à l'indice spécifié ;; (premier élément = 0) (defun remove-i (ind lst) (if (or (zerop ind) (null lst)) (cdr lst) (cons (car lst) (remove-i (1- ind) (cdr lst))) ) ) _$ (remove-i 2 '(1 2 3 4 5 3)) (1 2 4 5 3) ----------- Edit: Ajout d'une dernière proposition ------------- J’en rajouterai une petite dernière que j’avais donné récemment qui permet de supprimer toutes les occurrences d’un atome à toutes les profondeurs d’une liste ;;; Supprime toutes les occurrences d'un élément à toutes les profondeurs d'une liste ;;; (remove-prof 'a '(b a d (b (e a g) a) a e)) -> (B D (B (E G)) E) (defun remove-prof (x l) (cond ((null l) nil) ((equal x (car l)) (remove-prof x (cdr l))) ((listp (car l)) (cons (remove-prof x (car l)) (remove-prof x (cdr l)))) (T (cons (car l) (remove-prof x (cdr l)))) ) ) A+ -
comment faire une fonction si?
VDH-Bruno a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonjour, Je complète ma réponse précédente car avec un peu de recul, je m’aperçois que n’ai pas forcément donné la méthode la plus simple en suggérant d’arrondir tes données à la précision souhaité. Pour comparer l’égalité de 2 réels dont on ne maitrise pas la précision, il est plus simple d’utiliser la fonction equal qui permet de préciser une tolérance. Dans ton cas une tolérance à 0.001 devrait suffire. Exemple : _$ (setq N1 (+ 5 1.86517e-014)) 5.0 _$ (= 0 (- N1 (fix N1))) nil _$ (equal 0.0 (- N1 (fix N1)) 0.001) T _$ -
comment faire une fonction si?
VDH-Bruno a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonjour, Tout d’abord à te lire je ne suis pas certain que tu es bien pris la peine de relire ce qui t’a été expliqué sur le if, cond et que tu ais clairement reformuler ce que tu cherchais à faire… Bon dans le doute.. Pourtant dans l’aide d’AutoCAD, elle est bien expliquée.. elle retourne la partie entière d’un nombre.. (fix N1) c’est un peu plus simple à contrôler que (atof (rtos N1 2 0)) Normal car N1 est le résultat de L1/2.50, L1 étant la distance entre 2 points tu peux très bien avoir un nombre avec beaucoup plus de décimal que ce que peut afficher ta ligne de commande revoir à ce sujet ma réponse n°29 La fonction ROUND de (gile) doit pouvoir t’aider ;;; ROUND (gile) ;;; Arrondit à la valeur la plus proche en fonction de prec ;;; (round pi 0.01) -> 3.14 ;;; (round pi 1e-5) -> 3.14159 ;;; (round 5456.50 1) -> 5457 ;;; (round 5456.50 100.0) -> 5500.0 (defun round (num prec) (if (zerop (setq prec (abs prec))) num (* prec (fix ((if (minusp num) - +) (/ num prec) 0.5))) ) ) Un peu de relecture serait pas mal .. S’écrit comme cela C’est la réponse 8 de Carboleum même si il y avait une petite coquille. Ton code corrigé (mais non optimisé) ;; SWITCH (fonction d'AIGUILLAGE corp du programme) (defun switch (N250 L1 A) (setq L1 (round (+ L1 (* A 0.2)) 0.01) N1 (round (/ L1 2.50) 0.01) ) (if (and (< N1 N250) (= A 0)) ; si j.ai assez de banche et que je n.ai pas d.arrêt (if (< L1 2.50) ; et si la longueur de mon voile et plus petit que 2.50m (setq reponse (strcat "On passe au test suivant il faut une banche plus petite" ) ) ; alors il faut une banche plus petite que 2.50m (setq reponse (strcat "on met " (rtos (atoi (rtos N1)) 2 0) " banche de 250 en place et reste à coffrer ce qui manque" ) ) ; sinon on met une banche de 250 et faire un autre programme ) ; fin du 1er if (if (< L1 2.50) (setq reponse (strcat "autre test et mettre une banche plus petite") ) ; alors il faut une banche plus petite que 2.50m (if (= 0 (- N1 (atof (rtos N1 2 0)))) ; si N1 est un enier (setq reponse (strcat (rtos N1 2 0) " banches de 250+ 1 banche de 62.5") ) ; Je met une banche de 250 + 1 banche de 62.5 (setq reponse (strcat (rtos (atoi (rtos N1)) 2 0) " banches de 250 + 1 de 250" ) ) ; si N1 est un réel, je prend N1 entier et je lui rajoute une 2.50 ) ; fin du 3ème if ) ; fin du 2ème if ) ) Teste n°5 bis _$ (switch 6 12.3 1) "5 banches de 250+ 1 banche de 62.5" C'est Ok! Attention ce n’est pas parce qu’un code fonctionne qu’il est forcément bien écrit, je t’invite grandement à reformuler tes cas avec la l’expression cond tu y gagneras en clartés, et peut être trouvera tu des optimisations à faire dans certaines clauses. Cordialement -
comment faire une fonction si?
VDH-Bruno a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Re, Regarde du côté de la fonction fix et les réponses précédentes Tu le rajoute ou dans ton code? Relis ce qui t’a été expliqué sur le if, cond et essai de reformuler clairement ce que tu cherches à faire, tu devrais trouver la solution, si tu n’y arrive toujours pas poste un code plus complet qui peut être testé car comme cela difficile de voir ou ça coince problème d’algorithme, syntaxe, les deux ??? A+ -
comment faire une fonction si?
VDH-Bruno a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonjour, Non pas forcément, cela dépend du nombre de décimal et comme rtos opère un arrondi, dans ce type d’opération il n’est pas étonnant que le résultat soit différent de 0 (résultat à l’arrondi près). Je t’invite à lire ce sujet Éléments de syntaxe AutoLISP plus particulièrement l'article sur les type de données A bon les deux premières lignes font 5 ??????? Ce que tu dis car écris comme cela rien ne le prouve et surtout pas le résultat que tu renvoi, pour illustrer ce que je veux expliquer tape ce qui suit dans ta console Visual Lisp : _$ (setq val 1.000000000333333) 1.0 _$ val 1.0 _$ (= 1 val) nil J’ai affecté la valeur 1.000000000333333 à la variable val, la valeur étant supérieur à la précision d’affichage de ma console quand j’interroge val la valeur 1.0 m’est retourné (cela ne veut pas dire que val vaut 1.0). Donc logiquement le teste (= 1 val) retourne nil (faux). C’est sans doute le cas dans l’exemple que tu donnes suites à différentes affectations mais si tu écris : _$ (setq N1 5.0) 5.0 Maintenant je veux bien croire que N1 vaut 5 et que: _$ (zerop (- N1 (atof (rtos N1 2 0)))) T Donc zero.. Sinon je ne vois pas trop l’intérêt de faire des (- N1 N1) et des (- N1 (atof (rtos N1 2 0)) à part se prendre les pieds dans le tapis.. ;) A+ -
Bonjour, Ce à quoi j’ajouterai volontiers qu’il faut également savoir si d’autres savent ce que l’on fait et pourquoi… <_< Personnellement je dessine depuis longtemps et j’ai longtemps exercé comme dessinateur à l’exécution, j’ai voté : Uniquement en 2D sur un plan, type planche à dessin & cotation dans l’espace objet. Cela pas par manque de connaissances non, mais parce que dans du travail collaboratif et pour de la production de plans, pour être efficace il faut utiliser des méthodes de travail commune, il faut privilégier celles qui sont reconnaissable, compréhensible et utilisable par le plus grand nombre.. (même si ce ne sont pas les meilleurs) Donc les bonnes vieilles méthodes c’est peut-être pas toujours les plus efficaces mais elles ont fait leurs preuves.. Hélas pour certaines personnes qui gère difficilement (ou qui subissent) la pression, la rigueur n'est plus souvent au rendez-vous..
