Aller au contenu

bloc dyn avec attribut *U


Messages recommandés

Posté(e)

Bonjour,

 

Tout d'abord merci pour toute les informations que je trouve sur votre site.

C'est très enrichissant.

 

 

Dernièrement, j'ai créé une page de présentation avec attributs, en bloc dynamique(extension formats, visibilité,....).

En utilisant la fonction gatte de tool express qui devrait changer la date par exemple sur toutes mes présentations, cela ne marche pas.

 

Après pas mal de recherches, d'observation, il s'avère que cela viens du fait que les attributs, dans un bloc dynamique reprennent un nouveau nom commençant par *U.

 

 

connaîtriez vous une parade, un lisp , autre pour contourner ce problème?

Je ne penses pas que ce soit important car je souhaite que cela marche sur toutes les versions autocad mais je suis sur autocad map 2019

 

Merci par avance pour vos retours.

Posté(e)

Coucou,

 

En lisp, il faut faire un tri post-sélection en vérifiant l'effectivename du bloc dynamique.

Donc si par exemple les blocs dynamique que tu utilises ont pour nom "Présentation" par exemple, on ferait ceci :

(defun c:blocselect (/ jsel i name)

   (if (setq jsel (ssget "_X" '((0 . "INSERT") (2 . "`*U*"))))
       (progn
           (repeat (setq i (sslength jsel))
               (setq name (ssname jsel (setq i (1- i)))
               (if (or (wcmatch (getpropertyvalue name "ClassName") "AcDbAssociative*Array")
                       (not (wcmatch (getpropertyvalue name "BlockRecord/Name") "Présentation"))
                   )
                   (ssdel jsel name)
               )
            )
            (sssetfirst nil jsel)
        )
   )
   (princ)

)

Le petit risque des sélections de blocs dynamiques c'est la potentielle présence de réseaux qui sont des blocs dynamiques anonymes et qui génère donc des erreurs lors de la recherches de l'effectivename...

 

Après si tu souhaite modifier la valeur d'un attribut tu peux simplement utiliser

(setpropertyvalue name "ATT-name" value)

avec ATT-name le nom de l'étiquette de ton attribut.

Si tu as une demandes particulière, je peux t'écrire un code pour répondre à ta demande mais pour se faire j'aurais besoin d'infos supplémentaires comme le nom des blocs et des étiquettes et la manière dont tu souhaites modifier les blocs.

 

Bisous,

Luna

Posté(e)

Merci Luna,

Je te donne les informations ce lundi car la je risque de te donner de mauvaises informations de mémoire.

Réellement il n'y aurait que la date à modifier.

Le reste étant des champs ou des particularité au cas par cas.

 

Cependant je préparerai dans le temps plusieurs présentations, (3 à l'œil) cela aurait une incidence?

 

je te transmettrais direct un dwg pour juger au passage pour pas te faire perdre trop de temps.

 

Merci pour ce retour en tout cas

Posté(e)

Salut,

 

Si tu souhaites que la date se modifie sur tous les cartouches de toutes les présentations, peut-être devrais-tu regarder du côté des champs en mettant un champ dynamique pour les dates.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Bonjour Steven ,

 

J'ai pensé aux champs mais pas possible au vue de la méthode de travail imposée et pareil pour les blocs sinon je serais contraint de les exploser tout 2 à un moment.

 

En toute honnêteté j'espérais un lisp du type gatte qui contourne ce problème de bloc dynamique qui aurait remplacé cette fonction qui a une belle faille.

Comme ca plus de problème hormis retenir nouvelle commande.

 

Malheureusement rien trouvé sur la toile.

Posté(e)

Coucou,

 

Je ne connaissais pas du tout la commande GATTE (à vrai dire j'utilise très peu les ExpressTools) mais au vu de ce qu'elle propose, l'exercice de la remplacer n'est vraiment pas bien compliqué je pense pour intégrer les blocs dynamiques dans la sélection. Dans ce cas, je peux te proposer de généraliser ta demande afin de "copier" le fonctionnement de cette commande et de pouvoir modifier la date ou plus encore au besoin.

 

Le principe est simple puisque les attributs et effectivename sont collectables assez facilement. Je pourrais te proposer un premier jet demain afin de voir si cela correspond bien à ta demande si tu veux :3

 

Bisous,

Luna

Posté(e)

Bonjour Rebcao,

 

Non il s'agit de changements à l'initial sur tous les plans, et derrière, possiblement de changement sur une planche ou deux.

 

Quand je dis à l'initial, c'est à la date ou mon dossier de recolement sera prêt (je mets entre 1 à 2 mois de travail pour finaliser l'ensemble).

 

Sauf erreur, les champs de dates se modifient dès ouverture d'une présentation.

Si pas de changement d'indice la date ne doit pas changer.

 

Il y a tellement de fonctions champs qu'il est possible que ce soit jouable, mais je n'y crois pas.

il me faut donner une date sur toutes les planches quand bon me semble, changer une planche ou deux quand cela m'arrange sans changer les autres dates et en pouvant aller contrôler les autres planches sans modification de date.

Posté(e)

Coucou,

 

Je ne connaissais pas du tout la commande GATTE (à vrai dire j'utilise très peu les ExpressTools) mais au vu de ce qu'elle propose, l'exercice de la remplacer n'est vraiment pas bien compliqué je pense pour intégrer les blocs dynamiques dans la sélection. Dans ce cas, je peux te proposer de généraliser ta demande afin de "copier" le fonctionnement de cette commande et de pouvoir modifier la date ou plus encore au besoin.

 

Le principe est simple puisque les attributs et effectivename sont collectables assez facilement. Je pourrais te proposer un premier jet demain afin de voir si cela correspond bien à ta demande si tu veux :3

 

Bisous,

Luna

 

La fonction gatte est un vrai bonheur quand tu as une modification multiple d'attributs d'un bloc non dynamique sur toutes les présentations.

Très utile dans pas mal de corps de métier.

Si tu arrives à me créer sont équivalent en lisp en tenant en compte les blocs dyn ce serait simplement une tuerie.

Mais si cela n'a pas encore été créé je penses malheureusement que ce n'est pas pour rien.

Posté(e)

Concernant ton soucis de date, je le comprend parfaitement étant donné que j'ai précisément était contrainte à créer une commande pour modifier la date de mes cartouches. Sauf que généralement en phase EXE ou DOE, on affiche la date d'impression et on aimerait bien que la date ne change pas sur les présentations n'ayant pas été modifiées entre-temps donc très souvent la date est différentes sur l'ensemble des cartouches.

 

Dans ce cas précis, GATTE ne va pas réellement t'aider car si je comprends bien son fonctionnement, il modifie la totalité des occurrences trouvées dans le dessins or tu souhaiterais pouvoir en modifier certaines et d'autres non. Cependant l'avantage des cartouches c'est qu'ils sont généralement liés à la présentation (un seul cartouche par présentation) donc j'avais effectué le filtre sur les onglets de présentations pour sélectionner les cartouches comme je le souhaitais :3

En revanche il faudra que tu me transmettes tes blocs afin que je puisse la modifier correctement :3

 

Je vais donc faire deux commandes distinctes en me basant sur ma commande DATECART ci-dessous :

; Permet de modifier la date d'un ou plusieurs cartouche(s) sélectionnés via une BdD des différentes présentation du dessin et en spécifiant la date souhaitée (avec prise en compte de réponse rapide) :

(defun C:DATECART (/ layout date)

(if (setq layout (ListBox "DATECART : Sélection des présentations" "Veuillez choisir les présentations devant changer de date :" (layoutlist) (getvar "CTAB") 2))
	(progn
		(if (= "" (setq date (getstring (strcat "\nVeuillez définir la date souhaitée (ENTER pour \"" (substr (get-date) 1 10) "\") :"))))
			(setq date nil)
		)
		(set-date layout date)
	)
	(exit)
)

)

; Permet de récupérer la date et l'heure au moment de l'exécution sous la forme "XX/XX/XXXX - XX:XX:XX" :
; La fonction (get-date) ne possède aucun argument

;--- Renvoie la date et l'heure sous la forme "JJ/MM/AAAA - HH:MM:SS"
(defun Get-Date (/ Date Jour Heure)

(setq Date (rtos (getvar "CDATE") 2 6)
      Jour (strcat (substr Date 7 2) "/" (substr Date 5 2) "/" (substr Date 1 4))
      Heure (strcat (substr Date 10 2) ":" (substr Date 12 2) ":" (substr Date 14 2))
      Date (strcat Jour " - " Heure)
)

)

; Permet de mettre à jour l'attribut "DATE" des cartouches UBS sur les présentations spécifiées et d'après la date spécifiée :
; La fonction (Set-Date) possède 2 arguments
;--- laylist correspond à la liste des présentations devant être prises en compte pour la redéfinition de la date des cartouches (issue d'une fenêtre de sélection des présentations)
;--- value correspond à la date que l'on souhaite spécifier pour la nouvelle valeur, si value ne possède pas de format typé "date" ou nil, la fonction définira la date comme étant la date actuelle

;--- Renvoie nil.
(defun Set-Date (laylist value / jsel i name lst)

(cond
	((not (listp laylist)) (setq laylist (list laylist)))
)
(if (and
    	value
	(= (strlen (vl-princ-to-string value)) 10)
	(wcmatch (vl-princ-to-string value) "##.##.####")
    )
	(setq value (vl-princ-to-string value))
	(setq value (substr (get-date) 1 10))
)
(if (setq jsel (ssget "_X" (list '(0 . "INSERT") '(2 . "`*U*") (cons 410 (apply 'strcat (mapcar '(lambda (l) (strcat l ",")) laylist))))))
	(progn
		(repeat (setq i (sslength jsel))
			(setq name (ssname jsel (setq i (1- i))))
			(if (and (not (wcmatch (getpropertyvalue name "ClassName") "AcDbAssociative*Array"))
                                        (wcmatch (getpropertyvalue name "BlockRecord/Name") "Cartouche*")
                                        (assoc "DATE" (get-att-list name))
                                        (null (setpropertyvalue name "DATE" value))
                                   )
				(setq lst (cons (cdr (assoc 410 (entget name))) lst))
				(ssdel name jsel)
			)
		)
		(prompt (strcat "\nModification de la date (\""
				value
				"\") de "
				(itoa (sslength jsel))
				" cartouche(s)."
				"\nListe des présentations : \""
				(vl-string-right-trim (apply 'strcat (mapcar '(lambda (l) (strcat l "\", \"")) (vl-sort lst '<))) "\", \"")
				"\"."
			)
		)
	)
)
(sssetfirst nil nil)
(princ)

)

;--- LISP de bonusCAD publié sur CADXP.com le 11/01/2016 11:34

;--- Version modifiée de la fonction (ListBox), possède 5 arguments
;--- title correspond à l'entête de la boîte de dialogue
;--- msg correspond au message affiché au dessus de la liste
;--- lst correspond à la liste à afficher
;--- value correspond à la valeur définie par défaut
;--- flag correspond au type de liste souhaitée
;	flag = 0  ->  liste déroulante (choix unique)
;	flag = 1  ->  liste avec barre de défilement (choix unique)
;	flag = 2  ->  liste avec barre de défilement (choix multiple)

; Renvoie la liste des calques ayant été sélectionnés
(defun ListBox (title msg lst value flag / tmp file DCL_ID choice)

(setq tmp (vl-filename-mktemp "tmp.dcl")
      file (open tmp "w")
)
(write-line
	(strcat "ListBox:dialog{width=" (itoa (+ (apply 'max (mapcar 'strlen (mapcar 'vl-princ-to-string lst))) 5)) ";label=\"" title "\";")
	file
)
(if (and msg (/= msg ""))
	(write-line (strcat ":text{label=\"" msg "\";}") file)
)
(write-line
	(cond
		((= 0 flag) "spacer;:popup_list{key=\"lst\";")
		((= 1 flag) "spacer;:list_box{height=15;key=\"lst\";")
		(t "spacer;:list_box{height=15;key=\"lst\";multiple_select=true;")
	)
	file
)
(write-line "}spacer;ok_cancel;}" file)
(close file)
(setq DCL_ID (load_dialog tmp))
(if (not (new_dialog "ListBox" DCL_ID))
	(exit)
)
(start_list "lst")
(mapcar 'add_list lst)
(end_list)
(set_tile "lst" (if (member value lst) (itoa (vl-position value lst)) (itoa 0)))
(action_tile
		"accept"
		"(or 	(= (get_tile \"lst\") \"\")
			(if (= 2 flag)
				(progn
					(foreach n (str2lst (get_tile \"lst\") \" \")
						(setq choice (cons (nth (atoi n) lst) choice))
					)
					(setq choice (reverse choice))
				)
				(setq choice (nth (atoi (get_tile \"lst\")) lst))
			)
		)
		(done_dialog)"
)
(start_dialog)
(unload_dialog DCL_ID)
(vl-file-delete tmp)
choice

)

;--- LISP de bonusCAD publié sur CADXP.com le 11/01/2016 11:34

;--- Nécessaire au bon fonctionnement de la fonction (ListBox) ci-dessus

(defun str2lst (str sep / pos)
       (if (setq pos (vl-string-search sep str))
               (cons
                       (substr str 1 pos)
                       (str2lst (substr str (+ (strlen sep) pos 1)) sep)
               )
               (list str)
       )
)

 

Bisous,

Luna

Posté(e)

Coucou,

 

Voici ce que je peux te proposer pour la commande GATTE :

;; Actualisation de la commande GATTE (ExpressTools) pour la prise en compte des blocs dynamiques.
;;
;; Auteur(e) : Luna
;; Date : 28/02/2021
;; Version : v1.0.0
;;
;; Utilisation de la fonction (GetStringOrEntity) de (gile) postée sur CADxp le 25/03/2020 sur le forum :
;; https://cadxp.com/topic/48837-besoin-dun-entsel-getstring/page__p__292565__hl__getstring__fromsearch__1#entry292565

(defun c:GATTU (/ get-att change-att GetStringOrEntity input jsel i name bloc-list att-list blc att value ent)

(prompt "\nInitialisation...")

(defun get-att (att-list / att)

	(prompt (strcat "\nKnown tag names for block :" (apply 'strcat (mapcar '(lambda (a) (strcat " " a)) att-list))))
	(while (not (or
			(and (setq att (GetStringOrEntity nil "\nSelect attribute or type attribute name: "))
			     (= (type att) 'STR)
			     (member (strcase att) att-list)
			)
			(and att
			     (listp att)
			     (= (cdr (assoc 0 (entget (car att)))) "ATTRIB")
			     (member (strcase (setq att (cdr (assoc 2 (entget (car att)))))) att-list)
			)
		     )
		)
	)
	att

) ;; End of (defun get-att)

(defun change-att (blc att / value jsel i name input)

	(prompt (strcat "\nBlock: " (strcase blc) "   Attribute tag: " (strcase att)))
	(setq value (getstring t "\nEnter new text: "))
	(if (setq jsel (ssget "_X" (list '(0 . "INSERT") (cons 2 (strcat blc ",`*U*")))))
		(repeat (setq i (sslength jsel))
			(setq name (ssname jsel (setq i (1- i))))
			(if (or
			    	(wcmatch (getpropertyvalue name "ClassName") "AcDbAssociative*Array")
				(not (wcmatch (strcase (getpropertyvalue name "BlockTableRecord/Name")) (strcase blc)))
			    )
				(setq jsel (ssdel name jsel))
			)
		)
	)
	(if (and jsel (> (sslength jsel) 0))
		(progn
			(initget "Yes No")
			(if (or (null (setq input (getkword (strcat "\nNumber of inserts in drawing = " (itoa (sslength jsel)) "  Process all of them? [Yes/No] <Yes>: "))))
				(= input "Yes")
			    )
				(repeat (progn (prompt "\nPlease wait...") (setq i (sslength jsel)))
					(setq name (ssname jsel (setq i (1- i))))
					(setpropertyvalue name att value)
				)
				(if (setq jsel (ssget (list '(0 . "INSERT") (cons 2 (strcat blc ",`*U*")))))
					(repeat (progn (prompt "\nPlease wait...") (setq i (sslength jsel)))
						(setq name (ssname jsel (setq i (1- i))))
						(if (or
						    	(wcmatch (getpropertyvalue name "ClassName") "AcDbAssociative*Array")
							(not (wcmatch (strcase (getpropertyvalue name "BlockTableRecord/Name")) (strcase blc)))
						    )
							(setq jsel (ssdel name jsel))
							(setpropertyvalue name att value)
						)
					)
				)
			)
			(null (prompt (strcat "\n" (itoa (if jsel (sslength jsel) 0)) " attributes changed.")))
		)
	)

) ;;End of (defun change-att)

	;--- LISP de (gile) publié sur CADxp.com le 25/03/2020 17:56

	; Permet de récupérer une chaîne de caractères ou une liste similaire à (nentsel) pour une entité :
;--- La fonction (Get-string-or-entity) possède 2 arguments
;--- cr si non nil, accepte les espaces dans la chaîne comme (getstring)
;--- msg correspond au message d'invite à afficher sur la ligne de commande

;--- Renvoie la chaîne de caractères, une liste de la forme (<entityname> . (x y z)) (similaire à (nentsel)) ou nil
(defun GetStringOrEntity (cr msg / break result gr pt ent str)

	(prompt msg)
	(while  (and
			(not break)
			(setq gr (grread nil 12 2))
		)
		(cond
			((= 3 (car gr)) ;; Clic gauche
				(setq ent (nentselp (cadr gr))
				      result (cond ((null ent) nil) ((= (length ent) 2) ent) (T (list (last (last ent)) (cadr gr))))
				      break  T
				)
			)
			((equal gr '(2 13)) ;; Validation par Entrée
				(setq result str
				      break T
				)
			)
			((and (not cr) (equal gr '(2 32))) ;; Validation par Espace
				(setq result str
				      break T
				)
			)
			((= 2 (car gr)) ;; Récupération des entrées au clavier
				(if (= (cadr gr) 8) ;; 8 = retour/effacer
					(or
						(and str
						     (/= str "")
						     (setq str (substr str 1 (1- (strlen str))))
						     (princ (chr 8))
						     (princ (chr 32))
						)
						(setq str nil)
					)
					(or
						(and str
						     (setq str (strcat str (chr (cadr gr))))
						)
 						(setq str (chr (cadr gr)))
					)
				)
				(and str
				     (princ (chr (cadr gr)))
				) ;; affichage sur la ligne de commande
			)
		)
	 )
	result

) ;; End of (defun GetStringOrEntity)

(initget "Block name")
(if (setq input (nentsel "\nSelect block or attribute [block name]: "))
	(progn
		(cond
			((and	(= input "Block")
				(while (not (and (setq blc (getstring t "\nEnter block name: ")) (setq bloc-list (tblsearch "BLOCK" blc))))
					(null (prompt "\nInvalid block name."))
				)
				(setq ent (cdr (assoc -2 bloc-list)))
				(while ent
					(if (= (cdr (assoc 0 (entget ent))) "ATTDEF")
						(setq att-list (cons (strcase (cdr (assoc 2 (entget ent)))) att-list))
					)
					(null (setq ent (entnext ent)))
				)
				(if att-list
					(progn
						(setq att (get-att att-list))
						(change-att blc att)
					)
					(null (prompt "\nThe block selected has no attributes!"))
				)
			 )
			)
			((and	(listp input)
				(= (cdr (assoc 0 (entget (setq name (car input))))) "ATTRIB")
				(setq att (cdr (assoc 2 (entget name))))
				(setq name (cdr (assoc 330 (entget name))))
				(setq blc (getpropertyvalue name "BlockTableRecord/Name"))
				(change-att blc att)
			 )
			)
			((and	(listp input)
				(setq name (car input))
				(setq bloc-list (assoc 331 (entget (cdr (assoc 330 (entget name))))))
				(setq name (cdr bloc-list))
				(setq blc (getpropertyvalue name "BlockTableRecord/Name"))
				(setq att-list (mapcar 'vla-get-tagstring (vlax-invoke (vlax-ename->vla-object name) 'getattributes)))
				(setq att (get-att att-list))
				(change-att blc att)
			 )
			)
		)
	)
)
(princ)

)

 

J'ai remarqué du coup qu'il y avait la possibilité de sélectionner manuellement les blocs devant être mis à jour si on ne désire pas modifier toutes les occurrences. Cependant la sélection d'objet sur plusieurs présentations différentes n'est pas possible donc je modifierais tout de même ma commande DATECART pour l'adapter à tes besoins mais en attendant je pense que la commande Global ATTribute Update (GATTU) fonctionne correctement et de la même manière que la commande initiale GATTE. Il aurait probablement été plus simple de modifier la commande originelle si elle était en open source mais je ne l'ai pas trouvée donc j'ai fait au mieux en espérant ne pas avoir oublié une fonctionnalité... ^^"

 

Testé un petit peu sur AutoCAD 2018 sans encombres, donc je te laisse regarder de ton côté si cela fonctionne :3

(si tu as besoin d'aide pour charger la commande, je peux mettre en PJ le fichier .lsp et tu n'auras qu'à suivre les instructions de (gile) pour charger le fichier depuis AutoCAD via ce post)

 

Bisous,

Luna

Posté(e)

Je maitrise pas le dévellopement lisp .

Hâte d'essayer.

Je regarde cela demain .

Pas d autocad sous la main malheureusement...

 

 

Mais tip top tes retours quoiqu'il en soit.

Un grand merci pour ce taf je te tiens au courant sans faute du résultat.

Posté(e)

Bonjour,

 

Effectivement les CHAMPS date sont à éviter.

 

Mais les CHAMPS utilisateurs (Personnalisés : Menu Fichiers > Propriétés du dessin...) permettent de créer des CHAMPS qui seront modifiés librement !

 

Christian

 

 

 

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Coucou,

 

 

J'ai remarqué du coup qu'il y avait la possibilité de sélectionner manuellement les blocs devant être mis à jour si on ne désire pas modifier toutes les occurrences. Cependant la sélection d'objet sur plusieurs présentations différentes n'est pas possible donc je modifierais tout de même ma commande DATECART pour l'adapter à tes besoins mais en attendant je pense que la commande Global ATTribute Update (GATTU) fonctionne correctement et de la même manière que la commande initiale GATTE. Il aurait probablement été plus simple de modifier la commande originelle si elle était en open source mais je ne l'ai pas trouvée donc j'ai fait au mieux en espérant ne pas avoir oublié une fonctionnalité... ^^"

 

Testé un petit peu sur AutoCAD 2018 sans encombres, donc je te laisse regarder de ton côté si cela fonctionne :3

(si tu as besoin d'aide pour charger la commande, je peux mettre en PJ le fichier .lsp et tu n'auras qu'à suivre les instructions de (gile) pour charger le fichier depuis AutoCAD via ce post)

 

Bisous,

Luna

 

Un gros merci t'es au top, cela marche impeccable.

Posté(e)

Bonjour,

 

Effectivement les CHAMPS date sont à éviter.

 

Mais les CHAMPS utilisateurs (Personnalisés : Menu Fichiers > Propriétés du dessin...) permettent de créer des CHAMPS qui seront modifiés librement !

 

Christian

 

Pas mal cette variante de champs je ne connaissais pas, je l'ai testé , je vais réfléchir si utilité dans mon domaine mais cela reste très intéressant.

Merci pour le partage.

Posté(e)

Coucou,

 

Si la commande GATTU est suffisante alors tant mieux :3

Je remarque que j'ai fait 2-3 petits oublis mais bon ^^"

 

Si jamais la commande DATECART t'intéresse tout de même, envoie moi un .dwg avec tes blocs cartouches afin que je puisse l'adapter correctement. Elle a l'avantage de n'avoir aucune sélection souris ou de saisie texte donc facile d'utilisation et rapide !

Mais si cela n'a pas encore été créé je penses malheureusement que ce n'est pas pour rien.

Comme tu vois, ce n'est pas parce que cela n'existe pas, que c'est impossible ;3 Heureuse d'avoir pu t'aider en tout cas.

 

Bisous,

Luna

Posté(e)

Coucou,

 

Si la commande GATTU est suffisante alors tant mieux :3

Je remarque que j'ai fait 2-3 petits oublis mais bon ^^"

 

Si jamais la commande DATECART t'intéresse tout de même, envoie moi un .dwg avec tes blocs cartouches afin que je puisse l'adapter correctement. Elle a l'avantage de n'avoir aucune sélection souris ou de saisie texte donc facile d'utilisation et rapide !

 

Comme tu vois, ce n'est pas parce que cela n'existe pas, que c'est impossible ;3 Heureuse d'avoir pu t'aider en tout cas.

 

Bisous,

Luna

 

 

Merci encore ton travail va grandement me faciliter la vie.

 

Voici un lien wetransfer.

J'ai effacé ce qui est noms de société mais l'essentiel est la.

 

https://we.tl/t-7LGcV9YUBq

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é