Comment modifier un attribut dans AutoCAD avec VBA

Résolu
lamasone Messages postés 6 Date d'inscription vendredi 1 décembre 2006 Statut Membre Derniè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.
A voir également:

4 réponses

lamasone Messages postés 6 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 7 mai 2007 2
1 mai 2007 à 14:24
c sympa rvblog mais j'avoue que tu m'a un peu embrouiller mais c pas grave car finalement g trouver ce qui me fallait et mon problème est donc résolu.


Merci quand meme pour ta réponse.
1
lamasone Messages postés 6 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 7 mai 2007 2
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
1
merci bro
1
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
1 mai 2007 à 01:33
Salut lamasone,

baisses pas les bras!

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>
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
1 mai 2007 à 14:47
Merci alors de nous communiquer ta solution (ça peux aider quelqu'un), et d'"Accepter la réponse", pas la mienne, la tienne.
à+

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
0
Rejoignez-nous