Gelés tous les calques sauf un en macro vba

Résolu
fabdu91630 Messages postés 22 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 31 mai 2011 - 18 mai 2011 à 14:15
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 - 27 mai 2011 à 11:03
Bonjour à tous,

J'explique ce que je veux faire :

J'ai actuellement un script qui me permet de générer, d'assembler plusieurs plans pour n'en faire qu'un que l'on appel plan générer (regroupement de plan) pour une autre application sous autocad 2010. Seulement, pour ce que je veux faire, j'ai besoin d'une macro en VBA qui me permette de prendre le plan générer, de geler les calque que je n'ai pas besoin et enfin qu'il soit exporter en .wmf et tous cela en automatique (via macro).

Je préfère prévenir, je suis novice !!!

Je vous remercie d'avance pour votre aide,

Fabdu91630

14 réponses

fabdu91630 Messages postés 22 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 31 mai 2011
27 mai 2011 à 08:47
Bonjour,

J'ai eu ma réponse, je la poste pour ce qui le souhaite, elle est ci-dessous :

Sub GelerTousLesCalquesSaufDeux()
Dim calque As AcadLayer

'Parcourir tous les calques dans la collection Calques du dessin :
For Each calque In ThisDrawing.Layers
'Si le nom du calque n'est pas égal au nom des calques qu'on ne veut pas geler :
If calque.Name <> "Nom calque 1" And calque.Name <> "Nom calque 2" Then
'Geler le calque sauf le calque 0 qui ne peut pas être gelé
If calque.Name <> "0" Then calque.Freeze = True
End If
Next
End Sub

Merci encore à tous.
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mai 2011 à 14:33
Salut

Autocad = objets propres à ce progiciel - difficile de te répondre

N'existe t-il pas d'enregistreur de macro, sous Autocad ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
fabdu91630 Messages postés 22 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 31 mai 2011
18 mai 2011 à 14:52
Effectivement, sur autocad j'ai dans
outils>macro
> macro...
charger projet...
gestionnaire Vba...
Editeur Visual Basic
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mai 2011 à 15:04
Ok, et bien tu enregistres une macro pendant que tu manipules tes calques, et le code VBA sera généré dans un module.
Tu pourras éventuellement le modifier pour y faire apparaitre tes variables ou faire des boucles.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fabdu91630 Messages postés 22 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 31 mai 2011
18 mai 2011 à 15:14
Erreur de ma part, il y a editeur mais pas un enregistreur.
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
18 mai 2011 à 15:48
pour les couches tu as
ThisDrawing.Layers("NomDeLaCouche").LayerOn = False'pour masquer une couche
ThisDrawing.Layers("NomDeLaCouche").Freeze = True'pour la geler
ThisDrawing.Layers("NomDeLaCouche").Lock = True'pour la verrouiller
ThisDrawing.Layers("NomDeLaCouche").Plottable = False'pour la supprimer à l'impression


pour le .wmf je ne me suis jamais penché dessus donc je n'ai pas la réponse mais en cherchant bien dans l'aide tu devrais trouver



si c'est la solution, penser : REPONSE ACCEPTEE
0
fabdu91630 Messages postés 22 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 31 mai 2011
18 mai 2011 à 18:18
Pile_poil:
Pour ta deuxieme ligne (geler), dois-tapje taper une ligne pour chaque calques ou y a-t-il un code pour dire geler tous les calques sauf le calques que je veux garder ?
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
18 mai 2011 à 18:33
Sub test()
    Dim i As Integer
    For i = 0 To ThisDrawing.Layers.Count - 1
        If ThisDrawing.Layers(i).Name = "NomDeLaCouche" Then
            ThisDrawing.Layers(i).Freeze = False
        Else
            ThisDrawing.Layers(i).Freeze = True
        End If
    Next i
End Sub



si c'est la solution, penser : REPONSE ACCEPTEE
0
fabdu91630 Messages postés 22 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 31 mai 2011
20 mai 2011 à 12:34
Bonjour,

J'ai essayé et ça ne marche pas, mais comme je suis novice [pour rappel :)] je ne dois pas être doué.

Cordialement,
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
20 mai 2011 à 20:19
tu as essayé comment ?
en remplaçant "NomDeLaCouche" par le nom d'une couche de ton dessin ?
en mettant la macro dans un module?
car ce code je ne l'ai pas pondu ici mais directement dans autocad et je l'ai testé il fonctionne parfaitement



si c'est la solution, penser : REPONSE ACCEPTEE
0
fabdu91630 Messages postés 22 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 31 mai 2011
25 mai 2011 à 05:57
Je vais refaire le test aujourd'hui. Si tu as fais le test dans autocad, je devrai y arriver.je te remercie de ton aide pile_poil.
0
fabdu91630 Messages postés 22 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 31 mai 2011
25 mai 2011 à 09:07
Bonjour Pile_poil,

Donc, je viens de refaire le test avec le code que tu ma donné ci-dessous :

Y-EQP-SI étant le calque que je souhaite garder.

Sub test()
Dim i As Integer
For i = 0 To ThisDrawing.Layers.Count - 1
If ThisDrawing.Layers(i).Name = "Y-EQP-SI" Then
ThisDrawing.Layers(i).Freeze = False
Else
ThisDrawing.Layers(i).Freeze = True
End If
Next i
End Sub

Lorsque j'éxecute la macro j'ai un message d'erreur qui s'affiche soit: Calque incorrect
J'ai re vérifier le nom du calque est bon.
???
0
fabdu91630 Messages postés 22 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 31 mai 2011
26 mai 2011 à 11:20
Bonjour Pile_poil,

Pourrais-tu me dire sous quel version autocad tu as essayé car je suis sous 2010 et dès que je mais le script dans un module j'ai toujours la réponse : Calque incorrect.

HELP
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
27 mai 2011 à 11:03
Exact
en fait j'avais testé la macro sur bricscad qui lui n'interdit pas le gel de la couche "0"
j'ai vérifié sur autocad 2008 et 2010 et sur l'un comme l'autre il faut exclure cette couche
dnas le meme ordre d'idée il y a la couche DefPoint qui peut poser le même probleme mais je n'ai pas testé

mais tu aurais pu faire plus simple en intégrant le calque "0" dans le if avec les deux calques que tu veux conserver
Sub GelerTousLesCalquesSaufDeux()
    Dim calque As AcadLayer
    For Each calque In ThisDrawing.Layers
        If calque.Name <> "Nom calque 1" And calque.Name <>  Nom calque 2"  And calque.Name <> "0" Then
            calque.Freeze = True
        End If
    Next
End Sub



si c'est la solution, penser : REPONSE ACCEPTEE
0
Rejoignez-nous