phil_vsd Posté(e) le 22 septembre 2006 Posté(e) le 22 septembre 2006 Bonjour, Je sais geler un calque en VBA mais je sèche sur le fait de tous les geler. J'en ai une trentaine et je ne voudrai pas écrire trente fois la ligne... Je passe en selectionset ? Ca ne marche pas... Merci à vous ! "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
Patrick_35 Posté(e) le 22 septembre 2006 Posté(e) le 22 septembre 2006 SalutUn exemple en vlisp. Je pense que la traduction en vba ne devrait pas trop poser de problèmes @+ (setq lays (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) ; Pointer sur la table des calques (vlax-for lay lays ; Boucle pour parcourir la table des calques (if (and (not (eq (vla-get-name lay) (getvar "clayer"))) ; Ne pas prendre en compte le calque actif (not (vl-string-search "|" (vla-get-name lay))) ; Ne pas prendre en compte un calque xref ) (vla-put-freeze lay :vlax-true) ; geler le calque ) ) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
phil_vsd Posté(e) le 22 septembre 2006 Auteur Posté(e) le 22 septembre 2006 Allez sois cool, le même lisp mais en entier comme ça je fais un copier coller... La je ne sais même pas ce que je dois mettre dans mon bouton... Et celui qui rigole je le gèle ! Merci beaucoup ! PS : en fait j'ai le Layiso dans les Express qui fait l'affaire mais en fait j'aimerai que les calques "1", "2" et "3" restent allumés... See you ! :D "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
Patrick_35 Posté(e) le 22 septembre 2006 Posté(e) le 22 septembre 2006 Il est en entier. Teste le déjà @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
phil_vsd Posté(e) le 23 septembre 2006 Auteur Posté(e) le 23 septembre 2006 Ha pardon, Je croyais qu'il devait commencer par un "defun xxxxxxx" ! Merci ! Je teste et je reposte ! "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
phil_vsd Posté(e) le 14 octobre 2006 Auteur Posté(e) le 14 octobre 2006 Ouf, Il m'en a fallut du temps pour comprendre ce qui manquait : [surligneur](defun c:lca ()[/surligneur] (setq lays (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) ; Pointer sur la table des calques (vlax-for lay lays ; Boucle pour parcourir la table des calques (if (and (not (eq (vla-get-name lay) (getvar "clayer"))) ; Ne pas prendre en compte le calque actif (not (vl-string-search "|" (vla-get-name lay))) ; Ne pas prendre en compte un calque xref ) (vla-put-freeze lay :vlax-true) ; geler le calque ) ) [surligneur] (princ) )[/surligneur] Pour tout geler sauf les calques "1" et "2" je dois dupliquer la ligne : (not (vl-string-search "|" (vla-get-name lay))) ; Ne pas prendre en compte un calque xref ) et remplacer le "l" qui filtre les Xref par "1" puis encore une ligne avec "2" ou y a-t'il une astuce pour tout mettre sur une seule ligne ? Pour l'instant je me retrouve avec un code qui ressemble à ça : (not (vl-string-search "Murs porteurs" (vla-get-name lay))) ; Ne pas prendre en compte un calque xref (not (vl-string-search "Texte" (vla-get-name lay))) ; Ne pas prendre en compte un calque xref Entre parenthèse, on dérive grave sur du lisp, vous allez me convertir, je vais me faire excommunier moi ! Tant que j'évite le bûcher et que mes calques sont gelés, pour le Paradis on verra une autre fois... [Edité le 14/10/2006 par phil_vsd] "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
winfield Posté(e) le 14 octobre 2006 Posté(e) le 14 octobre 2006 Très loins d'être aussi balèze que Meister , mais puisque nous sommes dans le forum VBA... Sub GelerTousLesCalques() Dim ObjCalque As AcadLayer Dim ObjCalques As AcadLayers Set ObjCalques = ThisDrawing.Layers For I = 0 To ObjCalques.Count - 1 Set ObjCalque = ObjCalques(I) If ObjCalque.Name <> ThisDrawing.ActiveLayer.Name Then ObjCalque.Freeze = True End If Next End Sub Si ça peut t'aider...... Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
phil_vsd Posté(e) le 15 octobre 2006 Auteur Posté(e) le 15 octobre 2006 Merci, Cela va m'aider effectivement. Je me suis pas encore aventuré dans les count - 1 mais je vais creuser... Maintenant je vais tester ton "CopyContinu" ! A bientôt ! "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant