Aller au contenu

Addition de champs dynamiques


Messages recommandés

Posté(e)

Messieurs,

 

J'aimerai additionner des champs dynamiques que j'ai extrait. Je ne sais pas comment m'y prendre. Comment additionner des chaînes "String" qui par définition ne peuvent s'additioner ?

Je sèche complètement, voilà un extrait des champs dynamiques.

 

'Instruction des variables du champs en code ASCII

prefixe = Chr(37) & Chr(60) & Chr(92) & "AcObjProp Object" & Chr(40) & Chr(37) & Chr(60) & Chr(92) & "_ObjId"

 

milieu = entObjectID

 

suffixe = Chr(62) & Chr(37) & Chr(41) & " .Area " & Chr(92) & "f " & Chr(34) & Chr(37) & "lu2" & Chr(37) & "pr2" & Chr(34) & Chr(62) & Chr(37)

 

Dim tt As String

 

tt = (prefixe & " " & milieu & suffixe & " m²")

 

J'aimerai cliquer sur plusieurs surfaces successivement puis à la fin cela donnerai le total en dynamique.

 

Merci à vous !

 

PS : Si qq'un a une routine Lisp je prend quand même !

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)

Salut,

 

Je n’ai pas la solution à ton problème en VBA mais presque (enfin je pense).

 

Tu peux t’inspirer du principe d’addition de deux champs dynamiques dans AutoCAD, le principe et le suivant:

 

Si tu insères un champ qui renseigne l’aire d’une polyligne tu obtiens l’expression de champ :

%<\AcObjProp.16.2 Object(%<\_ObjId 2130055032>%).Area \f "%lu2%pr3%ct8[0.001]">%

 

Maintenant le plus intéressant pour toi :

Tu insère un champ et dans la boite de dialogue:

--> choisir dans Catégorie de champ: objects

--> choisir dans Noms de champs : Formule

--> tu insère un, deux, trois….. champs dynamiques dans la zone de texte formule avec bien sûre un signe + entre chaque champ.

 

Cela donne une expression du genre (exemple avec deux champs):

%<\AcExpr (%<\_FldPtr 2130042032>%+%<\_FldPtr 2130042000>%) \f "%lu2">% :( :(

En espérant que ce principe soit possible en VBA.

 

Bon courage,

 

Posté(e)

Salut Micacao !

 

Miller Merci de t'intéresser à mon sujet ! Effectivement tu m'as apporté une aide précieuse, je vais étudier le cas pour savoir si on peut piloter cette opération en VBA.

Il faudrai que je sache à quoi correspond cette chaîne [surligneur]_FldPtr 2130042032 [/surligneur] et comment l'obtenir, comme avec "getentity" ou "ObjectId" par exemple.

 

Maintenant le plus intéressant pour toi :

Tu insère un champ et dans la boite de dialogue:

--> choisir dans Catégorie de champ: objects

--> choisir dans Noms de champs : Formule

--> tu insère un, deux, trois….. champs dynamiques dans la zone de texte formule avec bien sûre un signe + entre chaque champ.

 

Pour l'instant je fais les manip à la main, mon résultat sera de piquer les surface avec "getentity" plusieurs fois puis d'un seul clik toute l'opération de créer un champ addition se fait !...

 

J'ai encore du chemin ! J'ai des contacts en lisp qui me propose aussi des options, faut que je mixe tout ça.

 

Encore merci !

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)

Salut phil_vsd,

 

As-tu fait des tests?

 

Il faudrai que je sache à quoi correspond cette chaîne [surligneur] _FldPtr 2130042032 [/surligneur]

 

Normalement, [surligneur] 2130042032[/surligneur] est l'id de l'objet et pour [surligneur] _FldPtr[/surligneur] c'est le grand mystère.

Car en faisant l'opération d'addition de champs dynamiques dans AutoCad l'id d'un objet n'est pas le même que dans dans champ dynamque "aire" seul.

 

Objet 1 => %<\AcObjProp.16.2 Object(%<\_ObjId 2130055032>%).Area \f "%lu2%pr2%ct8[0.0001]">%

Objet 2 => %<\AcObjProp.16.2 Object(%<\_ObjId 2130055040>%).Area \f "%lu2%pr2%ct8[0.0001]">%

 

Somme des deux => %<\AcExpr (%<\_FldPtr 2130042096>%+%<\_FldPtr 2130042080>%) \f "%lu2%pr2%ct8[0.0001]">%

 

Tu peux peut-être essayer de faire un essai avec des id d'objets identiques.

 

A+

 

Posté(e)

Salut Micacao,

 

Oui j'ai remarqué :

 

Objet 1 => %<\AcObjProp.16.2 Object(%<\_ObjId 2130055032>%).Area \f "%lu2%pr2%ct8[0.0001]">%

Objet 2 => %<\AcObjProp.16.2 Object(%<\_ObjId 2130055040>%).Area \f "%lu2%pr2%ct8[0.0001]">%

 

Somme des deux => %<\AcExpr (%<\_FldPtr 2130042096>%+%<\_FldPtr 2130042080>%) \f "%lu2%pr2%ct8[0.0001]">%

 

L'id de Objet 1 est : 2130055032

L'id de Objet 1 dans la somme est : 2130042096

 

L'id de Objet 2 est : 2130055040

L'id de Objet 2 dans la somme est : 2130042080

 

Cette nouvelle ientification qui arrive de on ne sait où vient perturber l'ambiance... J'avais pensé transformer le tout en Ascii, même le _FldPtr mais cette nouvelle Id... BoumBadaboum...

 

Ceci dit j'ai une piste : Pour additionner des champs dynamiques on prend leurs valeurs brutes, sans les m² ou tout suffixe, rien que des chiffres et on transfère cette valeur qui est une "String" dans une nouvelle valeur "Double" que l'on peut additionner à souhait !

 

J'aimerai additionner des champs dynamiques que j'ai extrait. Je ne sais pas comment m'y prendre. Comment additionner des chaînes "String" qui par définition ne peuvent s'additioner ?

 

Comme ça :

 

 Dim S_info as string 'Pas de caractères alphanumériques
Dim D_info as double

D_info = val(S_info)

 

 

Je vais repprendre ma routine "Addition de surface" dans le forum VBA routine, puis au lieu de piquer des polylignes et d'extraire leurs area, je vais concatainer le champs dynamiqe en Ascii, et balancer leurs valeurs dans des variable Double et faire la somme. Faut que je trouve du temps pour le faire. On sera limités à 12 pièces mais c'est déjà bien !

 

Te tiens au courant ! bye !

 

[Edité le 23/9/2006 par phil_vsd]

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

  • 4 semaines après...
Posté(e)

Game over...

 

Je n'y arrive pas, j'exporte mes attributs dynamiques concoctés par (Gile) dans un tableau et je fais le calcul en bas de colonne. Le résultat est lui-même dynamique...

 

Anyway...

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

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é