Aller au contenu

DenisHen

Membres
  • Compteur de contenus

    4 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    21

Tout ce qui a été posté par DenisHen

  1. Stoppez tout ! ! ! Je pense avoir un début de solution, et je ne voudrais pas vous faire perdre de temps, je continu de chercher... Je pense que j'ai un début de solution avec ça, qui à l'air de fonctionner : Dim acadApp As Object On Error Resume Next Set acadApp = GetObject(, "AutoCAD.Application") On Error GoTo 0 If acadApp Is Nothing Then MsgBox "Aucun AutoCAD en cours a été trouvé": Exit Sub acadApp.Visible = True Bien à toi, la communauté... Denis...
  2. Par contre, maintenant, AutoCAD se lance en moins d'une seconde... Curieux...
  3. Ok, c'est fait. J'avais aussi pris le deuxième code de (gile). Mais il lance systématiquement une nouvelle session d'AutoCAD. Ce code ne voit pas l'AutoCAD déjà en instance...:
  4. Salut @Curlygoth, et merci pour ton aide. Il me semble que le "CreateOgject" créer le lencament de l'application, mais le code que m'a écrit @(gile), il créer ou retourne l'application lancée. Mais j'ai du retouché son code, car si je le colle dans le VBA d'Excel, ça me donne ça (et je n'aime pas le rouge) : Je pense que c'est exactement ce qu'il me faux, mais je doute que ce que j'ai fais soit convenable... Encore merci à toi... Denis...
  5. Bonjour @didier et @Curlygoth. Merci pour votre retour. Je suis en train de continuer mes recherches. Et je viens de découvrir une chose très curieuse, le programme me sort ces trois types de ligne, même sans AutoCAD. Je ne comprend pas pourquoi ce programme ne s'arrête pas à : "Set AcadApp = GetObject(, "AutoCAD.Application")" si AutoCAD n'est pas lancé... Mais je continu de chercher. Encore merci à vous...
  6. Bonjour à la communauté. Voilà, je tombe sur un problème que je n'arrive pas à identifier. Je cherche la liste des types de ligne définis dans le dessin courant d'AutoCAD et ce, depuis Excel. J'ai donc écris ça : Public Sub ImpTypLignCAD() Dim AcadApp As Object Set AcadApp = GetObject(, "AutoCAD.Application") Dim DocAutoCad As Object Set DocAutoCad = AcadApp.ActiveDocument Dim entry As Object For Each entry In DocAutoCad.Linetypes MsgBox "Calq=" & entry.name Lign = Lign + 1 Next End Sub Mais je n'obtiens que trois types de ligne : ByBlock, ByLayer et Continuous. Sachant qu'il y en a d'autres dans le dessin. J'ai le même problème pour tous les autres dessins. Si quelqu'un a une astuce, un conseil... Je suis preneur... Bien à toi, la communauté. Denis...
  7. DenisHen

    Aide aux développeurs

    Mille mercis @Curlygoth ! ! !
  8. DenisHen

    Aide aux développeurs

    Juste une petite remarque. Quand je cherche toutes les propriétés d'un calque dans l'aide, je ne trouve que ça, et je ne trouve, par exemple, presque rien sur l'ensemble des propriété d'un calque. Le type de ligne, la couleur, l'épaisseur, l'option d'impression... Il faut avouer que ce n'est pas facile de trouver des renseignements complets dans cette aide, qui a le mérite d'exister, c'est vrai, mais qui ne sert pas souvent tout de suite... J'ai toutes-fois réussis à trouver beaucoup de renseignements, après plusieurs heures de recherches... Encore merci à @(gile) Mais je n'ai toujours pas trouvé la variable d'impression (T=Trace ou A=Aucun tracé) en VBA dans cette aide... Je cherche juste une deux choses, j'ai écris ce petit bout de code, qui fait parti d'un ensemble (en liaison tardive, encore merci à @(gile): Dim AcadApp As Object On Error Resume Next Set AcadApp = GetObject(, "AutoCAD.Application") Dim DocAutoCad As Object Set DocAutoCad = AcadApp.ActiveDocument Dim LayerNameColl As Object Set LayerNameColl = GetObject(, "AutoCAD.AcadLayer") NomFeuille = ActiveSheet.name Lign = 2 Do While Sheets(NomFeuille).Cells(Lign, 1).Value <> "" Sheets(NomFeuille).Cells(Lign, 1).Value = "" Lign = Lign + 1 Loop Lign = 2 Dim entry As Object Set LayerNameColl = DocAutoCad.layers Lign = 2 For Each entry In LayerNameColl If entry.name <> "0" Then Sheets(NomFeuille).Cells(Lign, 1).Value = entry.name 'C'est ici que je n'y arrive pas ************************************************* 'Et la couleur de ce calque Sheets(NomFeuille).Cells(Lign, 2).Value = entry.color 'Et le type de ligne de ce calque Sheets(NomFeuille).Cells(Lign, 3).Value = entry.LineType 'Et l'épaisseur de ce calque Sheets(NomFeuille).Cells(Lign, 4).Value = entry.LineWeight 'Et l'option d'impression de ce calque 'Sheets(NomFeuille).Cells(Lign, 5).Value = entry. En cours de recherche *************** Lign = Lign + 1 End If Next Mais je n'obtient que des "-3" pour les épaisseurs de ligne. Je n'ai trouvé aucune explication sur ce "-3". Et je n'ai toujours pas trouvé comment obtenir l'option d'impression d'un calque...
  9. ZIP mis à jour. Correction sur la vérification de l'existence du fichier .lin et l'existence de types de ligne. Je suis actuellement sur l'importation des calques depuis AutoCAD (plus tard depuis un DXF)...
  10. Bonjour à tous. Suite à une demande, on peut désormais utiliser les couleurs classiques (de 1 à 255) et les couleurs RVB (de 1 à 256 par couleur, exemple : 53,156,242). J'ai mis à jour le ZIP d'origine. Bien à toi, la communauté. Denis...
  11. Bonjour @(gile) et mille mercis. Effectivement, j'étais passé à coté. Maintenant, ça fonctionne super.
  12. Salut la communauté... J'ai longtemps contemplé les différentes discutions sur les liaisons "anticipée" et les liaisons "tardives"... Et j'ai appris beaucoup, j'ai même réussi à faire un classeur Excel qui commande à AutoCAD des créations de calques... uniquement par liaisons tardives... J'arrive même à récupérer les types de ligne d'un dessin dans AutoCAD depuis un classeur Excel... @(gile), comment te remercier ! ! ! Mais j'ai encore une toute petite question, comment faire de ce code une relation tardive ? J'ai saisi, maintenant, la notion de relation, et je comprend de plus en plus la différence entre tardive et anticipée... Mais je ne sais pas comment transcrire ce code en relation anticipé vers une relation tardive... Je pense que le "dictionary" pose problème... Sub ExpAutoCAD_TestSansLib() NomFeuille = ActiveSheet.name 'Création des filtres ------------------------------ Do While OnFouilleLesLignes <> "" NomFiltre = Sheets(NomFeuille).Cells(OnFouilleLesLignes, 54).Value If NomFiltre <> "" Then DaType(0) = 1: DaValue(0) = NomFiltre DaType(1) = 1: DaValue(1) = NomFiltre & "*" DaType(2) = 1: DaValue(2) = "*" DaType(3) = 1: DaValue(3) = "*" DaType(4) = 70: DaValue(4) = 0 DaType(5) = 1: DaValue(5) = "*" DaType(6) = 1: DaValue(6) = "*" Set Dict1 = DocAutoCad.Layers.GetExtensionDictionary Set Dict2 = Dict1.AddObject("ACAD_LAYERFILTERS", "AcDbDictionary") Set DaRec = Dict2.AddXRecord(NomFiltre) DaRec.SetXRecordData DaType, DaValue End If OnFouilleLesLignes = OnFouilleLesLignes + 1 Loop End Sub Car, je le répète, @(gile) m'a été d'une grande aide... Incroyable... Mais après une multitude de recherche, je n'arrive pas à transformer ce code "anticipé" vers un code "tardif"...
  13. Bonjour. J'ai modifié le ZIP d'origine. J'ai corrigé un petit bug dans le XLSM (importation depuis AutoCAD des types de ligne) et ajouté du contenu dans le PDF. Bien à toi, la communauté. Denis...
  14. Salut didier. Oui, j'ai tenu compte de ton observation, depuis un autre fils je crois. J'ai prévu, dans mon VBA, le remplacement automatique de "Continu" par "Continuous"... J'ai fais ce classeur Excel en tenant beaucoup compte de toutes les remarques des participants... Voici la ligne de code : If TypLign = 0 Or TypLign = "" Or TypLign = "Continu" Then TypLign = "Continuous" Si le type de ligne n'est pas définie : "0" (parfois Excel considère rien comme 0), vide ou "Continu", elle sera "Continuous". Merci à toi pour ce retour. Bien à toi. PS : j'ai en fait corrigé mon programme, maintenant, il vérifie si le type de ligne existe dans le liste des importations, sinon, ce sera "Continuous". Denis...
  15. Salut @Curlygoth. Merci beaucoup pour ta remarque, je vais la suivre... Denis...
  16. Salut à toi, la communauté. J'ai travaillé toute l'après-midi... Je pense espérer que cette version fonctionne sur toutes les versions complètes d'AutoCAD, sauf explications données dans le PDF... Tout est dans le PDF du Zip... Cordialement... Denis... CréaCalques (Denis)_v1.01_Beta.zip
  17. Salut à la communauté... Je donne raison à didier... Maintenant, il faut systématiquement créer un lin vers le message dont on parle ou que l'on cite... Et ça fait des aller/retour interminables... Qui deviennent presque incompréhensibles. Avant, ce n'était que : "Dans le message n°6, tu disais...", c'était réellement plus simple... Mais bon, ce n'est pas insurmontable... Je soutient donc notre ami didier... Mais aussi notre ami l'administrateur... Bien à toi, la communauté. Cordialement. Denis...
  18. Bonjour à tous. Voilà, j'ai presque terminé mon classeur Excel. Pour l'instant, il fonctionne chez moi et est compatible avec les versions LT et complètes d'AutoCAD 2022. Je vous le "livre" en "béta test"... Pour le téléchargement, voir le message suivant, tout est "à jour"... Au début, je ne l'avais fais que pour moi, et ensuite, j'ai pensé aux collègues, et après, je me suis dis que les membres de CadXP étaient aussi des collègues, quelque part. Donc, je vous le partage... Vous pouvez en faire ce que vous voulez, il est libre de droit (sauf le code pour l'instant), mais j'aimerais avoir quelques retours (remarques, observations, options...), s'il vous plaît, pour le faire évoluer et ainsi, répondre aux besoin du plus grand nombre d'entre vous. Je pense que les icons parlent d'eux-mêmes, mais je vous fais un petit mode d'emploi très simple. Bien à toi, la communauté. Denis...
  19. Bonjour à tous. Un grand merci à toi @(gile)... J'ai fini par comprendre, et tu avais raison, je me noyais dans un verre d'eau, encore une fois... 😉 Voici le code que j'ai fini pas écrire qui fais ce que je souhaitais : Public Sub ImpTypLignDXF(control As IRibbonControl) NomFeuille = ActiveSheet.name 'Vidange de la colonne des types de ligne existants ***************** Lign = 2 Do While Sheets(NomFeuille).Cells(Lign, 55).Value <> "" Sheets(NomFeuille).Cells(Lign, 55).Value = "" Lign = Lign + 1 Loop 'Ouverture du DXF *************************************************** Fichier = Application.GetOpenFilename("Fichiers DXF,*.dxf") If Not Fichier = False Then Open Fichier For Input As #1 Else Exit Sub End If 'Suppression du chemin du fichier LIN ******************************* Sheets(NomFeuille).Cells(2, 55).Value = "" 'Lecture du DXF ***************************************************** Lign = 3 Do While Not EOF(1) Line Input #1, chaine$ If Trim(chaine$) = "AcDbLinetypeTableRecord" Then Do While Not EOF(1) Line Input #1, chaine$ If Trim(chaine$) = "2" Then Line Input #1, chaine$ Sheets(NomFeuille).Cells(Lign, 55).Value = Trim(chaine$) Lign = Lign + 1 Exit Do End If Loop End If Loop Close End Sub Je le poste si ça peu servir à d'autres... Je sais qu'il est un peu simple, voir simpliste, mais il est à ma portée et aussi à celle d'un novice... En plus, vu qu'il est de moi, je le comprend et pourrais le modifier si le cas se présente... Un grand merci à vous tous pour votre aide et votre patience... Denis...
  20. Bonjour à tous. Voici le code que j'ai fini par écrire qui fais ce que je souhaitais : Public Sub ImpTypLignDXF(control As IRibbonControl) NomFeuille = ActiveSheet.name Lign = 2 Do While Sheets(NomFeuille).Cells(Lign, 55).Value <> "" Sheets(NomFeuille).Cells(Lign, 55).Value = "" Lign = Lign + 1 Loop Fichier = Application.GetOpenFilename("Fichiers DXF ,*.dxf") If Not Fichier = False Then Open Fichier For Input As #1 Else Exit Sub End If Sheets(NomFeuille).Cells(2, 55).Value = "" Lign = 3 Do While Not EOF(1) Line Input #1, chaine$ If Trim(chaine$) = "AcDbLinetypeTableRecord" Then Do While Not EOF(1) Line Input #1, chaine$ If Trim(chaine$) = "2" Then Line Input #1, chaine$ Sheets(NomFeuille).Cells(Lign, 55).Value = Trim(chaine$) Lign = Lign + 1 Exit Do End If Loop End If Loop Close End Sub Un grand merci à vous tous pour votre aide et votre patience... Denis...
  21. Donc, en fait... Si j'ai bien compris... Et ce n'est pas facile pour un cerveau comme le mien... Je fouille le fichier DXF jusqu'à un "AcDbLinetypeTableRecord", ensuite, je cherche le code DXF 2, je lis la ligne suivante, contenant le nom du type de ligne, et ensuite, je cherche un autre "AcDbLinetypeTableRecord" mais pas un autre "AcDb*"...
  22. C'est la seule et unique chose que j'ai faite, pour commencer à analyser le DXF issus de ce dessin "vierge"...
  23. Mille mercis @Curlygoth pour ton aide. Mais je pense avoir découverts pourquoi j'étais dans l'erreur... Je posterais mon code VBA plus tard, pour qu'il puisse, éventuellement, être testé...
  24. Merci @(gile)vraiment, sincèrement, tu es d'une aide tellement immense (et d'une grande patience aussi...)... Et je ne voulais pas faire mon lourdaud... C'est juste que j'ai découverts que la structure d'un DXF n'est pas la même partout, malgré qu'elle suive un ordre précis... Mais je viens de comprendre un truc (car j'ai relus ton raccourcis, encore une fois), les "noms" des définitions d'entités sont toujours en amont de la définition. Je m'explique : La définition d'un type de ligne va toujours débuter par "AcDbLinetypeTableRecord", et après, la définition d'un type de ligne... Effectivement, après avoir relu et relu et relu ton raccourcis (car je me remets toujours en doute lorsque qu'un gars qui sait insiste), j'ai vu que c'est systématique, dans le fichier DXF, et d'après ce que j'ai compris, il y a : "AcDbLinetypeTableRecord" : Définition d'un type de ligne, Codes DXF qui suivent définissent ce type de ligne (parfois dans le désordre), Jusqu'au prochain "AcDbLinetypeTableRecord", qui donnera une autre définition, d'un autre type de ligne... En gros, je pense que les définitions sont par bloque, par pavés... Ce que je pense avoir compris maintenant... Ai-je bon ? Ou je n'ai encore rien compris... Mais je n'ai pas trouvé où s'arrête la définition courante... En tous cas, je ne peux que te remercier de toute ta patience... Envers un mec probablement limité... Encore une fois, mille mercis... Denis...
  25. Bon, je viens de tombé que un os... Je ne sais pas où commence et où termine la définition des types de ligne dans un fichier DXF... Il y a des "ENDTAB" partout... Je vois aussi que les codes DXF ne sont pas triés, j'ai un 2, puis un 70 puis un 63, pour la même définition... J'ai vu aussi que, je ne sais pas pourquoi, il est définit, dans un fichier DXF, les styles de cote, les types de lignes, les styles de texte... Mais pas toujours dans le même ordre, si on regarde dans un autre DXF, ou parfois par un autre AutoCAD ou un autre logiciel... Je fouilles plusieurs DXF, mais un dessin vide peut contenir plusieurs millier de lignes ! ! !
×
×
  • 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é