Gelés tous les calques sauf un en macro vba [Résolu]

Signaler
Messages postés
22
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011
-
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
-
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

Messages postés
22
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
66
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)
Messages postés
22
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Effectivement, sur autocad j'ai dans
outils>macro
> macro...
charger projet...
gestionnaire Vba...
Editeur Visual Basic
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
66
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.
Messages postés
22
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Erreur de ma part, il y a editeur mais pas un enregistreur.
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
22
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

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 ?
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
22
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Bonjour,

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

Cordialement,
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
22
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

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.
Messages postés
22
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

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.
???
Messages postés
22
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

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
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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