Aller au contenu

onossa

Membres
  • Compteur de contenus

    33
  • Inscription

  • Dernière visite

Contact Methods

  • Website URL
    http://

onossa's Achievements

Newbie

Newbie (1/14)

0

Réputation sur la communauté

  1. Merci pour ta réponse Gile. Bonne après midi.
  2. Merci Gile, C'est exactement cela. J'entend beaucoup parler quele lisp cessera sur les futures versions d'AutoCA. Mon opinion est différente. Qu'en pesnes tu ? Entre lips, vba et c++, quelle language te semble le plus adapté à un développement long terme, déploiement, et ple plus à même de fonctionner sur tous postes (os / versiosn d'AutoCAD, US ou FR). Merci beaucoup Gile, Amicalement
  3. Bonjour Gile, et merci pour ta réponse si rapide. Au fait, placer le vlx sur serveur, me permet d'apporter quelques ajouts quand besoin est, et que les utilisateurs puissent en bénéficier quand ils allument leur PC. protéger l'accès aux fonctions, est lié au fait d'avoir des personnes qui souhaiteraient bénéficier de ces fonctions,s ans avoir le profil de dessinateur. Ce sont des petits plus que je souhaite conserver entre dessinateurs, à tort ou à raison. Certains arrivent à "apploader", et l'idée serait qu'ils ne puissent pas s'en servir si ils ne font pas partie des membres autorisés. De plus, je ne dois pas modifier les fichiers acaddoc ou mnl. Juste un ajout dans startup suite m'est autorisé. je pense que le (if (member... suffira dans une fonction startup. Je suis preneur de toute remarque ou conseil Gile. Dernière question: pour une société qui désire implémenter un ruban supplémentaire avec quelques fonctions dédiées au métier: quel language penses tu le plus pertinent, sachant qu'il y a un facteur déployement et update non négligeable ? Merci pour tes lumières et bonne journée. Amicalement,
  4. Bonjour, Utilisateur ponctuel d'Autolisp, je souhaiterai autoriser l'accès aux petites fonctions contenues dans un lisp qu'à deux collègues. (les deux seuls dessinateurs). Le fichier est un vlx issu d'un lsp, placé sur un serveur. L'idée est de placer une fonction s::startup qui identifierai le login de l'utilisateur, et sortirai d'AutoCAd si celui-ci n'est pas un de ceux stipulés. Je pensais à la fonction If + or, mais, même si je n'ai jamais été un programmateur de lisp aguérri, je me suis rouillé depuis le temps et je n'arrive pas dans le OR, à lui faire "voir" l'utilisateur autorisé.. Quelqu'un pourrait m'aider ?? Merci à tous ! (defun s::startup () (setq lq (getvar "loginname")) (if (or (/= lq "userautorise1") (/= lq "userautorise2") (/= lq "userautorise3") ) (progn (alert "login non-autorisé") ;(command "quit" "n") ) ) ) (defun c:toto () (command "zoom" "ex") )
  5. Bonjour, et merci pour vos réponses. Au fait, le chargement auto se fait via le Startup suite de la boite de dialogue appload. Pour ce qui est du code, je redéfini les fonctions QSAVE SAVEAS et REGEN afin que celles-ci updatent le nombre total de présentations, afin que le champ du bloc cartouche qui l'utilise soit renseigné/updaté. ;;;; nouvelle définition de la commande QSAVE (pour update du champ du nombre total de présentations) (defun c:QSAVE () (layoutcount) (title_expand) (command ".QSAVE") ) ;;;; Fin nouvelle définition de la commande QSAVE Pour layoutcount: ;;; Début de la mise à jour automatique du nombre total de présentation (comptage et update du champ) (defun layoutcount ( / acadObj acDoc acDocLayouts acDocSumInfo) (vl-load-com) (setq acadObj (vlax-get-acad-object)) (setq acDoc (vlax-get-property acadObj 'ActiveDocument)) (setq acDocLayouts (vlax-get-property acDoc 'Layouts)) (setq acDocSumInfo (vlax-get-property acDoc 'SummaryInfo)) ;; Subtract one for the Model tab (setq sLayoutCount (itoa (1- (vlax-get-property acDocLayouts 'Count)))) (if (= (strlen sLayoutCount) 1) (setq sLayoutCount (strcat "0" sLayoutCount))) ) Si le nombre total est à 1 chiffre, je rajoute un 0 devant.. Pour title_expand, il s'agit de récupérer la valeur d'un attribut du cartouche (si existant) afin de renseigner un champ personnalisé du fichier, afin que celui-ci soit récupéré dans Productstream... ;;;;;;;;;;;;;;;; Extraction du titre depuis le block ou dernière ligne cartouche non-sketch vers propriétés fichier pour Vault (defun title_expand ( / kWord acadObj acDoc acDocSumInfo nCustomProps loopCnt customFieldName fieldValue errHandler nombloc etiq_title etiq_title2 valtitle) (setq ss nil) (setq ss (ssget "x" '((-4 . "")))) (setq etiq_title "title_3") (setq etiq_title2 "Description.1") (if (/= ss nil) (progn (while (setq Ent (ssname ss 0)) (setq tempEnt Ent) (while (setq tempEnt (entnext tempEnt)) (setq EntData (entget tempEnt)) (if (and (= (cdr (assoc 0 EntData)) "ATTRIB") (or (= (cdr (assoc 2 EntData)) etiq_title) (= (cdr (assoc 2 EntData)) etiq_title2) ) ) (progn (setq valtitle (cdr (assoc 1 EntData))) ) ) (ssdel Ent ss) ) ) ) ) (princ valtitle) (if (/= valtitle nil) (progn (vl-load-com) (setq acadObj (vlax-get-acad-object)) (setq acDoc (vlax-get-property acadObj 'ActiveDocument)) (setq acDocSumInfo (vlax-get-property acDoc 'SummaryInfo)) (setq customFieldName "DrawingDesignation.1") (if (or (/= customFieldName "")(/= customFieldName nil)) (progn ;; Test to see if the Field is already created or not (setq errHandler (vl-catch-all-apply 'vlax-invoke-method (list acDocSumInfo 'GetCustomByKey customFieldName 'fieldValue))) ;; Get the value for the field (setq fieldValue valtitle) ;; Test error ;;(vl-catch-all-error-message errHandler) (if (= errHandler nil) ;;Update extry (vlax-invoke-method acDocSumInfo 'SetCustomByKey customFieldName fieldValue) ;; Field doesn't exist... creating entry (vlax-invoke-method acDocSumInfo 'AddCustomInfo customFieldName fieldValue) ) (progn ;; Test to see if the Field is already created or not (setq errHandler (vl-catch-all-apply 'vlax-invoke-method (list acDocSumInfo 'GetCustomByKey customFieldName 'fieldValue))) ;; Test error ;;(vl-catch-all-error-message errHandler) ;(if (= errHandler nil) ;;Remove extry ; (vlax-invoke-method acDocSumInfo 'RemoveCustomByKey customFieldName) ;) ) ) ) ) ) ) ;;;;;;;;;;;;;;;;; FIN Extraction du titre depuis le block ou dernière ligne cartouche non-sketch vers propriétés fichier pour Vault Ces fonctions sont toutes définies dans un fichier Lisp que le compile dans un VLX et que je place dans un lecteur réseau. Quand je fai un appload et que je charge manuellement, ça marche... Voilà, merci pour votre précieuse aide.
  6. Bonjour, J'utilise un vlx chargé au démarrage. Quand je lance une commande qui y est définie, j'ai: error: bad argument type: lselsetp nil dans la foulée, si j'appload manuellement le même VLX, là ça fonctionne.... Si quelqu'un a une idée, ce serait sympa.... Merci !!
  7. Cette fonctionnalité m'intéresserai: récupérer des valeurs d'attributs et les envoyer vers un tableau AutoCAD: la v2009 a une fonction dédiée à cela ?? Et en plus des valeurs, il est possible de quantifier tel ou tel bloc dans le tableau ? Merci pour vos lumières !
  8. merci une fois de plus bonuscad ! - a quel niveau pourrais-je mettre en place une condition qui testerai par exemple un valeur non nulle de radius afin de nommer de façon particulière le POINT de laligne concernée ? (il s'agirai d'avoir des point de tangeance en entrée et sortie d'arc de polyligne qui s'appelerai TP1 puis TP2, et pour l'arc suivan TP4 et TP5 ? - est il possible de récupérer le centre de chaque arc de la pline,, afin d'encréer des lignes supplémentairs avec les coordonnées desdits centres ? Merci encore pour ton aide ! [Edité le 25/3/2009 par onossa]
  9. J'ai réussi à trouver: une pettie fonction qui défini la précision avant chaque mappage. Le HIC qui reste: dans la colonne des RADIUS (dernière colonne), je souhaitais que les valeurs "0" soient remplacées par un tiret "-" . Le hic c'est que les autres colonnes sont succeptibles d'avoir le meme type de valeur "0", et que je souahiterai là les conserver... Comment ne balayer que la dernière colonne pour tester et remplacer les "0" gênants par des "-" Merci pour votre aide... (vl-load-com) (defun c:track ( / js obj ename AcDoc Space pr nb lst_id-seg lst_pt lst_length lst_alpha lst_rad all_path j end_pos id_path fonts_path file_shx nw_style dist_start dist_end pt_start pt_end seg_len seg_bulge rad alpha oldim oldlay h_t w_c ename_cell n_row n_column) (princ "\nSélectionner une polyligne.") (while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))) (princ "\nSélection vide, ou n''est pas une polyligne valable! lancez CONVERT > Polyline...") ) (setq obj (ssname js 0) ename (vlax-ename->vla-object obj) AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) pr -1 nb 0 lst_id-seg '() lst_pt '() lst_cpl '(0.0) lst_length '(0.0) lst_alpha '(0.0) lst_rad '(0.0) ) (cond ((null (tblsearch "LAYER" "0")) (vla-add (vla-get-layers AcDoc) "0") ) ) (cond ((null (tblsearch "STYLE" "Tahoma_Table")) ;(setq all_path (getenv "ACAD") j 0) ;(while (setq end_pos (vl-string-position (ascii ";") all_path)) ;(setq id_path (substr all_path 1 end_pos)) ;(if (wcmatch (strcase id_path) "*FONTS*") ;(setq fonts_path (strcat id_path "\\")) ;) ;(setq all_path (substr all_path (+ 2 end_pos))) ;) ;(setq file_shx (getfiled "Selectionnez un fichier de police" fonts_path "shx" 8)) (if (not file_shx) (setq file_shx "Tahoma") ) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Tahoma_Table")) (mapcar '(lambda (pr ) (vlax-put nw_style pr ) ) (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag) (list file_shx 0.0 (/ (* 15.0 pi) 180) 1.0 0.0) ) ;(command "_.ddunits" ;(while (not (zerop (getvar "cmdactive"))) ;(command pause) ) ) (setq cpl (atof "0")) (repeat (fix (vlax-curve-getEndParam ename)) (setq dist_start (vlax-curve-GetDistAtParam ename (setq pr (1+ pr))) dist_end (vlax-curve-GetDistAtParam ename (1+ pr)) pt_start (vlax-curve-GetPointAtParam ename pr) pt_end (vlax-curve-GetPointAtParam ename (1+ pr)) seg_len (- dist_end dist_start) cpl (+ cpl seg_len) seg_bulge (vla-GetBulge ename pr) rad (if (zerop seg_bulge) 0.0 (/ seg_len (* 4.0 (atan seg_bulge)))) alpha (if (zerop seg_bulge) (angle pt_start pt_end) 0.0) lst_id-seg (cons nb lst_id-seg) lst_pt (cons pt_start lst_pt) lst_length (cons seg_len lst_length) lst_cpl (cons cpl lst_cpl) lst_rad (cons (abs rad) lst_rad) lst_alpha (cons alpha lst_alpha) nb (1+ nb) ) ;(princ lst_cpl) ;(princ lst_length) ) (setq lst_id-seg (cons nb lst_id-seg) lst_pt (cons pt_end lst_pt) oldim (getvar "dimzin") oldlay (getvar "clayer") ) (setvar "dimzin" 0) (setvar "clayer" "0") (initget 9) (setq ins_pt_cell (getpoint "\nPoint d'insertion haut gauche du tableau: ")) (initget 6) ;(setq h_t (getdist ins_pt_cell (strcat "\nHauteur du texte <" (rtos (getvar "textsize")) ">: "))) (setq h_t (atof "35")) (if (null h_t) (setq h_t (getvar "textsize")) (setvar "textsize" h_t)) (initget 7) ;(setq w_c (getdist ins_pt_cell "\nLargeur des cellules: ")) (setq w_c (atof "280")) (vla-addTable Space (vlax-3d-point ins_pt_cell) (+ 3 nb) 7 (+ h_t (* h_t 0.75)) w_c) (setq ename_cell (vlax-ename->vla-object (entlast)) n_row (+ 2 nb) n_column -1) (vla-SetCellValue ename_cell 0 0 (vlax-make-variant (strcat ;" Objet: " (cdr (assoc 0 (entget obj))) (cdr (assoc 8 (entget obj))) ;" Longueur totale = " (rtos (vlax-get ename 'Length)) ) 8 ) ) (defun rtos0 (n0)(rtos n0 2 0)) (defun rtos1 (n1)(rtos n1 2 1)) (defun angtos2 (n2)(angtos n2 0 2)) (vla-SetCellTextStyle ename_cell 0 0 "Tahoma_Table") (vla-SetCellTextHeight ename_cell 0 0 (vlax-make-variant h_t 5)) (foreach n (mapcar'list (append (mapcar 'itoa lst_id-seg) '("POINT")) (append (mapcar 'rtos0 lst_cpl) '("CPL")) (append (mapcar 'rtos0 (mapcar 'car lst_pt)) '("EASTING")) (append (mapcar 'rtos0 (mapcar 'cadr lst_pt)) '("NORTHING")) (append (mapcar 'rtos1 lst_length) '("GAP")) (append (mapcar 'angtos2 lst_alpha) '("HEADING")) (append (mapcar 'rtos0 lst_rad) '("RADIUS")) ) (mapcar '(lambda (el) (vla-SetCellValue ename_cell n_row (setq n_column (1+ n_column)) ;(if (or (eq (rtos0 0.0) el) (eq (angtos2 0.0) el)) (vlax-make-variant "-" 8) (vlax-make-variant el 8)) (if (eq (angtos2 0.0) el) (vlax-make-variant "-" 8) (vlax-make-variant el 8)) ) (vla-SetCellTextStyle ename_cell n_row n_column "Tahoma_Table") (vla-SetCellTextHeight ename_cell n_row n_column (vlax-make-variant h_t 5)) ) n ) (setq n_row (1- n_row) n_column -1) ) (setvar "dimzin" oldim) (setvar "clayer" oldlay) (prin1) )
  10. Et me revoilà, avec un peu de temps pour me penché son ce lisp, qui génère un tableau (un vrai) d'après les points de controle d'une polyligne. J'ai repris le lisp excellent de Bonuscad, et essayé de le mettre conforme à mes besoins: - Ajout d'une colonne pour les longueurs cumulées, - style de texte prédéfini (tahoma) - Layer 0 pour le tableau - Hauteur de texte, lignes et colonnes de tableau prédéfinies (je souhaite une mise en forme figée) Le seul point qui coince, et que je n'arrive pas à résoudre, est que j'aimerai avoir des précisions différentes en fonction de la colonne concernée: la colonne GAP doit avoir une décimale de précision, et HEADING deux décimales. les autres colonnes à 0 décimales. Or, comme je m'appui sur les précisions courantes... J'ai essayé de mettre en place ces précisions dans la ligne de mapcar 'rtos, mais je dois me planter quelque part... Si vous avez la solution.... Merci encore Bonuscad pour ton lisp. (vl-load-com) (defun c:track ( / js obj ename AcDoc Space pr nb lst_id-seg lst_pt lst_length lst_alpha lst_rad all_path j end_pos id_path fonts_path file_shx nw_style dist_start dist_end pt_start pt_end seg_len seg_bulge rad alpha oldim oldlay h_t w_c ename_cell n_row n_column) (princ "\nSélectionner une polyligne.") (while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))) (princ "\nSélection vide, ou n''est pas une polyligne valable! lancez CONVERT > Polyline...") ) (setq obj (ssname js 0) ename (vlax-ename->vla-object obj) AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) pr -1 nb 0 lst_id-seg '() lst_pt '() lst_cpl '(0.0) lst_length '(0.0) lst_alpha '(0.0) lst_rad '(0.0) ) (cond ((null (tblsearch "LAYER" "0")) (vla-add (vla-get-layers AcDoc) "0") ) ) (cond ((null (tblsearch "STYLE" "Tahoma_Table")) ;(setq all_path (getenv "ACAD") j 0) ;(while (setq end_pos (vl-string-position (ascii ";") all_path)) ;(setq id_path (substr all_path 1 end_pos)) ;(if (wcmatch (strcase id_path) "*FONTS*") ;(setq fonts_path (strcat id_path "\\")) ;) ;(setq all_path (substr all_path (+ 2 end_pos))) ;) ;(setq file_shx (getfiled "Selectionnez un fichier de police" fonts_path "shx" 8)) (if (not file_shx) (setq file_shx "Tahoma") ) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Tahoma_Table")) (mapcar '(lambda (pr ) (vlax-put nw_style pr ) ) (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag) (list file_shx 0.0 (/ (* 15.0 pi) 180) 1.0 0.0) ) ;(command "_.ddunits" ;(while (not (zerop (getvar "cmdactive"))) ;(command pause) ) ) (setq cpl (atof "0")) (repeat (fix (vlax-curve-getEndParam ename)) (setq dist_start (vlax-curve-GetDistAtParam ename (setq pr (1+ pr))) dist_end (vlax-curve-GetDistAtParam ename (1+ pr)) pt_start (vlax-curve-GetPointAtParam ename pr) pt_end (vlax-curve-GetPointAtParam ename (1+ pr)) seg_len (- dist_end dist_start) cpl (+ cpl seg_len) seg_bulge (vla-GetBulge ename pr) rad (if (zerop seg_bulge) 0.0 (/ seg_len (* 4.0 (atan seg_bulge)))) alpha (if (zerop seg_bulge) (angle pt_start pt_end) 0.0) lst_id-seg (cons nb lst_id-seg) lst_pt (cons pt_start lst_pt) lst_length (cons seg_len lst_length) lst_cpl (cons cpl lst_cpl) lst_rad (cons (abs rad) lst_rad) lst_alpha (cons alpha lst_alpha) nb (1+ nb) ) ;(princ lst_cpl) ;(princ lst_length) ) (setq lst_id-seg (cons nb lst_id-seg) lst_pt (cons pt_end lst_pt) oldim (getvar "dimzin") oldlay (getvar "clayer") ) (setvar "dimzin" 0) (setvar "clayer" "0") (initget 9) (setq ins_pt_cell (getpoint "\nPoint d'insertion haut gauche du tableau: ")) (initget 6) ;(setq h_t (getdist ins_pt_cell (strcat "\nHauteur du texte <" (rtos (getvar "textsize")) ">: "))) (setq h_t (atof "35")) (if (null h_t) (setq h_t (getvar "textsize")) (setvar "textsize" h_t)) (initget 7) ;(setq w_c (getdist ins_pt_cell "\nLargeur des cellules: ")) (setq w_c (atof "280")) (vla-addTable Space (vlax-3d-point ins_pt_cell) (+ 3 nb) 7 (+ h_t (* h_t 0.75)) w_c) (setq ename_cell (vlax-ename->vla-object (entlast)) n_row (+ 2 nb) n_column -1) (vla-SetCellValue ename_cell 0 0 (vlax-make-variant (strcat ;" Objet: " (cdr (assoc 0 (entget obj))) (cdr (assoc 8 (entget obj))) ;" Longueur totale = " (rtos (vlax-get ename 'Length)) ) 8 ) ) (vla-SetCellTextStyle ename_cell 0 0 "Tahoma_Table") (vla-SetCellTextHeight ename_cell 0 0 (vlax-make-variant h_t 5)) (foreach n (mapcar'list (append (mapcar 'itoa lst_id-seg) '("POINT")) [b] ;;; Je pensais mettre ici la précision de la conversion réel / string ;;; (append (mapcar 'rtos lst_cpl 2 0) '("CPL")) (append (mapcar 'rtos lst_cpl) '("CPL"))[/b] (append (mapcar 'rtos (mapcar 'car lst_pt)) '("EASTING")) (append (mapcar 'rtos (mapcar 'cadr lst_pt)) '("NORTHING")) (append (mapcar 'rtos lst_length) '("GAP")) (append (mapcar 'angtos lst_alpha) '("HEADING")) (append (mapcar 'rtos lst_rad) '("RADIUS")) ) (mapcar '(lambda (el) (vla-SetCellValue ename_cell n_row (setq n_column (1+ n_column)) (if (or (eq (rtos 0.0) el) (eq (angtos 0.0) el)) (vlax-make-variant "-" 8) (vlax-make-variant el 8)) ;(if (eq (rtos 0.0) el) (vlax-make-variant "-" 8) (vlax-make-variant el 8)) ) (vla-SetCellTextStyle ename_cell n_row n_column "Tahoma_Table") (vla-SetCellTextHeight ename_cell n_row n_column (vlax-make-variant h_t 5)) ) n ) (setq n_row (1- n_row) n_column -1) ) (setvar "dimzin" oldim) (setvar "clayer" oldlay) (prin1) )
  11. Bonjour, je cherche à réduire le nombre de calques présent dans un dessin qui sera ensuite inséré dans un dessin parent. Ce dessin parent contenant plus de 250 calques, je souhaiterai ne pas le poluer par l'apport de nombreux calques. aussi, vu la faible importance de l'architecture du dessin à insérer, je souhaiterai aapliquer les propriétés définies pr chacun des calques présents, aux entités que ceux-ci contienent respectivement. Ce qui en résumé veut dire: le contraire de Ducalque: chaque entité a ses propriétés héritées de celles du calque auquel il appartient. Ceci afin de, ensuite, passer toutes ces entités vers un seul calque, et d'avoir néanmoins toutes les différences visuelles initiales... Dans la règle de l'art, c'est plutot le contraire qu'on s'attache à faire... Si quelqu'un voit une hypothèse de code pour cela...ça me serai d'un grand secours ! Olivier
  12. Bonjour (Gile), Je viens de tester ton code, et il fonctionne parfaitement: Il traite les mtext, attributs, et tous les présentations si on valide sans selectionner d'enttié. Merci beaucoup !
  13. Bonjour, je cherche un moyen de supprimer (ou plutot convertir en valeur texte "normale", tous les champs présents dans mon dessin. Ils sont tous placés dans l'espace papier, dans differents onglets, et sont sous forme, soit des attributs, soit des mtexts, voir des textes simples... J'ai lu un post où il était question de filter pour les selectionner, mais je n'en voit pas la possibilité, vu que l'intitulé "champ" ou "field" n'existent pas... Merci pour vos idées et votre aide !!!
  14. C'est bien cela Phil. Et étant novice, c'est ton approche qui me semble logique, me demandant comment serait-il possible de pointer autre chose que le block PAPA, puis ensuite l'inspecter. Un petit détail concernanrt le point 04: c'est éventuellement la rotation du texte lui même que le champ récupère. Champ mis en place au niveau de l'attdef, en tant que valeur par défaut de l'attribut. Au point 09, Mtext ou simple text, indiférent. Mais comme tu le vois, ce sont des détails. L'idée, tu l'as parfaitement comprise..
  15. Au fait, le père m'importe peu. Je souahite plutot meme passer au travers ! Dans l'hypothèse ou nous arriverions via dev à créer un field qui pointe vers un attribut, et que celui-ci, en plus d'appartenir à son block A, voit soit block intégré dans un autre block B (on ne peut alors pas, via commande autocad, aller editer cet attribut imbriqué), y a t'il malgré tout un update de ce field, sachant qu'en double cliquant donc sur l'attribut, il n'est alors considéré pour autocad que comme un block B ??
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité