Aller au contenu

Liaison de tableau a tableau


dzanomaniak

Messages recommandés

Coucou,

C'est théoriquement possible mais comme tes 2 tableaux sont dans 2 présentations différentes, il faut triffouiller un peu. Pour y parvenir il faut insérer un champ dynamique (formule) dans le tableau cible et connaître l'ID de ton tableau source.
Pour connaître l'ID de ton tableau je te suggère de simplement créer un objet texte > faire un clic droit dans l'éditeur de texte > insérer un champ > Formule > Cellule > Cliquer sur la cellule du tableau source que tu souhaites lier à ton second tableau.
Tu devrais obtenir une ligne comme ceci :
image.png.70d57197fd4c14976dc7041414227319.png

La ligne qui nous intéresse est celle surlignée ci-dessus en jaune. Tu fais un CTRL+C de cette ligne, puis tu peux fermer la fenêtre et supprimer l'objet texte (il était juste temporaire pour récupérer l'ID du tableau). Tu prends ensuite ton second tableau et tu insères un champs dans la cellule de ton choix (encore une fois il s'agit d'une formule) en collant la valeur précédemment copiée dans l'expression de formule. Tu peux fermer la fenêtre en appuyant sur OK et tes deux tableaux sont liés (si tu modifies la valeur dans le tableau source, la valeur dans le tableau cible se met à jour après un REGEN) 😛

Tu remarqueras d'ailleurs que l'expression de la formule est en fait l'ID du tableau "Table(2410179017920)" suivi des coordonnées de la cellule "B2", séparé par un point "."
Tu peux donc changer facilement les coordonnées de la cellule si besoin sans repasser par un texte temporaire ! Attention tout de même, car il se peut que le lien casse (mais cela m'est arrivé assez rarement).

Bisous,
Luna

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

La solution de Luna me semble la meilleur.

Sinon voici un petit Lisp qui propage la valeur d'une cellule dans les tableaux se trouvant dans les autres Présentations que celle active.

Par contre la valeur des rangées et colonnes commencent à zero: A = 0, B = 1 ... et 1 = 0, 2 = 1

Par exemple la cellule B3 est row = 2 , column = 1

(defun c:propcell (/ acdc cl lname row col val)
    (vl-load-com)
	(setq acdc (vla-get-activedocument (vlax-get-acad-object))
		  cl (getvar 'ctab)
		  row (getstring "Row ?")
		  col (getstring "Column ?")
		  val (getstring "Value ?")
	)
	(vlax-for l  (vlax-get-property acdc 'layouts)
		(setq lname (vla-get-name l))
		(if (and (/= lname "Model")(/= lname cl))
			(vlax-for obj  (vlax-get-property l 'block)
				(if (= (vla-get-objectname obj) "AcDbTable")
					(vla-SetCellValue obj row col val)
				)
			)
		)
	)
)

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
Le 18/05/2023 à 10:40, Luna a dit :

Coucou,

C'est théoriquement possible mais comme tes 2 tableaux sont dans 2 présentations différentes, il faut triffouiller un peu. Pour y parvenir il faut insérer un champ dynamique (formule) dans le tableau cible et connaître l'ID de ton tableau source.
Pour connaître l'ID de ton tableau je te suggère de simplement créer un objet texte > faire un clic droit dans l'éditeur de texte > insérer un champ > Formule > Cellule > Cliquer sur la cellule du tableau source que tu souhaites lier à ton second tableau.
Tu devrais obtenir une ligne comme ceci :
image.png.70d57197fd4c14976dc7041414227319.png

La ligne qui nous intéresse est celle surlignée ci-dessus en jaune. Tu fais un CTRL+C de cette ligne, puis tu peux fermer la fenêtre et supprimer l'objet texte (il était juste temporaire pour récupérer l'ID du tableau). Tu prends ensuite ton second tableau et tu insères un champs dans la cellule de ton choix (encore une fois il s'agit d'une formule) en collant la valeur précédemment copiée dans l'expression de formule. Tu peux fermer la fenêtre en appuyant sur OK et tes deux tableaux sont liés (si tu modifies la valeur dans le tableau source, la valeur dans le tableau cible se met à jour après un REGEN) 😛

Tu remarqueras d'ailleurs que l'expression de la formule est en fait l'ID du tableau "Table(2410179017920)" suivi des coordonnées de la cellule "B2", séparé par un point "."
Tu peux donc changer facilement les coordonnées de la cellule si besoin sans repasser par un texte temporaire ! Attention tout de même, car il se peut que le lien casse (mais cela m'est arrivé assez rarement).

Bisous,
Luna

merci d'avoir pris le temps de répondre, je vais testé de suite, merci encore.

Lien vers le commentaire
Partager sur d’autres sites

Le 22/05/2023 à 16:07, Fraid a dit :

Bonjour,

La solution de Luna me semble la meilleur.

Sinon voici un petit Lisp qui propage la valeur d'une cellule dans les tableaux se trouvant dans les autres Présentations que celle active.

Par contre la valeur des rangées et colonnes commencent à zero: A = 0, B = 1 ... et 1 = 0, 2 = 1

Par exemple la cellule B3 est row = 2 , column = 1

(defun c:propcell (/ acdc cl lname row col val)
    (vl-load-com)
	(setq acdc (vla-get-activedocument (vlax-get-acad-object))
		  cl (getvar 'ctab)
		  row (getstring "Row ?")
		  col (getstring "Column ?")
		  val (getstring "Value ?")
	)
	(vlax-for l  (vlax-get-property acdc 'layouts)
		(setq lname (vla-get-name l))
		(if (and (/= lname "Model")(/= lname cl))
			(vlax-for obj  (vlax-get-property l 'block)
				(if (= (vla-get-objectname obj) "AcDbTable")
					(vla-SetCellValue obj row col val)
				)
			)
		)
	)
)

 

merci d'avoir pris le temps de répondre.

Lien vers le commentaire
Partager sur d’autres sites

Le 18/05/2023 à 10:40, Luna a dit :

Coucou,

C'est théoriquement possible mais comme tes 2 tableaux sont dans 2 présentations différentes, il faut triffouiller un peu. Pour y parvenir il faut insérer un champ dynamique (formule) dans le tableau cible et connaître l'ID de ton tableau source.
Pour connaître l'ID de ton tableau je te suggère de simplement créer un objet texte > faire un clic droit dans l'éditeur de texte > insérer un champ > Formule > Cellule > Cliquer sur la cellule du tableau source que tu souhaites lier à ton second tableau.
Tu devrais obtenir une ligne comme ceci :
image.png.70d57197fd4c14976dc7041414227319.png

La ligne qui nous intéresse est celle surlignée ci-dessus en jaune. Tu fais un CTRL+C de cette ligne, puis tu peux fermer la fenêtre et supprimer l'objet texte (il était juste temporaire pour récupérer l'ID du tableau). Tu prends ensuite ton second tableau et tu insères un champs dans la cellule de ton choix (encore une fois il s'agit d'une formule) en collant la valeur précédemment copiée dans l'expression de formule. Tu peux fermer la fenêtre en appuyant sur OK et tes deux tableaux sont liés (si tu modifies la valeur dans le tableau source, la valeur dans le tableau cible se met à jour après un REGEN) 😛

Tu remarqueras d'ailleurs que l'expression de la formule est en fait l'ID du tableau "Table(2410179017920)" suivi des coordonnées de la cellule "B2", séparé par un point "."
Tu peux donc changer facilement les coordonnées de la cellule si besoin sans repasser par un texte temporaire ! Attention tout de même, car il se peut que le lien casse (mais cela m'est arrivé assez rarement).

Bisous,
Luna

Bonjour,  donc j'ai copié le tableau de la 2ème présentation sur la première présentation, pour avoir l'ID, et ensuite recoller l'ID sur la cellule...  par contre cela ne fonctionne que pour une valeur numérique pas pour pour du texte. Je met en lien une documentation de cad magazine.   

https://cad-magazine.com/wp-content/uploads/2019/09/cad160_pp58-63_trucs.pdf

Lien vers le commentaire
Partager sur d’autres sites

Le 22/05/2023 à 16:07, Fraid a dit :

Bonjour,

La solution de Luna me semble la meilleur.

Sinon voici un petit Lisp qui propage la valeur d'une cellule dans les tableaux se trouvant dans les autres Présentations que celle active.

Par contre la valeur des rangées et colonnes commencent à zero: A = 0, B = 1 ... et 1 = 0, 2 = 1

Par exemple la cellule B3 est row = 2 , column = 1

(defun c:propcell (/ acdc cl lname row col val)
    (vl-load-com)
	(setq acdc (vla-get-activedocument (vlax-get-acad-object))
		  cl (getvar 'ctab)
		  row (getstring "Row ?")
		  col (getstring "Column ?")
		  val (getstring "Value ?")
	)
	(vlax-for l  (vlax-get-property acdc 'layouts)
		(setq lname (vla-get-name l))
		(if (and (/= lname "Model")(/= lname cl))
			(vlax-for obj  (vlax-get-property l 'block)
				(if (= (vla-get-objectname obj) "AcDbTable")
					(vla-SetCellValue obj row col val)
				)
			)
		)
	)
)

 

Bonjour,

désolé je n'ai pas compris comment cela fonctionne, j'ai pris le temps de lire plusieurs fois mais .. je regarderais mardi. 

Lien vers le commentaire
Partager sur d’autres sites

il y a 14 minutes, Fraid a dit :

Bonjour,

C'est le format de ta cellule qui est en cause.

Tu sélectionne ta cellule et dans les propriétés tu change Type de données en Texte

et après tu copie ton tableau dans d'autre presentation.

merci, je vais voir , mais c'est dans le manuel de doc magazine qu'ils le disent.

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é