rom1_am
Membres-
Compteur de contenus
101 -
Inscription
-
Dernière visite
-
Jours gagnés
1
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par rom1_am
-
Bonjour, Désolé, mais étant donné que le dernier message que j'ai posté sur ce forum a disparu, j'ai posté une réponse sur ce forum: http://www.exmateria.com/index.php?topic=2065.0#msg3134 a+
-
Salut D'après l'explication, je n'ai pas tout saisi exactement mais je pense pas que cela soit trop compliqué à réaliser. Si tu as des bouts de code que tu n'arrives pas à faire fonctionner, n'hésites pas à demander de l'aide sur le forum, mais essaies de joindre des exemples, car comme ça, ce n'est pas facile d'apporter des conseils. Concernant les liaisons AutoCAD/Excel, le sujet a été traité de nombreuses fois, je pense que le post précèdent peut te servir de base pour faire ton programme. a+ et bon courage
-
Salut, Rajoute On Error Resume Next juste après : ' PROPDYN Attributes = BlocRef.GetDynamicBlockProperties (Ligne 72 dans la fonction EnvoyerVersAutoCAD) Ce qui pose problème est la propriété dynamique 'Origin' qui attend un tableau de valeur. Avec le 'On Error Resume Next' ça fonctionne, sinon, pour faire plus propre, tu pourrais rajouter un test pour ne pas prendre en compte cette propriété. Aide-toi de l'espion pour voir le contenu de la variable 'Attributes' pour voir les valeurs prises réellement par tes différentes propriétés. a+
-
Salut, Les liens vers les fichiers que tu avais mis sont expirés. Pourrais-tu poster ton fichier excel avec la macro que tu as commencé à modifier ainsi que ton fichier AutoCAD que tu cherches à lire/modifier? A+ PS: il est vrai que le vba est à l'abandon, mais il est toujours dans la version 2012 et toujours dans Excel donc si ce petit bout de programme peut te servir 2-3 ans, c'est toujours ça de pris. De plus, il y a pas mal de similitudes entre le vba et le vb.net, donc des petites routines de ce genre seront relativement faciles à adapter le moment venu (en espérant que d'ici là, les outils pour développer en .net pour AutoCAD auront été simplifiés car pour l'instant, c'est tout de même un peu galère de se plonger là-dedans, surtout pour faire des petits bouts de programme de quelques dizaines de lignes de code.) (Ce n'est que mon avis) [Edité le 7/4/2011 par rom1_am]
-
Salut, Je n'ai pas très bien compris ce que tu veux faire exactement en relisant ton premier message. Mais en général, d'après ce que j'ai pu observer pour insérer un texte et définir un alignement spécifique, il faut bien respecter l'ordre suivant: - Il faut d'abord insérer ton texte à un point d'insertion que tu définis. - Ensuite, tu définis le type d'alignement - Et en dernier, tu définis le point d'alignement. Mais en gros, voici un petit bout de code qui permettra peut-être de mieux expliquer comment il faut procéder: Sub test() Dim PointInsertion(0 To 2) As Double Dim PointAlignement(0 To 2) As Double Dim L_obj_Texte As AcadText PointInsertion(0) = 0#: PointInsertion(1) = 0#: PointInsertion(2) = 0# PointAlignement(0) = 2#: PointAlignement(1) = 2#: PointAlignement(2) = 0# Set L_obj_Texte = ThisDrawing.ModelSpace.AddText("MonTexte", PointInsertion, 30) L_obj_Texte.Alignment = acAlignmentCenter L_obj_Texte.TextAlignmentPoint = PointAlignement End Sub Je ne sais pas si ça t'aidera à faire ce que tu veux, sinon regarde également les exemples de l'aide. a+
-
Bonjour, Il me semble qu'il faut d'abord définir l'alignement puis le point d'alignement. Essaie de rajouter la ligne suivante après ta ligne 'Textes.Alignment=...' Textes.TextAlignmentPoint = (point d'alignement que tu souhaites définir) A essayer
-
Bonjour +1 pour Didier. Sans commentaire pour le reste tant une réaction pareille est incompréhensible et mal placée. a+
-
Bonjour, Ok tant mieux si ça marche. Pour modifier les propriétés dynamiques en général, il faut bien faire attention aux données que tu cherches à écrire: il faut que la valeur soit du bon type et qu'elle ne soit pas en dehors des plages de valeur possible dans ta propriété dynamique. Essaie d'utiliser l'espion vba pour voir le type de valeur qui est pris par la propriété dynamique que tu veux modifier. Ou alors, modifie ton bloc manuellement et exécute ta fonction qui récupère les données sous Excel pour voir la valeur que tu cherches à obtenir. Par sécurité, il vaut mieux rajouter un 'On error resume next' avant le paragraphe où tu modifies les propriétés dynamiques (comme dans l'exemple de la fonction F_PropDynBlocModifierLire que j'ai mis au début de ce post.) a+
-
Bonjour, Ton code ci-dessus ne fonctionne pas car tu as remplacé 'TextString' et 'TagString' par 'Propertyname' et 'Value' uniquement dans la 1ere partie du code qui remplit les colonnes si elles existent déjà et pas dans la 2eme partie qui ajoute les noms de colonnes si elles n'ont pas été trouvées. PS: si tu veux à la fois les attributs et les propriétés dynamiques, il te suffit de dupliquer le paragraphe qui récupère et écrit les attributs dans Excel et de le modifier pour récupérer les propriétés dynamqiues. En gros, repars du fichier d'origine que tu as trouvé, et rajoute le code suivant entre les lignes Next ' Attribut suivant et Row = Row + 1 ' Ligne suivante : ' PROP DYN Attributes = BlocRef.GetDynamicBlockProperties ' On parcourt le tableau For j = LBound(Attributes) To UBound(Attributes) ' On recherche si une colonne existe déjà pour cette étiquette d'attribut Column = 3 ColumnExist = False While Not IsEmpty(Cells(3, Column)) If Cells(3, Column).Text = Attributes(j).PropertyName Then ' Une colonne existe, on la remplit avec la valeur de l'atribut Cells(Row, Column).Value = Attributes(j).Value ColumnExist = True End If Column = Column + 1 ' On passe à la colonne suivante Wend If Not ColumnExist Then ' Aucune colonne n'existe, on en crée une et on la remplit Cells(3, Column).Value = Attributes(j).PropertyName Cells(Row, Column).Value = Attributes(j).Value End If Next ' Propriété dyn suivante
-
Bonjour, Essaie de remplacer: 'BlocRef.HasAttributes' par 'BlocRef.IsDynamicBlock' Sinon, essaie de nous donner plus de détails sur l'endroit exact qui fait que ça plante. Bon courage
-
Bonjour, J'avais fait cette fonction pour lire/modifier des propriétés de blocs dynamiques: Function F_PropDynBlocModifierLire(Bloc As AcadBlockReference, NomPropDyn As String, valeur As Variant, action As String) As Variant '********************************************************************** 'Description: Fonction servant à modifier ou lire une propriété dynamique de bloc 'Parametres: -Bloc (objet), Nom de la propriété, valeur ' - action: doit prendre la valeur "lire" ou "modifier" '********************************************************************** Dim i As Integer 'le compteur des attributs d'un bloc Dim varPropDyn As Variant 'la collection des propriétés dynamique d'un bloc On Error Resume Next 'au cas où la valeur en parametre ne soit pas du bon type If Bloc.IsDynamicBlock Then varPropDyn = Bloc.GetDynamicBlockProperties For i = LBound(varPropDyn) To UBound(varPropDyn) If varPropDyn(i).PropertyName = NomPropDyn Then If action = "modifier" Then 'mettre à jour la prop. dyn If valeur = Empty Then valeur = "" varPropDyn(i).Value = valeur Exit For ElseIf action = "lire" Then 'lire la prop. dyn F_PropDynBlocModifierLire = varPropDyn(i).Value Exit For End If End If Next i End If End Function Je pense qu'en l'adaptant et en la rajoutant dans l'exemple que tu as trouvé, ça devrait faire l'affaire. A+
-
Bonjour, Quand tu lances la commande _pline, AutoCAD attend que l'utilisateur saisisse des points pour créer la polyligne. Et lorsque tu affiches ta boite de dialogue, cela prend la main sur AutoCAD et c'est normal que tu ne puisses pas saisir de points. La solution est de lancer ton userform en mode non modal: Remplace 'Userform1.show' par 'Userform1.show(vbmodeless)' si tu veux pouvoir saisir les points de ta polyligne tout en affichant ton userform. Si ce n'est pas ce fonctionnement que tu recherches, je ne comprend pas très bien le sens de ta procèdure. a+
-
Bonjour, Ce message d'erreur ne me dit rien mais est-ce que tu décharges le userform avant d'appeler ta procédure? A mon avis, il faut que tu utilises 'Unload Me' afin de décharger le userform avant d'appeler ta procédure ou alors que tu charges ton userform en mode non modal (show(vbmodeless)).
-
Coder en VBA la bouton tracer une ligne ?
rom1_am a répondu à un(e) sujet de jfcantin197733 dans VBA et VB
Bonjour, La propriété 'Length' est en lecture seule, on ne peut pas régler la longueur de la ligne par cette propriété. Soit tu peux demander l'angle au lieu du 2ème point puis calculer le 2ème point avec Polarpoint: If ReturnString_Distance <> "" Then ReturnString_Distance = ReturnString_Distance * 0.3048 ' returnPnt = ThisDrawing.Utility.GetPoint(basePnt, "Enter a point: ") angle = ThisDrawing.Utility.GetAngle(basePnt, "Enter a point: ") returnPnt = ThisDrawing.Utility.PolarPoint(basePnt, angle, ReturnString_Distance) End If Soit tu peux tracer ta ligne une première fois pour récupérer l'angle puis la supprimer et la retracer à la bonne longueur: Dim lineObj As AcadLine Set lineObj = ThisDrawing.ModelSpace.AddLine(basePnt, returnPnt) Dim AngleLigne AngleLigne = lineObj.angle returnPnt = ThisDrawing.Utility.PolarPoint(basePnt, AngleLigne, ReturnString_Distance) lineObj.Delete Set lineObj = ThisDrawing.ModelSpace.AddLine(basePnt, returnPnt) (il y a surement d'autres manières plus élégantes mais ça devrait marcher) a+ [Edité le 4/8/2010 par rom1_am] -
Bonjour, Il faut ouvrir l'éditeur vba et aller dans le Menu "Outils" puis "Références...".
-
VBA - Créer un bouton style pour faire une ligne
rom1_am a répondu à un(e) sujet de jfcantin197733 dans VBA et VB
Bonjour, Normalement tu devrais voir la ligne si tu utilises la méthode GetPoint en reprenant le point de départ dans le 1er paramètre. -
quelques problèmes TRES agaçants !!!!
rom1_am a répondu à un(e) sujet de rebcao dans CADxp, comment ça marche?
+1 -
Bonjour, Je ne sais pas s'il y a un code DXF pour filtrer la sélection sur les blocs dynamiques (tu peux surement avoir la réponse en postant la question sur le forum lisp) par contre tu peux utiliser la propriété "Bloc.IsDynamicBlock" pour savoir si un bloc est un bloc dynamique ou non.
-
VBA Projet qui focntionne sur mon ordi mais par sur les autres ordinateurs ? Pourquoi ?
rom1_am a répondu à un(e) sujet de jfcantin197733 dans VBA et VB
Bonjour, Juste une idée, est-ce que tu as paramétré les chemins de support dans le profil AutoCAD? -
VBA Manager ne sauve pas mon projet
rom1_am a répondu à un(e) sujet de jfcantin197733 dans VBA et VB
Bonjour, Je ne sais pas comment fonctionne AutoCAD 2002 mais: - Est-ce que ton projet est chargé au démarrage? - Quelle est la syntaxe de ton bouton? - Est-ce que ton projet se trouve dans un répertoire faisant partie des chemins de support de ton profil AutoCAD? A+ -
Cherche testeurs A2008 et A2009
rom1_am a répondu à un(e) sujet de (gile) dans ObjectARX/DBX, C++, .NET, RealDWG
Rebonjour, Je peux pas t'aider car ça dépasse mes compétences, mais j'ai bien la dll acmgdinternal (version 17.2.56.0) dans le répertoire d'AutoCAD2009 et lorsque j'ajoute cette dll en référence dans un projet Visual studio, j'ai bien accès à cette fonction Drawlinetypepattern. En espérant que cela puisse te donner des pistes... -
Cherche testeurs A2008 et A2009
rom1_am a répondu à un(e) sujet de (gile) dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, J'ai essayé sous AutoCAD 2009 et la colonne Présentation est vide. a+ -
Bonjour, Il faut utiliser la fonction "Dir" et faire une boucle tant que la valeur renvoyée n'est pas vide. Voici l'exemple de l'aide: Dir, fonction, exemple Cet exemple utilise la fonction Dir pour vérifier si certains fichiers et dossiers existent. Dim MyFile, MyPath, MyName ' Renvoie "WIN.INI" (sur Microsoft Windows) si ce fichier existe. MyFile = Dir("C:\WINDOWS\WIN.INI") ' Renvoie le nom de fichier avec l'extension indiquée. Si plusieurs ' fichiers *.ini existent, le premier fichier trouvé est renvoyé. MyFile = Dir("C:\WINDOWS\*.INI") ' Appelle de nouveau Dir sans argument pour renvoyer le ' fichier *.INI suivant dans le même dossier. MyFile = Dir ' Renvoie le premier fichier *.TXT avec l'attribut fichier caché. MyFile = Dir("*.TXT", vbHidden) ' Affiche les noms dans C:\ représentant des dossiers. MyPath = "c:\" ' Définit le chemin d'accès. MyName = Dir(MyPath, vbDirectory) ' Extrait la première entrée. Do While MyName <> "" ' Commence la boucle. ' Ignore le dossier courant et le dossier ' contenant le dossier courant. If MyName <> "." And MyName <> ".." Then ' Utilise une comparaison au niveau du bit pour ' vérifier que MyName est un dossier. If (GetAttr(MyPath & MyName) _ And vbDirectory) = vbDirectory Then Debug.Print MyName ' Affiche l'entrée uniquement si elle End If ' représente un dossier. End If MyName = Dir ' Extrait l'entrée suivante. Loop
-
Pour info si ça peut servir à d'autres: Nous avons eu le problème en changeant de traceur (passage d'un modèle hp designjet 100+ à un modèle designjet 130) et il y avait un conflit entre le pilote du nouveau traceur et de l'ancien traceur. Il a fallu sur chaque poste: - enlever l'ancien traceur de la liste des imprimantes - redémarrer le service du spouleur d'impression - supprimer le pilote de l'ancien traceur.
-
Bonjour, Tu peux éventuellement tester le logiciel Opticoupe qui est très efficace et facile à utiliser.
