Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

je fais très souvent des plans sous forme de cahiers A3, chaque page étant un onglet dont le nom est significatif de ce qu'il représente ("vue en plan", "coupe", etc...). Je numérote chaque page en rajoutant un texte en bas de la feuille 1/5, 2/5... 5/5.

 

C'est un peu fastidieux quand on a 40 présentations et je souhaite automatiser cette "corvée".

 

En utilisant les champs, on arrive à récupérer la variable CTAB, mais du coup les présentations se nommeraient "1", "2", "3" etc..., sans rapport avec ce qu'elles représentent. En plus, pour avoir le nombre total de pages, je ne vois pas bien comment y arriver avec un champ.

 

L'idée est de nommer les présentations en mettant entre parenthèses le numéro de page : "vue en plan (1)", "coupe (2)" etc..., de mettre un bloc avec 2 attributs (un pour le numéro de page, un pour le nombre de page totales) sur chaque présentation et d'utiliser un programme lisp pour renseigner ces 2 attributs.

 

Voir

http://www.neufgiga.com/n/50-17/share/LNK4818521472a1be441/

pour avoir le bloc et voir l'organisation des noms d'onglets.

 

(vl-load-com)

(defun modif_attrib (E ETIQ VALEUR / LATT ATT)
 (if (= (type E) 'ENAME)
   (setq E (vlax-ename->vla-object E))
 )
 (setq LATT (vlax-invoke E 'getAttributes))
 (foreach ATT LATT
   (if (= (strcase (vla-get-TagString ATT)) (strcase ETIQ))
     (vla-put-TextString ATT VALEUR)
   )
 )
)

(defun GetLayNum (LAY / P1 P2 RES)
 (setq P1 (vl-string-position (ascii "(") LAY))
 (setq P2 (vl-string-position (ascii ")") LAY))
 (if (and P1 P2)
   (setq RES (atoi (substr LAY (+ P1 2) (- P2 P1 1))))
 )
 RES
)



(defun c:vl_pagi (/ ss I LNUM LLAY e LAYOUT NUM)

 (vla-StartUndoMark (vla-get-activedocument (vlax-get-acad-object)))

 (setq ss (ssget "_X" '((0 . "INSERT") (2 . "vl_pagi"))))
 (setq I 0)
 ;; boucle pour changer l'attribut "Numéro de page"
 (repeat (sslength ss)
   (setq e (ssname ss I))
   (setq I (+ I 1))
   (setq LAYOUT (cdr (assoc 410 (entget e))))  ;; nom de la présentation
   (if (setq NUM (GetLayNum LAYOUT))
     (progn
       (setq LNUM (cons NUM LNUM))
       (setq LLAY (cons e LLAY))
       (modif_attrib e "P" (itoa NUM))
     )
   )
 )
 ;; boucle pour changer l'attribut "nombre de pages totale" uniquement sur les présentations avec un numéro
 (setq I 0)
 (repeat (length LLAY)
   (setq e (nth I LLAY))
   (setq I (+ I 1))
   (modif_attrib e "TP" (itoa (apply 'max LNUM)))
 )
 (if (/= (length LLAY) (apply 'max LNUM))
   (alert "Incohérence de numérotation")
 )
 (alert (strcat (itoa (length LLAY)) " blocs modifiés"))

 (vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object)))

 (princ)
)

 

Cela répond déjà pas mal à la demande de départ, mais l'étape suivante est de rendre cela encore plus transparent pour l'utilisateur. L'utilisation d'un réacteur me semble donc s'imposer, mais lequel ?

 

S'il faut espionner :

- la création d'un nouvel onglet

- la supression d'un onglet

- l'insertion d'un bloc de pagination

- etc...

cela commence à faire beaucoup de chose.

 

 

Je me dis que le plus simple est de modifier les blocs au moment d'une impression et lors d'une publication.

 

Qu'en dites-vous ?

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

J'utilise le lisp RON qui fonctionne très bien pour numéroter les onglet puis :

(defun C:PAGING( / nombloc attpage attnumpage adoc numtabs atts id lay_field)

; Paramètres

(setq nombloc "N°_PAGE")  ; nom du bloc cartouche
(setq attpage "PAGE")       		; étiquette de l'attribut numéro de page
(setq attnumpage "#PAGE")   		; ; étiquette de l'attribut nombre de pages

; Fin paramètres

 (vl-load-com)
 (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
 (setq numtabs (itoa (length (layoutlist))))
 (vlax-for lt (vla-get-layouts adoc)
;(vla-put-activelayout adoc lt) ; optionnel
(vlax-for obj (vla-get-block lt)
 	(if (and (= "AcDbBlockReference" (vla-get-objectname obj))
         	(= nombloc (vla-get-effectivename obj)) 
         	(= :vlax-true (vla-get-hasattributes obj) ))
   	(progn
     	(setq atts (vlax-invoke obj 'getattributes))
     	(foreach x atts
       	(if (= attpage (vla-get-tagstring x))
         	(progn
           	(setq id (vla-get-objectid (vla-get-layout (vla-objectidtoobject adoc (vla-get-ownerid obj)))))
           	(setq lay_field (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa id)">%).Taborder \\f \"%tc1\">%"))
           	(vla-put-textstring x lay_field)
         	)
       	)
       	(if (= attnumpage (vla-get-tagstring x))
           	(vla-put-textstring x numtabs)
       	)
     	)
   	)
 	)
)
 )
 ;(vla-put-activelayout adoc (vla-item (vla-get-layouts adoc) 0)) ; activer Layout1, optionnel
 (princ)
)
(prompt "\nCommande à utiliser : PAGING")
(princ)

Autocad 2015 - Lumion 3D - SCIA Engineer

I7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.

Posté(e)

Salut,

 

effectivement la pagination des présentations est un problème. Personnelement, je nomme mes présentation 1,2,3,... (c'est pas terrible !) et je récupère la valeur CTAB avec les champs.

Pour le nombre de pages, je créer une variable dans fichier/propriété du dessin/personnalisé.

Cette vraiable est ensuite récupérée via un champ.

 

Tu as oublié le dwg !

PIRO Charles

Developpeur Revit, RV/RA - Formateur Revit

PIRO CIE

Posté(e)

j'ai rajouté le dwg : l'insertion d'un fichier joint n'a pas fonctionné

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Merci, je ne sais plus de qui il est, perso je n'y comprend rien, mais il marche très bien.

Autocad 2015 - Lumion 3D - SCIA Engineer

I7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.

Posté(e)

Salut

 

Le réacteur me parait bien lourd (pour répondre quand même à la question, avec vlr-acdb-reactor par exemple)

Avec les exemples fournis, tu peux faire une routine qui numérote l'attribut en fonction de la position de l'onglet (vla-get-taborder ...)

 

ps : pour Fundream

Dommage d'utiliser (layoutlist) pour déterminer le nombre d'onglets alors que l'on à l'info dans (vla-get-count (vla-get-layouts adoc))

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Chinois patrick, pour moi c'est du chinois ^^

Autocad 2015 - Lumion 3D - SCIA Engineer

I7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.

Posté(e)

Bonsoir zebulon_

 

Pour la position et le nombre de présentation, pas mieux que le vla-get-taborder et le vla-get-count rappelé par Patrick_35, par contre pour ce qui est de tes interrogations sur le choix du réacteur, j’aurais plus tenté un vlr-miscellaneous-reactor et son événement vlr-layoutswitched (déclenché chaque fois que l’utilisateur change de présentation).

 

Cela me semble beaucoup plus simple et plus économe qu’un vlr-acdb-reactor et suffisamment robuste pour le besoin..

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Salut patrick

il y a quelque temps on a eu un post sur ce sujet

ca a donné ce prog

 

ca renomme les onglets

1er "cartouche

2 eme "page 01 sur xx

etc....

 

 

il suffit ensuite de mettre un champ "ctab" dans les presentations

je l'utilise pour faire des carnets de coupes

 

(defun c:ren-onglet  (/ doc express lay lst n i txt)
 (vl-load-com)
 (setq	doc    (vla-get-activedocument (vlax-get-acad-object))
n      -1
i      1
prefix "0"
txt    nil
long   (itoa (- (length (layoutlist)) 1))
) ;_ Fin de setq
 (vla-startundomark doc)
 (if (eval 'acet-ui-progress-done)
   (progn
     (acet-ui-progress-init
""
(1- (vla-get-count (vla-get-layouts doc)))
) ;_ Fin de acet-ui-progress-init
     (setq express T)
     ) ;_ Fin de progn
   (progn
     (princ "\nTravail en cours...")
     (princ)
     ) ;_ Fin de progn
   ) ;_ Fin de if
 (vlax-for lay	 (vla-get-layouts doc)
   (setq lst (cons (list (vla-get-taborder lay) lay) lst))
   ) ;_ Fin de vlax-for
 (while (setq lay (assoc i lst))
   (cond
     ((eq n -1)

      (setq txt "Cartouche")

      )

     ((>= n 0)
      (setq txt1 (itoa (+ n 1)))
      (if (< (strlen txt1) 2)
 (setq txt1 (strcat "0" txt1))
 )


      (if (< (strlen long) 2)
 (setq long (strcat "0" long))

 )



      (setq
 txt
  (strcat "Page " txt1 " sur " long)
 ) ;_ Fin de setq

      )


     ) ;_ Fin de cond
;_ Fin de while
   (if	(vl-catch-all-error-p
  (vl-catch-all-apply 'vla-put-name (list (cadr lay) txt))
  ) ;_ Fin de vl-catch-all-error-p
     (progn
(vla-put-name
  (vla-item (vla-get-layouts doc) txt)
  (strcat "c" txt)
;(strcat txt)
  ) ;_ Fin de vla-put-name
(vla-put-name (cadr lay) txt)
) ;_ Fin de progn
     ) ;_ Fin de if
   (and express (acet-ui-progress-safe i))
   (setq n (1+ n)
  i (1+ i)
  ) ;_ Fin de setq
   ) ;_ Fin de if
 (and express (acet-ui-progress-done))
 (princ (strcat "\nRenumérotation de "
	 (itoa (1+ n))
	 " présentation(s)."
	 ) ;_ Fin de strcat
 ) ;_ Fin de princ
 (vla-endundomark doc)
 (princ)
 )

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

Posté(e)

Salut,

 

J'avais songé à ce réacteur, mais dans le cas de création/suppression d'onglets ?

Je me doute bien que tu y avais songé, dans le cas de la création je ne crois pas que cela soit un problème car il va bien falloir aller dedans pour régler la vue sur l’EO, après effectivement dans le cas de déplacement ou suppression d’onglet, c’est plus délicat..

Dans pour les impressions pas de problème, par contre pour une publication, il faudrait tester.. C’est pourquoi je parlais de code relativement robuste. (Au pire un changement d’onglet résout le soucis)

 

Ce qui m’ennuie le plus vis-à-vis de mon environnement de travail et de celui des collègues dessinateurs que je connais c’est d’écrire une routine pour un type de bloc et d’attribut spécifique. Car bien souvent les tailles (A0 A1 … A4), ainsi que pour les types de plans (plan d’ensembles, détails, accessoires, fiches de coffrage, plans de ferraillage) les noms des cartouches et d’attributs diffèrent.

J’ai même réalisé des documents de présentation ou les numéros de page sont écrits dans des entités textes.

 

Sur ce point j’ai bien quelques idées mais cela mérite quelques testes avant de m’avancer plus, et prochainement le temps risque de me manquer, en ce moment je renforce régulièrement le B.E .T en production car il prend un petit peu l’eau (doux euphémisme).

 

Voilà si j’ai un peu plus de temps, j’essayerais de regarder une variante plus proche de mon environnement de travail, a moins que quelqu’un d’autre s'y colle.

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Bonjour,

 

Pour la position et le nombre de présentation, pas mieux que le vla-get-taborder et le vla-get-count rappelé par Patrick_35

 

j'y vois quand même un inconvénient. Il arrive de faire des présentations qu'on ne souhaite pas diffuser. Si je mets un numéro dans le nom de l'onglet, il sera compté sinon il est laissé de côté.

 

De mon côté, je me suis dit que la numérotation des pages doit être nickel avant l'impression ou la publication. Donc, un réacteur qui épie la commande PLOT me parait convenir.

 

;;; Lisp à charger uniquement ... ne pas exécuter !!!

(vlr-command-reactor "modifie numero" '((:vlr-commandWillStart . StartPlot)))


(defun StartPlot (calling-reactor StartCommandInfo / TheCommandStart)
 (setq TheCommandStart (nth 0 StartCommandInfo))
 (if (= TheCommandStart "PLOT")
   (progn
     (alert "début PLOT")
   )
 )
)

 

Mais quid de la commande PUBLISH ? Ce n'est pas une commande ? Car elle n'est pas transmise par le vlr-command-reactor ?

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Mais quid de la commande PUBLISH ? Ce n'est pas une commande ? Car elle n'est pas transmise par le vlr-command-reactor ?

Par exemple

 

(defun StartPlot (calling-reactor StartCommandInfo)
 (and (member (car StartCommandInfo) '("PLOT" "PUBLISH"))
   (alert "début PLOT/PUBLISH")
 )
)

 

ps : Affecte une variable à ton réacteur si tu as besoin de le supprimer ou pour vérifier qu'il n'est pas déjà actif.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Par exemple

 

(defun StartPlot (calling-reactor StartCommandInfo)
 (and (member (car StartCommandInfo) '("PLOT" "PUBLISH"))
   (alert "début PLOT/PUBLISH")
 )
)

 

ps : Affecte une variable à ton réacteur si tu as besoin de le supprimer ou pour vérifier qu'il n'est pas déjà actif.

 

@+

 

Je pense que zébulon parlait lorsque l'on sélectionne les onglets que l'on passe par un clic-bouton-droit dans le menu déroulant et non sur la ligne de commande.

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Je pense que zébulon parlait lorsque l'on sélectionne les onglets que l'on passe par un clic-bouton-droit dans le menu déroulant et non sur la ligne de commande.

 

A+

 

Je me suis mal exprimé. C'est effectivement lorsque je fais un clic droit sur les onglets sélectionnés pour les publier que rien ne se passe. Je ne me sers jamais de la commande PUBLIER en dehors de ce cas

 

Si quelqu'un a une idée pour espionner l'événement : "publier les présentations sélectionnées..."

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Ah oui, effectivement.

Alors, la seule solution est d'utiliser le réacteur proposé par Bruno.

C'est lors de l'activation de ma présentation que je mets à jour les attributs.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Je vais m'orienter vers ce que propose Bruno, d'autant que, quand je sélectionne les onglets pour les publier, il doit bien se passer quelque chose au niveau du réacteur proposé ? A voir.

 

Merci

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e) (modifié)

Re,

Voilà si j’ai un peu plus de temps, j’essayerais de regarder une variante plus proche de mon environnement de travail, a moins que quelqu’un d’autre s'y colle.

J’ai un peu survolé les différentes solutions proposé, celle de faire un bloc spécifique ne me convenant que moyennement, et celle de renommé tous les onglets de présentation pas beaucoup plus.

 

Donc je propose ma variante (un premier jet encore un peu brut), qui répond au fonctionnement suivants :

- La commande PAGINE demande de pointer un texte ou un attribut d’une référence de bloc quelconque, qu’elle édite automatiquement comme un élément de pagination pour la présentation de définition de l'élement.

- Les éléments ainsi sélectionné devenant des " références" de pagination au moyen de xdata, ils sont automatiquement mis à jour à chaque changement d’onglet au moyen d'un réacteur d'évènement.

- L’espace Objet étant considéré comme espace de conception, il est volontairement décompté et est supposé valoir 0.

 

Le code à tester :

 

;; VDH-Bruno                                                         le:  28-08-2013
;; ------------------------------- PAGINE V 2.00 -----------------------------------
;; Transforme l'entité (texte ou attribut) sélectionné en objet de pagination
;; automatique pour la présentation dans laquelle il est définie.

(vl-load-com)

;; Déclaration du réacteur
;; (vlr-remove *command-reactor-pagine*)
(or *command-reactor-pagine*
   (setq *command-reactor-pagine* (vlr-command-reactor "Pagination Automatique" '((:vlr-commandEnded . pagine-callback))))
)

;; Routine de pagination automatique
(defun pagine-callback (rea evenement)
 (or *acaddoc* (setq *acaddoc* (vla-get-ActiveDocument (vlax-get-acad-object))))
 (and (eq (car evenement) "LAYOUT_CONTROL")
      (ssget "_X" '((0 . "INSERT,*TEXT") (-3 ("PaginationData"))))
      (vla-delete
        (vlax-map-collection
          (vla-get-ActiveSelectionSet *acaddoc*)
          '(lambda (obj / xtypeOut xdataOut etiquette obj att)
             ;; Obtention des Xdata attaché à l'objet
             (vla-GetXData obj "PaginationData" 'xtypeOut 'xdataOut)
             ;; Teste si etquette="" c'est un texte à traiter, sinon c'est un attribut
             (if (= "" (setq etiquette (cadr (mapcar 'vlax-variant-value (vlax-safearray->list xdataOut)))))
               (vla-put-textstring obj (bv:GetTaborder "" obj))
               (foreach att (vlax-invoke obj 'GetAttributes)
                 (if (= etiquette (vla-get-tagstring att))
                   (vla-put-textstring att (bv:GetTaborder "" obj))
                 )
               )
             )
           )
        )
      )
 )
 (princ)
)

;; Numérotation de la présentation de l'objet
(defun bv:GetTaborder (pref obj)
 (or *acaddoc* (setq *acaddoc* (vla-get-ActiveDocument (vlax-get-acad-object))))
 (if (= (type obj) 'ENAME)
   (setq obj (vlax-ename->vla-object obj))
 )
 (strcat pref
         (itoa (vla-get-taborder (vla-get-layout (vla-objectidtoobject *acaddoc* (vla-get-ownerid obj)))))
         "/"
         (itoa (1- (vla-get-count (vla-get-layouts *acaddoc*))))
 )
)


;;;;;;;;;;;;;;;;;;;;;;;;; Programme principal ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Programme de pagination
(defun c:pagine (/ ent)
 ;; vérifié si pas de plantage encas dabsence d'application non enregstrer
 (or (tblsearch "APPID" "PaginationData") (regapp "PaginationData"))
 (setq loop T)
 ;; sélection utilisateur
 (while loop
   (setq ent  (car (nentsel "\nSélectionnez l'élément (texte ou attribut) à paginer: "))
         loop (cond ((not ent) (princ "\nPas d'objet sélectionné !"))
                    ((wcmatch (cdr (assoc 0 (setq ent (entget ent)))) "ATTRIB,*TEXT") nil)
                    ((princ "\nSélectionnez un texte ou un attribut !"))
              )
   )
 )
 ;; ajout des données étendues de l'application "PaginationData"
 (if (= (cdr (assoc 0 ent)) "ATTRIB")
   (entmod (append (entget (cdr (assoc 330 ent)))
                   (list (list -3 (list "PaginationData" (cons 1000 (cdr (assoc 2 ent))))))
           )
   )
   (entmod (append ent (list (list -3 (list "PaginationData" (cons 1000 ""))))))
 )
 ;; pagination automatique
 (pagine-callback nil (list "LAYOUT_CONTROL"))
)


;; Code de dépagination d'un objet
(defun c:unpagine (/ ent)
 ;; sélection utilisateur
 (while (not
          (setq ent (car (entsel "\nSélectionnez l'élément à supprimer des références d'objet à paginer: ")))
        )
   (princ "\nPas d'objet sélectionné !")
 )
 (entmod (append (entget ent) (list (list -3 (list "PaginationData")))))
 (princ)
)

(prompt
 "\nPAGINE / UNPAGINE commande à saisir pour convertir (ou pas) une entité textes/attribut en référence de pagination automatique."
)
(princ)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

A+ Bruno

 

 

 

Edit: Version modifié pour faire suite au post de Patrick_35 en changeant le réacteur vlr-miscellaneous-reactor par le réacteur vlr-command-reactor.

pagine.LSP

Modifié par VDH-Bruno

Apprendre => Prendre => Rendre

Posté(e)

Je vais m'orienter vers ce que propose Bruno, d'autant que, quand je sélectionne les onglets pour les publier, il doit bien se passer quelque chose au niveau du réacteur proposé ? A voir.

 

Merci

Amicalement

Vincent

 

Pour avoir testé, il ne se passe rien lors de la sélection des onglets...

A+

Apprendre => Prendre => Rendre

Posté(e)

Salut Bruno

 

Cela me parait bien compliqué.

J'ai donc regardé de plus près les réacteurs.

 

(defun pagine (rea cde)
 (and (eq (car cde) "LAYOUT_CONTROL")
   (alert "Changement/Sélection d'onglet(s)")
 )
)

(setq p35 (vlr-command-reactor nil '((:vlr-commandWillStart . pagine))))

 

Pour supprimer le réacteur

(vlr-remove p35)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Merci beaucoup Patrick_35, je suis heureux de ton intervention, je viens de tester ton réacteur sur la commande "LAYOUT_CONTROL" sans jamais le prendre en défaut, je pense que tu as trouvé la meilleur solution au problème.

 

Commande "LAYOUT_CONTROL" que je ne connaissais pas, ce qui m’a donné l’idée d’écrire ces quelques lignes pour connaître le nom des commandes envoyer par l’évènement vlr-commandWillStart

 

(defun inspecteCommandWillStart (rea cde)  
   (alert (strcat "La commande " (car cde) " va être executé..")
 )
)

(setq inspecte (vlr-command-reactor nil '((:vlr-commandWillStart . inspecteCommandWillStart))))

 

(Ps : Je pense que c’est avec un code similaire que tu l’as débusqué ;) )

A+ Bruno

Apprendre => Prendre => Rendre

Posté(e)

(Ps : Je pense que c’est avec un code similaire que tu l’as débusqué ;) )

Tout à fait, sauf que je n'utilise pas la fonction alert afin de faire un copier/coller de la commande (mode fainéant) ;)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é