
tecnopat
Membres-
Compteur de contenus
42 -
Inscription
-
Dernière visite
Tout ce qui a été posté par tecnopat
-
Salut !! Effectivement çà marche mieux avec VBA.Instr(...). Et le morceau de code pour sélectionner un répertoire aussi Merci encore
-
le lien ne marche, Sechanbask. Ceci dit, j'ai bien compris qu'il y avait des problèmes pour déployer une appli et continuer à développer en parallèle. Obligé de décharger et recharger les projets à chaque fois, non ?
-
Excuses-moi, Sechanbask ,mais je n'ai pas bien vu la subtilité qu'il y avait entre : InStr(0, ThisDrawing.Blocks(i).Name, "C2005") et : Pour l'API OpenFileDialog, je crois que je vais plutôt fonctionner par parcours de répertoires, et non par sélection manuelle de fichier, c'est donc pas la peine de de se prendre trop la tête sur ce code, d'autant plus que sur Developpez.com, forum "Général VBA", on m'a dit : http:// http://www.developpez.net/forums/showpost.php?p=3006905&postcount=2 Alors, bon... C'est tout de même étonnant qu'avec ma valeur "OpenFile.flags = &H201" çà marche, mais que je retombe sur l'ancienne Interface bien moche, alors que dans AUTOCAD, on peut sélectionner plusieurs fichiers dans par exemple "Fichier/Ouvrir". Y'a sûrement une solution, mais il faut être initié aux arcanes de la programmation système De Windows... :exclam: Amicalement
-
Salut Je cherche à me servir d'une boîte de dialogue "ouvrir fichier" dans AUTOCAD, en cherchant j'ai donc trouvé du code qui marche bien sur ce post http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=3622#pid10940 Il me manque juste la possibilité de sélectionner plusieurs fichiers, c'est la propriété Multiselect. En cherchant de nouveau, j'ai trouvé une astuce : il s'agit de donner à la propriété Flags la valeur suivante : OpenFile.flags = &H201 Le problème c'est que çà m'affiche alors une boîte de dialogue un peu "old fashioned" bien moche, avec les noms de fichiers tronqués et le signe "~" . çà m'intéresse pas, même si je peux alors en sélectionner plusieurs. C'était pas mal trouvé (bien ésotérique en tout cas :casstet: ) mais c'est pas satisfaisant Quelqu'un sait-il comment faire çà tout en gardant ma belle OpenFileDialog ? D'autre part, tant que j'y suis, je veux, dans la foulée, sélectionner un bloc cartouche présent dans un espace papier, et je veux faire un test sur le nom. J'ai codé çà : Sub extractauto() Dim i As Integer Dim bloccart As Object For i = 0 To ThisDrawing.Blocks.Count - 1 MsgBox ThisDrawing.Blocks(i).Name If Not InStr(0, ThisDrawing.Blocks(i).Name, "C2005") = 0 Then MsgBox "extraction de " & ThisDrawing.Blocks(i).Name Set bloccart = ThisDrawing.Blocks(i) ExtractCart (bloccart) ' End If Next End Sub çà bloque sur InStr(0, ThisDrawing.Blocks(i).Name, "C2005") Pourtant, le msgbox affiche : http://shup.com/Shup/26243/108129155437autocadtz4.png Quel est le problème avec la fonction Instr ? Merci
-
Pour preuve le nouveau scan de DwgVersion : http://shup.com/Shup/25928/10812815216versiondesfiuu7.png
-
Merci Eric Pour ta réponse, et pour ta proposition. Mais il se trouve que j'ai résolu le problème : en voulant t'envoyer des fichiers en pièces jointes, je me suis rendu compte qu'il y avait un problème d'accès à ces fichiers, et seulement eux. C'était un bug de Active Directory : il a fallu me "réapproprier" (terme consacré) les fichiers, et écraser toutes les autorisations des fichiers de ce répertoire, ce qui a résolu le problème. Merci pour ton intervention qui a été déclencheuse de solution.
-
Bonjour J'ai créé une bibliothèque de blocs dynamiques sous la forme de fichiers de blocs, dans un répertoire déterminé. Seulement, pusieurs de ces fichiers sont endommagés, et je ne peux plus inérer les blocsdans mes dessins, çà m'affiche un message d'erreur : Impossible douvrir directement ces fichiers, message d'erreur : http://shup.com/Shup/25887/108128111514avertissemecc5.png Si je fais oui, il m'affiche : http://shup.com/Shup/25889/108128111933messageautobg9.png Il me fait la même chose avec l'utilitaire de récupération de fichiers. Avec un petit logiciel qui s'appelle dwgVersion (qui m'affiche la version du fichier AUTOCAD), ces fichiers m'affichent une version inconnue : http://shup.com/Shup/25891/108128112659versiondesfhs5.png Mon verdict est donc que ces fichiers sont endommagés, ceux qui ne le sont pas (ceux dont DwgVersion affiche "version AUTOCAD2004-2006") fonctionnent bien. D'autre part, ils fonctionnaient bien avant, jusqu'à ces derniers temps. Ma quesion est donc : comment récupérer ces fichiers? Merci d'avance
-
Bonjour Lili2006 Je reviensà la macro longeurtotale, pour arrondir le récultat on peut faire : MsgBox ("longueur totale :" & Format(compteur, "0.00") & "m") à la place de : MsgBox ("longueur totale :" & compteur & "m") c'est plus sympa, non ? D'autre part, voici l'équivalent de "longueurtotale" pour les surfaces (hachures, objets fermés): Sub airetotale() ' Create the selection set Dim sset As Object 'ThisDrawing.SelectionSets("SS2").Delete Set sset = ThisDrawing.SelectionSets.Add("SS2") ' Prompt the user to select objects sset.SelectOnScreen ' Define the variable Dim compteur As Single compteur = 0 ' Loop through all entities in the selection ' set and assign the xdata to each entity Dim obj As AcadEntity Dim Line As AcadLine Dim arc As AcadArc Dim poly As AcadLWPolyline Dim hach As AcadHatch For Each obj In sset 'MsgBox ("type de l'objet : " & obj.EntityType) If obj.EntityType = 24 Then 'MsgBox ("polyligne trouvée !!") Set poly = obj If poly.Closed = True Then compteur = compteur + poly.Area End If End If If obj.EntityType = 17 Then 'MsgBox ("hachure trouvée !!") Set hach = obj compteur = compteur + hach.Area End If Next obj If compteur <> 0 Then MsgBox ("aire totale :" & Format(compteur, "0.00") & "m²") End If ThisDrawing.SelectionSets("SS2").Delete End Sub Voili, voilou...
-
Bonjour Je cherche à faire une extraction d'attributs d'un cartouche vers une BD Access. J'ai pas mal avancé, et dans le codage, je devrais me débrouiller, sauf que je voudrais faire untruc un peu plus compliqué : à partir de certains attributs, dont on peut tester le nom avec des valeurs présentes dans des tableaux, j'aimerais construire un tableau multidimensionnel en mémoire avec les valeurs des attributs retenus. C'est là oùu j'ai un problème, je n'arrive pas à faire fonctionner ce code. Je vous donne le code : Sub ExtraireCartouche() Dim cartouche As AcadBlockReference Dim obj As AcadEntity Dim dbplan As Object Dim plan As Recordset Dim sset As Object Dim attributeObj As AcadAttribute Dim varAttributes As Variant Dim strAttributes, projet As String Dim proy As Boolean Dim req As String Dim i, ligne, j, k, colonne As Integer Dim indice(0 To 4, 0 To 5) Dim lettre, champ As Variant Set sset = ThisDrawing.SelectionSets.Add("SS3") End If ' Prompt the user to select objects sset.SelectOnScreen For Each obj In sset Set cartouche = obj Next varAttributes = cartouche.GetAttributes lettre = Array("A", "B", "C", "D", "E", "F") champ = Array("fecha", "puest", "autor", "contr") proy = False For i = LBound(varAttributes) To UBound(varAttributes) MsgBox "nom de l'attribut : " & varAttributes(i).TagString 'remplissage du tableau "indice" avec les valeurs des champs d'indice 'en cherchant à quelle coordonnée (ligne, colonne) 'ils doivent se trouver dans le tableau For j = 0 To 5 If Right(varAttributes(i).TagString, 1) = lettre(j) Then 'si l'étiquette de l'attribut est de longueur 1, 'alors on est à la première ligne du tableau "indice", 'qui contient la valeur de l'indice MsgBox "boucle : lettre " & Right(varAttributes(i).TagString, 1) & " J = " & j If Len(varAttributes(i).TagString) = 1 Then ligne = 0 colonne = j MsgBox "indice " & lettre(j) 'sinon on cherche dans le tableau champ la valeur de la colonne Else For k = 0 To 3 If Left(varAttributes(i).TagString, 5) = champ(k) Then ligne = k + 1 colonne = j End If Next k = 0 End If End If Next j = 0 If colonne <> "" And ligne <> "" Then indice(ligne, colonne) = varAttributes(i).TextString MsgBox ("placement de " & varAttributes(i).TextString & " à la ligne " & ligne & " et à la colonne " & colonne) End If affichtab (indice) ThisDrawing.SelectionSets("SS3").Delete End Sub La procédure affichtab sert à afficher le tableau pour le tester : Sub affichtab(bat As Variant) Dim text As String For i = 0 To 4 For j = 0 To 5 text = text & "|" & " " & indice(i, j) Next text = text & vbCrLf Next MsgBox text End Sub En fait, il ne se passe rien, alors je ne sais pas si le tableau est rempli correctement, ou la procédure affichtab() ne marche pas ou s'il y a un problème autre. Merci d'avance.
-
Salut J'ai codé des fonctions dans un module, faisant lui-même partie d'un projet enrgistré en tant que fichier .vdb. Ce projet est chargé automatiquement dans mes dessins, et j'ai fait des boutons qui lancent les macros. Par contre, quand je veux modifier une macro, je fais "VBAIDE" j'effectue des modifications, mais si je veux enregistrer le projet, L'éditeur VBA m'affiche : "le projet est en lecture seule : impossible d'enregsitrer" il me propose d'enregistrer sous une copie, ce qui ne m'intéresse pas... Comment gérer les modifications dans un projet mutualisé sur plusieurs postes, dans ce cas ?
-
Salut Moi j'ai fait une macro qui permet de calculer la longueur des objets (arcs, lignes ou polylignes)que l'on peut sélectionner, c'est très souple. Celà affiche le résultat dans une Message Box. Je vous file le code : Sub longueurtotale() ' Create the selection set Dim sset As Object 'ThisDrawing.SelectionSets("SS1").Delete Set sset = ThisDrawing.SelectionSets.Add("SS1") ' Prompt the user to select objects sset.SelectOnScreen ' Define the variable Dim compteur As Single ' Loop through all entities in the selection ' set and assign the xdata to each entity Dim obj As AcadEntity Dim obj2 As AcadObject Dim Line As AcadLine Dim arc As AcadArc Dim poly As AcadLWPolyline For Each obj In sset 'MsgBox ("type de l'objet : " & obj.EntityType) If obj.EntityType = 19 Then Set Line = obj compteur = compteur + Line.Length End If If obj.EntityType = 4 Then Set arc = obj compteur = compteur + arc.ArcLength End If If obj.EntityType = 24 Then Set poly = obj compteur = compteur + poly.Length End If Next obj MsgBox ("longueur totale :" & compteur & "m") ThisDrawing.SelectionSets("SS1").Delete End Sub Bonne utilisation. Toutes les suggestions d'amélioration sont les bienvenues. J'ai fait la même chose pour les surfaces (hachures et polylignes fermées), et j'ai fait des macros aussi pour calculer des données technique à partir du nombre de blocs sélectionnés... Si çà intéresse des gens, qu'ils me le disent, je leur donnerai mon code. A++
-
Bonjour Depuis peu, lorsque je veux insérer un bloc dynamique dans un dessin, AUTOCAD m'affiche un message d'erreur : C'est bizarre, car on n'a pourtant pas changé de version d'AUTOCAD. Un bug dû à une mise à jour ? Est-ce que quelqu'un a déjà eu ce problème ? Et l'a résolu ? Merci d'avance
-
Masquer une petite partie d\'un Xref ?
tecnopat a répondu à un(e) sujet de tecnopat dans AutoCAD 2006
Effectivement, c'est ZE technique de siouxe qui vient pallier à une petiit défaut du logiciel (en tout cas dans ma version d'AUTOCAD ). çà me convient bien... On peut remodifier la polyligne avec PEDIT quand on veut, et on peut mettre la polyligne dans le layer Defpoints, on ne la voit pas à l'impression, c'est assez clean !! Dannekeusheune !! Sinqueceulottte !! Caîman... euh pardon, aligato !! -
Masquer une petite partie d\'un Xref ?
tecnopat a répondu à un(e) sujet de tecnopat dans AutoCAD 2006
Merci Yusukens82 pour ta petite démo. Malheureusement, l'option "inverser" ne fonctionne pas chez moi ! Il faut aussi dire que je suis sur ADT2006 (qui intègre normalement toutes les fonctions de AUTOCAD2006), et apparemment cette option n'en fait pas partie, même l'aide ne le mentionne pas. C'est con, car c'est exactement ce que je cherchais. Je me suis donc rabattu sur la solution de Lovecraft, le wipeout, qui en fait est une technqiue de cache, mais qui me satisfait dans le cas présent. Rebcao, ta solution ne me convient pas finalement car j'ai besoin de faire le cache dans l'espace objet, pour pouvoir travailler à l'aise. Merci quand même pour ta réponse. Merci à tous -
Masquer une petite partie d\'un Xref ?
tecnopat a répondu à un(e) sujet de tecnopat dans AutoCAD 2006
yusukens82, _Xclip c'est comme Extended Clip du Menu Express, çà masque la partie extérieure, et moi je veux masquer seulement la partie intérieure d'une polyligne fermée, ou d'un rectangle. Il ya sûrement un truc mais qui le connaît ? -
Bonjour Je cherche à masquer une partie d'un Xref pour pouvoir y dessiner ce qui m'intéresse. Je connais la commande Extended Clip qui masque l'Xref situé dans la partie extérieure d'un objet fermé, et affiche seulement la partie située à l'intérieur. Moi je voudrais faire exactement l'inverse : masquer la partie intérieure, et conserver la partie extérieure. Il y a la technique du masque en blanc, mais c'est pas très agréable de travailler avec dans un espace objet noir, ni très pratique : il faut faire un aperçu avant impression pour voir vraiment ce que çà donne en réalité. S'il y a une autre astuce je suis preneur Merci d'avance Patrick
-
Oui effectivement dans le lien précédent, il y a la réponse avec l"histoire des 2 points (../chemin relatif) à la place du chemin absolu. Merci à vous
-
Bonjour Comme on travaille en multi-sites dans mon entreprise, c'est pratique d'avoir des chemins relatifs, à la place des chemins absolus avec des lettres de lecteurs réseau qu'il est dificile de standardiser. On a tous la même arborescence de répertoires pour les plans, du moins pour chaque projet. Je voudrais donc utiliser les adressages relatifs, du genre : à la place de : Le problème c'est que AUTOCAD re-résout à chaque fois le chemin relatif en chemin absolu, c'est donc inopérant quand on enregistre le plan. Comment l'empêcher de résoudre le chemin relatif en chemin absolu ? Je voudrais garder l'adresse suivante ..\rep\plan etc... Merci
-
Merci C'est çà, effective(name)mement !!
-
Bonjour Comment accède-t-on à la propriété "nom du bloc" d'un bloc dynamique en VBA, je veux dire celle qui apparaît dans le champ "nom" de la palette de propriété ? Parce que le propriété "name" me renvoie un nom automatique avec un index du nombre d'insertion de blocs dans le dessin : exactement "U*62" alors que j'attendrais "rackstat". Merci beaucoup
-
Bonjour Camille, je ne dispose pas des objets Recorset dans mon environnement VBAIDE, quel référecne externe faut-il importer ?
-
Salut à tous !! Voici un sujet qui m'intéresse, car j'aimerais moi aussi extraire les informations de (beaucoup de) plans et en faire des listes de palns, ou simplement les indexer tous et pouvoir les rechercher sur certains critères dans un formulaire web par exemple. En ce qui me concerne, je cherche par contre à importer les données dans une base de données, ce qui est beaucoup plus adapté pour ce cas. Par contre est-ce que quelqu'un connaîtrait les structures de programmation pour dialoguer avec des bases de données, pour pouvoir faire des requêtes et récupérer les données dans des Recordsets ou des DataReaders ? Sechanbask, toi qui as l'air bien calé en VBA AutoCAD, tu connaîs cette partie ? Ou si tu as même des pistes, je suis preneur. Quant à ta question de départ, FORMULA1, l'utilitaire d'extraction d'attributs fait tout çà, en tous cas dans AUTOCAD 2006 (Outils => Extraction d'attributs). A un moment, j'ai une boîte de dialogue qui me permet de choisir un répertoire et de sélectionner les fichiers qui m'intéressent, et l'utilitaire m'extrait tous les attributs que je veux de tous les blocs que je peux sélectionner. Tu l'extrait dans un fichier Access, un fichier Excel ou un fichier texte tout simplement. Elle est pas belle la vie ? En ce qui me concerne, je voudrais juste "intercepter" cette procédure pour choisir la base dans laquelle insérer le fichier. Merci et à bientôt.
-
Merci, çà marche !! J'avais oublié l'histoire du "Set" dans VB. Pour la polyligne çà marche aussi A très bientôt
-
Bonjour Je voudrais faire une petite commande pour ajouter les longueurs des objets sélectionnés dans un jeu de sélection. Il peut y avoir des lignes, des arcs, et des polylignes. Voici où j'en suis : dans ma boucle, j'aimerais tester si mon objet est une ligne, un arc, ou une polyligne, dans ce cas j'ajoute sa longueur au compteur, sinon je passe au suivant. J 'ai un problème pour tester le type de l'objet en question, il n'y a pas de méthode pour celà quelque part ? Merci d'avance...
-
C'est très gentil de ta part, Patrick, de me proposer celà. Dès que j'ai le temps je te préparerai un exemple que tu pourras étudier... En attendant, je vais quand même utiliser des tableaux. J'ai eu l'occasion de jeter un oeil sur tes programmes LISP, il y a plein de choses très pratiques, et très utiles. Pour ma part, j'aimerais bien me mettre à VBA, il me faut trouver un peu de temps