lamasone
Messages postés6Date d'inscriptionvendredi 1 décembre 2006StatutMembreDernière intervention 7 mai 2007
-
27 avril 2007 à 13:26
dieu -
25 avril 2022 à 10:35
Bonjour à tous,
Je suis en train de faire une petite application pour le logiciel de CAO autocad mais là je suis complètement bloqué. Je m'explique, l'utilisateur selectionne l'agence dont il fait partie, il selectionne un format (A4,A3....), et il rempli deux textbox pour le nom du client et le nom du chantier avec une userform quand il click sur OK, mon code VBA va chercher le fichier autocad correspondant et il l'ouvre. Jusque là c bon mais je souhaite modifier deux attributs du cartouche du dessin par les texte des deux texbox et la rien ne va plus.
J'arrive pas pointer sur ces attributs (vu qu'il y en a plusieur) pour les modifier.
Voilà mon problème si ya quelqu'un qui veut répondre serait très sympa parce que la j'avance plus merci d'avance
PS: mon niveau en vba est moyen voir débutant.
lamasone
Messages postés6Date d'inscriptionvendredi 1 décembre 2006StatutMembreDernière intervention 7 mai 20072 Modifié le 25 avril 2022 à 12:25
voila le code qui m'a permis de résoudre mon problème
Dim sSCartouche As AcadSelectionSet
Dim objBloc As AcadBlockReference
Dim objAttribut
Dim objAttibuts As Variant
Dim strAttributEtiquette As String
Const sSCartoucheNom = "Cartouche"
'Recherché si la sélection existe
For Each sSCartouche In ThisDrawing.SelectionSets
If sSCartouche.Name = sSCartoucheNom Then
sSCartouche.Delete
Exit For
End If
Next sSCartouche
'Création de la selection
Set sSCartouche = ThisDrawing.SelectionSets.Add(sSCartoucheNom)
'Selection du cartouche
sSCartouche.Select acSelectionSetAll
'Test de la sélection
If sSCartouche.Count > 0 Then
For Each objBloc In sSCartouche 'Parcourir tous les blocs de la sélection
If objBloc.HasAttributes Then 'vérifier si le bloc à des attributs
objAttibuts = objBloc.GetAttributes 'Extraire les attributs
For Each objAttribut In objAttibuts
If UCase("c1") = UCase(objAttribut.TagString) Then
'MsgBox objAttribut.TagString & " = " & objAttribut.TextString
objAttribut.TextString = TextBox1.Text
End If
If UCase("c4") = UCase(objAttribut.TagString) Then
'MsgBox objAttribut.TagString & " = " & objAttribut.TextString
objAttribut.TextString = TextBox2.Text
End If
If UCase("date") = UCase(objAttribut.TagString) Then
'MsgBox objAttribut.TagString & " = " & objAttribut.TextString
objAttribut.Height = 2
objAttribut.TextString = DateTime.Date
End If
Next objAttribut
Exit For
End If
Next objBloc
End If
je ne sais pas de quel version il s'agit, ni même du format du fichier qui te préoccupe.
Pour ma part, j'ouvre un fichier *.dwg d'AUTOCAD LT (avec un éditeur hexadécimal), et je constate qu' à partir de l'octet 20878 (dans mon fichier, pas forcément dans tous les fichiers) commence une zone appelée "DWGPROPS COOKIE". Il semble aussi que cette zone contiennent les propriétés définies par l'utilisateur, dans AUTOCAD LT, que cette zone est facile à reperer (le nom, ci dessus, je ne l'ai pas inventé, il est écrit en dur dans le fichier), et qu'elle n'est pas cryptée.
Je manipule un peu ces propriétés dans AUTOCAD, j'y rentre un nombre assez grand de caractères, je ré-ouvre le fichier en hexa, et je constate que cette zone s'agrandie sans problème, et que je retrouve bien ce que j'ai saisi (même pas crypté). Je sens donc que je peux, apprendre à VB (après avoir appris avec lui) à écrire lui-même dans ce fichier.
Il ne reste plus qu'à savoir si tu peux récupérer les données des propriétés définies par l'utilisateur dans le cartouche de ton dessin (à toi de chercher, mais normalement, ça doit être "oui"), et donc apprendre à AUTOCAD à relire, dans son fichier, ce qu'à écrit VB.
Enfin, cette méthode est-elle fiable et viable? Fiable "oui", si elle est bien définie et réalisée. Viable, c'est autre chose, elle devra supporter les éventuels changement de format d'AUTOCAD à chaque nouvelle version de celui-ci (m'enfin, ça m'étonnerais que ça bouge autant).
Voilà, on n'est pas obligé de cracker du logiciel pour faire d'une démo un vrai outil professionnel, on peut aussi cracker pour arriver à atteindre ses objectifs fonctionnels.
à+, et baisse pas les bras!
rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>