Comment modifier un attribut dans AutoCAD avec VBA [Résolu]

Messages postés
6
Date d'inscription
vendredi 1 décembre 2006
Dernière intervention
7 mai 2007
- 27 avril 2007 à 13:26 - Dernière réponse :
Messages postés
6
Date d'inscription
vendredi 1 décembre 2006
Dernière intervention
7 mai 2007
- 2 mai 2007 à 12:46
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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
6
Date d'inscription
vendredi 1 décembre 2006
Dernière intervention
7 mai 2007
1 mai 2007 à 14:24
3
Merci
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.

Merci lamasone 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de lamasone
Meilleure réponse
Messages postés
6
Date d'inscription
vendredi 1 décembre 2006
Dernière intervention
7 mai 2007
2 mai 2007 à 12:46
3
Merci
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

Merci lamasone 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de lamasone
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Dernière intervention
12 juin 2012
1 mai 2007 à 01:33
0
Merci
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>
Commenter la réponse de rvblog
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Dernière intervention
12 juin 2012
1 mai 2007 à 14:47
0
Merci
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>
Commenter la réponse de rvblog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.