Aller au contenu

sechanbask

Membres
  • Compteur de contenus

    1 013
  • Inscription

  • Dernière visite

Tout ce qui a été posté par sechanbask

  1. Bonsoir, Comment faire pour qu'au lancement d'une commande LISP rien n'apparaisse à l'utilisateur... Merci d'avance
  2. sechanbask

    Blocs dyn et attributs

    Le plus simple pour que les autres utilisateurs ne se perdent pas (et répondent ici et sur ton nouveau message) c'est de supprimer ce sujet, moi ça me dérange pas de supprimer mes posts..
  3. Actuellement, tu as dû te faire un icône avec une commande "mettreajourchamp" et tu cliques dessus à chaque changement non ? Car pour la MAJ automatique c'est pas terrible : aide autocad : A mon avis le plus simple c'est de se faire un icône, ou de faire un code VBA avec un évènement sur un action de souris (déplacement) ou sur le déplacement d'un gripp dynamique. Bon le problème c'est que j'ai émis l'idée mais que j'ai pas vraiment le temps de le faire et je ne suis pas sûr d'en être capable...
  4. sechanbask

    Blocs dyn et attributs

    La bestiole n'est pas un smiley... Tu as mis ce message en tant que bug, c'est certainement pour ça que personne ne t'a répondu, il faut que édite ton premier message et que tu enlèves en bas à droite l'araignée ou bestiole (qui indique que ton message est une erreur) si tu n'y arrives pas demande de l'aide au Webmaster en cliquant sur Contact dans la bannière où se trouve la date... Les webmaster sont sympas et aide beaucoup...
  5. pour remplir la feuille EXCEL qui sert à l'insertion sous autocad, est-ce que tu disposes d'une autre feuille excel avec la valeur des attributs ? Si non, oublie mon intervention. Bonne journée
  6. c'est fait je le remets là mais il est bon dans le sujet :http://cjoint.com/?jkiXexm4SB Bonne utilisation, j'ai appris récemment la méthode pour contrôler la régénération de l'écran... donc il faudrait le mettre (voir commentaire du code).
  7. jeefreeze : Tu as déjà un fichier sous forme de tableur dans lequel tu as la valeur de tes attributs que tu va remettre dans le fichier crée par le lisp ? si oui, regarde la fonction excel RECHERCHER, il me semble qu'elle fait un peu comme une fusion de base de données... Comme la macro que je t'avais proposée.
  8. Ce code là, c'est uniquement pour répertorier les propriété des blocs rien d'autre... Ce code fonctionne bien s'il extraire : -propriétés classique (colonne A à F inclus) -les attributs(en majuscule), -les attributs constants (pas la même méthode que pour les attributs)(en majuscule avec un *devant), -les propriétés dynamiques et visibilité (avec seulement la première lettre en majuscule), en gros si ça te donne ça c'est bon : http://cjoint.com/?jjlPYqC2qm -Pour l'instant je ne sais pas chercher dans les codes DXF pour obtenir X et Y des blocs... je vais chercher mais déjà , je suis content que ça marche pour toi...Après il faudra que je fasse le code dans l'autres senes pour que ceux qui ont les LT puissent l'utiliser.. et après faire l'injection des données vers autocad...
  9. sous VBA d'autocad, tu as rajouté la référence EXCEL ? si oui, de quelle version d'EXCEL tu disposes? Merci pour l'aide au débuggage
  10. Pour tout commentaire sur ce sujet, le plus simple c'est de poster sous ce sujet... Merci d'avance de vos remarques et ou de modifications.
  11. MACRO VBA EXCEL VBA n'existe pas sous autocad LT mais il est possible de commander autocad via le VBA d'EXCEL... Voilà le code: version 0.4 [surligneur] A priori, ça marche pour les versions pleines et LT mais je n'ai pas de retour sur cette version... Si ça marche merci à ceux qui m'ont aidé et si ça marche pas merci à ceux qui vont m'aider...[/surligneur] Modifications notables : -ajout de gestion d'erreur si autocad est ouvert sans plan Public Graphics As AcadApplication Sub BlocDynToStaticBloc() Dim chemin As String Dim Ent As AcadEntity Dim C As Integer 'si error continuer par la ligne suivante On Error Resume Next 'capture l'objet autocad en tant qu'application s'il est ouvert Set Graphics = GetObject(, "AutoCAD.Application") 'si l'objet n'existe pas, c'est que l'application n'est pas lancée, donc création de l'objet If Err.Description > vbNullString Then 'effacer le type d'erreur Err.Clear 'ouvrir l'application autocad Set Graphics = CreateObject("AutoCAD.Application") 'demande à l'utilisateur quel est le dessin à ouvrir chemin = Application.GetOpenFilename("Dessins AutoCAD (*.dwg), *.dwg") 'ouvrir le document dans autocad Graphics.Documents.Open (chemin) End If 'autocad visible Graphics.Visible = True Dim sngNomPlan As Single sngNomPlan = 0 sngNomPlan = Graphics.Documents.Count Select Case sngNomPlan 'cest ici qu'on pourra gérer les transormation des blocs sur plusieurs plans... Case 0 'demande à l'utilisateur quel est le dessin à ouvrir chemin = Application.GetOpenFilename("Dessins AutoCAD (*.dwg), *.dwg") 'ouvrir le document dans autocad Graphics.Documents.Open (chemin) End Select Dim strNumeroVersion As String 'récuperer le numero de la verion autocad strNumeroVersion = Graphics.Version 'récuperer uniquement les 4 premiers carcatères en partant de la gauche strNumeroVersion = Left(strNumeroVersion, 4) 'mettre dans le fenêtre d'execution le numero de la version Debug.Print strNumeroVersion 'mettre à 0 le nombre de passage de boucle = nombre de bloc dynamique C = 0 'pour chaque entité dans le dessin ouvert For Each Ent In Graphics.ActiveDocument.ModelSpace 'bloc? If Ent.ObjectName = "AcDbBlockReference" Then Dim handlenom As String 'récuperer le handle du bloc handlenom = Ent.Handle 'si une erreur survient aller dans la gestion d'erreur 'qui s'appelle gestion (voir la fin du code) On Error GoTo gestion ' attention s'il ya une entité que l'on ne peut pas considérée 'comme IAcadBlockReference2 ou IAcadBlockReference (version autre que 2006) 'elle est deplacée dans le nouveau calque "Bloc_à_problème" Dim oBkRef As IAcadBlockReference 'enregistrer l'entité en tant que IAcadBlockReference2 'test sur la verion Select Case strNumeroVersion Case 16.2 'la version est 2006 'aller dans la function sautfunction 'pour changer la référence du bloc 'obligatoirement dans une function car si 'on utilise une version 2007, 'VBA lors de la prévérification va trouver une 'déclaration inexacte et va faire une erreur non gérable sautfunction Case Else 'si la verion est differente de 2006 Set oBkRef = Ent 'l'entité est enregistrer sous une réference de bloc End Select 'le bloc est-il dynamique? If oBkRef.IsDynamicBlock = True Then 'incrementer la variable C C = 1 + C Dim v As Variant 'mettre les propriétés dynamiques dans V v = oBkRef.GetDynamicBlockProperties Dim P As Integer 'chercher dans les V les propriétés For P = LBound(v) To UBound(v) 'mettre le nom de la propriété dans odynprop Dim oDynProp As AcadDynamicBlockReferenceProperty Set oDynProp = v(P) 'si la propriété est la visibilité If oDynProp.PropertyName = "Visibilité" Then Dim Visibilite As String 'mettre dans visibilité l'été de visibilité Visibilite = oDynProp.Value End If 'si la propriété est la visibilité Next P Dim strNomeff As String 'mettre dasn strnomeff le nom du bloc (qui apparait à l'utilisateur) 'en ajoutant la visibilité et le handle 'permet de recréer plusieurs fois des blocs identiques 'alors que ce n'est pas possible s'il porte le même nom... '(ça c'est pas terrible car le nombre de bloc va vraiment augmenter mais je ne vois pas comment le gérer) strNomeff = oBkRef.EffectiveName & " " & Visibilite & " " & handlenom 'convertir le bloc dyn en bloc statique et lui donner son ancien nom + visibilité +son handle oBkRef.ConvertToStaticBlock (strNomeff) 'si possible remettre l'unite du bloc telle qu'elle était définie Else 'blocdyn? End If 'blocdyn? On Error GoTo 0 End If 'bloc? Next Ent 'pour chaque entité dans le dessin ouvert Select Case C Case 0 MsgBox "Le dessin ne contient pas de bloc dynamique." Case 1 MsgBox C & " bloc dynamique a été transformé en bloc statique." Case Else MsgBox C & " blocs dynamiques ont été transformés en blocs statiques." End Select Exit Sub gestion: Debug.Print Err.Number, Err.Description 'déplace dans un nouveau calque l'entité "non bloc ref" et pourtant détectée comme telle Dim Newlayer1 As AcadObject Dim strNouveaucalque As String strNouveaucalque = "Bloc_à_problème" Set Newlayer1 = Graphics.ActiveDocument.Layers.Add(strNouveaucalque) On Error Resume Next Ent.Layer = strNouveaucalque If Err.Number = 91 Then MsgBox "Veuillez purger les blocs de votre dessin avant de recommencez l'opération." End If End Sub Function sautfunction() Dim oBkRef2 As IAcadBlockReference2 Set oBkRef2 = Ent Set oBkRef = oBkRef2 End Function Il faut le mettre dans un module VBA d'excel, ajouter la référence AUTOCAD library (selon la version) (dans Outils référence et faire F5 sous VBA editeur ou revenir sur le feuille EXCEL et faire F8 puis choisir BlocDynToStaticBloc et faire EXECUTER. J'espère que ça marche sous autocad Lt sinon, veuillez m'informer des problèmes (ligne et numéro d'erreur)...[Edité le 7/9/2007 par sechanbask][Edité le 8/9/2007 par sechanbask][Edité le 8/9/2007 par sechanbask][Edité le 10/9/2007 par sechanbask][Edité le 10/9/2007 par sechanbask] [Edité le 13/9/2007 par sechanbask]
  12. bon courage...
  13. j'ai pas essayé IXL et LXL, j'ai utiliser uniquement les express d'autocad... je crois qu'on peux les installer avec le CD d'autocad après coup ou alors faut chercher sur le net... pour fusionner les base de donnée, si c'est pas confidentielle tu pourras le faire de chez toi où je pourrais de le faire ... C'est bête que tes macro Excel soit bloque car je travaille dans un BE fluide et c'est rare les fois où on ne crée pas de macro pour gagner un peu de temps...
  14. Vu que tu as une version complète, je te suggère d'installer les Express... car j'ai réussi à réinjecter les attributs en 20 secondes alors sauf si tu as un base de données à modifier(et encore voir la fin de mon post), le plus simple c'est les express... sauf si tu veux attendre le code que je suis en train de faire mais pour ça compte bien encore 4 jours... j'arrive à faire l'extraction de toutes les données du bloc mais j'ai pas commencé l'injection... si tu as une base de donnée à remanipuler avec 2 colonnes identiques je peux le faire automatiquement : http://www.cadxp.com/sujetXForum-16420.htm attention c'est une macro excel à mettre dans un module.
  15. j'aimerais bien t'aider mais je n'ai pas autocad 2008 mais 2006 dons j'arrive pas à ouvrir ton fichier pour cela enregistre -le en 2004. Ensuite, je ne suis pas mauvais en VBA mais en LISP je sais à peine lancer une commande... alors ça m'étonnerais que je puisse comprendre comment autocad arrive à retrouver les attributs depuis leur place... sauf si tu leur a mis un attribut de champs avec leurs coordonnées dedans...
  16. Si tu as des blocs dynamiques ça se corse : tes attribut sont invisibles ou il sont invisibles pour les états de visibilité de ton bloc dynamique ??? [Edité le 20/11/2007 par sechanbask]
  17. sechanbask

    Dernière commande

    je pense sérieusement que c'est problème de compatibilité entre VBA et LISP, tu n'as pas de commande avec une interception utilisateur comme celle que j'ai posté ? P.S. ça marche toujours pas...
  18. sechanbask

    MENUS MOSAIQUES

    il faut que faire un cliché par fichier il me semble...
  19. sechanbask

    Dernière commande

    j'ai une error de syntaxe sur : ThisDrawing.Utility.GetString(True, "(princ)") Je ne même pas passer à la ligne suivante on "oubliant l'erreur" avec on error resume next j'ai donc essayé ça : Sub DMN() Dim Largeur As String Largeur = ThisDrawing.Utility.GetString(True, "Veuillez entrer la largeur de la réservation :") Largeur = ThisDrawing.Utility.GetString(True, "(princ)") MsgBox "La largeur de la réservation est de : " & Largeur & " cm." & vbCr End Sub mais en vain car forcement ça me donne dans la ligne dynamique : "Veuillez entrer la largeur de la réservation :Veuillez entrer la largeur de la réservation :". Puis une fois la valeur donnée, la ligne dynamique me redemande de remplir la variable largeur en écrivant "(princ)" . Bien sur seul ce que j'écris avec "(princ)" sera utilisable par le programme.. J'ai pas compris comment ton astuce devait marcher..
  20. sechanbask

    Dernière commande

    Le changement du lisp porte ses fruits car dans la ligne de commande, je n'ai que ça: "Commande: DMN \nVeuillez entrer la largeur de la réservation :" par contre j'ai une différence entre la ligne de commande et la ligne dynamique (sous autocad 2006) : -ligne de commande : (voir au dessus) -ligne dynamique : "\nVeuillez entrer la largeur de la réservation :\nVeuillez entrer la largeur de la réservation :" c'est bizarre non ?
  21. sechanbask

    Dernière commande

    J'ai effectué plusieurs modifications pour tenter de résoudre mon problème en vain alors je poste de nouveau les codes: Code de lancement en LISP: (defun c: DMN() (command "-vbarun" "PROJET.DVB!INSAUTO.DMN") (princ) ) Code de la macro VBA lancé par DMN(lisp) : Sub DMN() Dim Largeur As String Largeur = ThisDrawing.Utility.GetString(True, "Veuillez entrer la largeur de la réservation :") MsgBox "La largeur de la réservation est de : " & Largeur & " cm." & vbCr End Sub Le résultat est toujours le même en ligne de commande j'ai toujours 2 fois le texte qui apparait : Extrait de la ligne de commande : "Commande: dmn -vbarun Nom de la macro: PROJET.DVB!INSAUTO.DMN Veuillez entrer la largeur de la réservation :Veuillez entrer la largeur de la réservation : " D'ailleurs, si je pouvais juste avoir une fois le texte "Veuillez entrer la largeur de la réservation :" sans "-vbarun Nom de la macro: PROJET.DVB!INSAUTO.DMN " ça serait encore plus joli... mais déjà que je suis dans la panade c'est peut-être trop demandé.. [Edité le 7/9/2007 par sechanbask]
  22. VBA n'existe pas sous autocad LT mais il est possible de commander autocad via le VBA d'EXCEL... Voilà le code: http://www.cadxp.com/sujetXForum-16658.htm [Edité le 7/9/2007 par sechanbask]
  23. c'est un tableau autocad ou un tableau VBA (ex : tab(10) )?
  24. je vais me pencher dessus et le faire en VBA via excel et venir titiller autocad... je vous tiendrais au courant si ça avance... j'arrive à le faire depuis VBA d'autocad, il me reste plus qu'à le faire depuis VBA excel.. et vous soumettre le code. [Edité le 6/9/2007 par sechanbask]
  25. sechanbask

    Sur ses 2 oreilles

    Fait attention, pas de geste brusque, car je ne pense pas qu'il est des chiens de garde qui fassent beaucoup de sommation...
×
×
  • 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é