Netparty Posté(e) le 4 janvier 2022 Posté(e) le 4 janvier 2022 Bonjour à tous Est-il possible via VBA de copier les valeurs des attributs d'un bloc vers un autre bloc. Merci
Luna Posté(e) le 4 janvier 2022 Posté(e) le 4 janvier 2022 Coucou, VBA uniquement ? Autrement il faudrait être un peu plus précis quand au nom des attributs et surtout si les noms des attributs sont les mêmes pour les deux blocs... Mais la réponse est forcément oui (par contre si c'est VBA exclusivement, je laisse les personnes à même de répondre poster les infos). Bisous, Luna
didier Posté(e) le 4 janvier 2022 Posté(e) le 4 janvier 2022 Bonjour @Netparty Facile de répondre à une question dichotomique... La réponse à la question posée est OUI. Ceci étant dit on n'est guère avancé, si tu veux des exemples de codes il faut donner ... Des explications Des exemples de blocs Quelles sont les étiquettes à dupliquer ? Ont-elles le même nom dans chaque bloc ? Doit-on choisir l'attribut à l'écran dans le bloc de base et sélectionner l'attribut d'arrivée aussi à l'écran ?... Personne n'aime travailler sans idée du but à atteindre, quand ce dernier sera mieux défini, je verrai ce que je peux faire pour aider. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Netparty Posté(e) le 4 janvier 2022 Auteur Posté(e) le 4 janvier 2022 Bonjour @didier J'ai commencer un formulaire qui me permettrai de sélectionner chaque présentation (Source et destination) Quand je clique sur présentation1 dans source j'aimerais pouvoir choisir le bloc source avec les attributs a copier vers la destination. J'aimerais pouvoir lister les attributs dans une listbox et sélectionner celui que je veux copier. Exemple attribut source : IND_A à copier vers l'attribut destination IND_B Merci
Netparty Posté(e) le 4 janvier 2022 Auteur Posté(e) le 4 janvier 2022 Bonjour @Luna J'aimerai que se soit visuel, Le nom du bloc sera toujours identique, sauf qu'il seront dans des présentations différente. Le bloc est le bloc CARTOUCHE, mon idée est de ne pas devoir réécrire chaque nouvel indice de chaque présentation surtout si il sont identique
Luna Posté(e) le 4 janvier 2022 Posté(e) le 4 janvier 2022 Le sujet commence donc à se préciser. On a donc une seule définition de bloc concernée, mais ses références doivent se trouver dans des présentations différentes. Le but étant de gérer les modifications d'indices dans un cartouche. Plusieurs questions me viennent à l'esprit dans ce cas : Combien de références de bloc "CARTOUCHE" as-tu sur chacune de tes présentations ? As-tu un seul et unique bloc "CARTOUCHE" par présentation ou bien peux-tu en avoir plusieurs ? Pourquoi créer un programme qui copie les valeurs d'un cartouche vers un autre au lieu de créer un cartouche qui crée les indices de plusieurs cartouches en même temps ? Ainsi au lieu de devoir définir un cartouche source dans un premier temps puis de copier ses valeurs vers d'autres, tu définis en une fois les valeurs du cartouche source et des cartouches cibles. Peut-on avoir un .dwg d'exemple pour savoir sur quoi travailler précisément ? Je repose la question : VBA uniquement ou bien on peut faire de l'AutoLISP/DCL ? Bisous, Luna
Netparty Posté(e) le 4 janvier 2022 Auteur Posté(e) le 4 janvier 2022 il y a 16 minutes, Luna a dit : Le sujet commence donc à se préciser. On a donc une seule définition de bloc concernée, mais ses références doivent se trouver dans des présentations différentes. Le but étant de gérer les modifications d'indices dans un cartouche. Plusieurs questions me viennent à l'esprit dans ce cas : Combien de références de bloc "CARTOUCHE" as-tu sur chacune de tes présentations ? As-tu un seul et unique bloc "CARTOUCHE" par présentation ou bien peux-tu en avoir plusieurs ? J'ai un seul bloc CARTOUCHE sur chaque présentation Pourquoi créer un programme qui copie les valeurs d'un cartouche vers un autre au lieu de créer un cartouche qui crée les indices de plusieurs cartouches en même temps ? Ainsi au lieu de devoir définir un cartouche source dans un premier temps puis de copier ses valeurs vers d'autres, tu définis en une fois les valeurs du cartouche source et des cartouches cibles. D'un projet à l'autre tout est différent c'est pour cela que j'aimerais pouvoir copier certain indice vers certaine présentation Peut-on avoir un .dwg d'exemple pour savoir sur quoi travailler précisément ? Je repose la question : VBA uniquement ou bien on peut faire de l'AutoLISP/DCL ? Je pensait que VBA était peut-être plus clair pour les formulaire mais cela peut-être aussi Autolisp/DCL Bisous, Luna Voici un fichier exemple Pour être un peu plus précis : je dois pouvoir choisir quel indice à copier mais la destination n'est pas forcement le même indice exemple je copie l'indice A de la présentation 1 vers l'indice B de la présentation 2. Si je choisi de copier l'indice A je dois inclure tout ce qui va avec c'est à dire ( DATEA , DESSINATEURA , VERIFICATEURA et EMISSIONA ) Dessin_Test.dwg
Luna Posté(e) le 4 janvier 2022 Posté(e) le 4 janvier 2022 Pour le principe de la forme, en AutoLISP on peut utiliser ceci pour copier des attributs entre deux références de blocs (quelque soit le nom du bloc, il faut juste donner le nom de l'étiquette pour la source et l'étiquette cible : (defun copy-Att (blk-src tag-src blk-tgt tag-tgt / ConvEnt get-att-list check LM:vl-SetAttributeValue value) (defun ConvEnt (name flag / tp) (if (= (setq tp (type name)) flag) name (apply (read (strcat "vlax-" (vl-symbol-name tp) "->" (vl-symbol-name flag))) (list name)) ) ) (defun get-att-list (name) (mapcar '(lambda (a) (cons (vla-get-tagstring a) (vla-get-textstring a))) (vlax-invoke (ConvEnt name 'VLA-OBJECT) 'getAttributes)) ) (defun check (blk tag / att value) (and (= "AcDbBlockReference" (vla-get-ObjectName (ConvEnt blk 'VLA-OBJECT))) (setq att (get-att-list blk)) (assoc tag att) (setq value (cdr (assoc tag att))) ) value ) (defun LM:vl-SetAttributeValue (blk tag val) (setq tag (strcase tag)) (vl-some '(lambda (att) (if (= tag (strcase (vla-get-tagstring att))) (progn (vla-put-textstring att val) val) ) ) (vlax-invoke blk 'getAttributes) ) ) (and (setq value (check blk-src tag-src)) (check blk-tgt tag-tgt) (LM:vl-SetAttributeValue (ConvEnt blk-tgt 'VLA-OBJECT) tag-tgt value) ) ) Un exemple d'utilisation simple : (copy-att (car (entsel "\nSource : ")) "MODIFICATIONS_IND_A" (car (entsel "\nCible : ")) "MODIFICATIONS_IND_B") Les arguments 'blk-*' peuvent aussi bien correspondre à l'Entity name de la référence de bloc qu'au VLA-Object de cette même référence. J'ai essayé de programmer en Visual LISP afin que cela se rapproche le plus possible du langage VBA. Evidemment il s'agit d'une méthode généralisée et non adaptée à ta demande précisément, cependant cela peut te donner des pistes de recherches. Je verrais si j'ai un peu de temps dans la semaine pour regarder de plus près ta problématique. Je maintiens tout de même qu'il serait plus simple de créer un programme pour créer les indices de modification au lieu de les copier... Bisous, Luna
Netparty Posté(e) le 5 janvier 2022 Auteur Posté(e) le 5 janvier 2022 Bonjour @Luna Merci je vais jeter un œil à cela Bonne journée
Curlygoth Posté(e) le 6 janvier 2022 Posté(e) le 6 janvier 2022 je te conseil de travail en listebox pour gérer mes calques dans mes présentations : mais tu pourrais avoir une forme similaire avec en haut les presentataion et en bas la liste des blocs de la présentations ajouté grace à un événement ^^ et pour récupérer les blocs d'un espace papier : il faut le rendre actif et boucler sur les objets du paperspace 😉 Mon site Web (en cours de construction) : Site DA-CODE de @didier
Netparty Posté(e) le 6 janvier 2022 Auteur Posté(e) le 6 janvier 2022 Bonjour @Curlygoth Merci pour l'information Aurais-tu un bout de code pour me diriger dans la bonne voix merci
Curlygoth Posté(e) le 7 janvier 2022 Posté(e) le 7 janvier 2022 ThisDrawing.ActiveLayout = ThisDrawing.Layouts("NOM Présentations") 'tu vas aller vers ta présentation donc 1 ligne pour aller vers cette page et une autre a la fin pour revenir à la présentataiosn de base si besoin 😉 ensuite, tu n'as qu'a parcourir les blocs de la présentation (je te conseil de faire des fonctions car sinon tu t'en sortira pas 😉 Mon site Web (en cours de construction) : Site DA-CODE de @didier
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant