Aller au contenu

code VBA pour LIBERER des calques


Messages recommandés

Posté(e)

Bonjour à Toutes et à Tous,

 

Le VBA n'étant pas dans mes compétences, on m'a soumis ce CODE pour soit disant faire ce que fait cette MACRO :

_-layer;_ON;*;_Th;*;;

CODE VBA :

 

Set ObjLayer = ThisDrawing.Layers("0")

ObjLayer.LayerOn = True

ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item("0")

' active tous les calques sauf 'papier'

For Each ObjLayer In ThisDrawing.Layers

If ObjLayer.Name <> "papier" Then

If ObjLayer.Freeze Then ObjLayer.Freeze = False

ObjLayer.LayerOn = True

End If

Next ObjLayer

ObjSel.SelectOnScreen FTyp, FVal

 

Ce code n'affiche pas les calques une fois LIBERES ?!

 

Je vous remercie pour votre aide.

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Salut Christian,

 

Pour faire du VBA; il reste souvent la bonne vieille façon à la mano :P

Donc tu lance "enregistrer macro" , tu fait un test avec un ou plusieurs calques, puis tu ouvre la macro et tu modifie le bout de code qui te conviens pas.

 

Amuse toi bien ;)

"98% des soucis informatiques sont assis entre la chaise et le bureau !"

 

"C'est parce que la vitesse de la lumière est supérieure à celle du son que tant de gens paraissent brillants avant d'avoir l'air con."
Posté(e)

Salut Christian,

 

Pour faire du VBA; il reste souvent la bonne vieille façon à la mano :P

Donc tu lance "enregistrer macro" , tu fait un test avec un ou plusieurs calques, puis tu ouvre la macro et tu modifie le bout de code qui te conviens pas.

 

Amuse toi bien ;)

 

:blink: ???

Ce que tu dis m'étonne beaucoup (AutoCAD n'est pas Excel).

Je n'ai jamais utilisé l'enregistreur de macro mais il me semble bien qu'il est arrivé dans AutoCAD au moment où le VBA devait être abandonné.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut,

 

Je ne connais pas bien le VBA (je suis allergique à la syntaxe VB) mais je pense pouvoir dire que le code que que tu as posté est incomplet.

 

Merci, ça me rassure !

 

L'enregistreur d'action AutoCAD ne donne pas un CODE VBA ?

 

Christian

 

 

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Salut.

 

+1 avec (gile), et pour l'enregistrement de macro VBA dans AutoCAD, et pour le code, qui me parait incomplet aussi...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Merci, ça me rassure !

 

L'enregistreur d'action AutoCAD ne donne pas un CODE VBA ?

 

Christian

 

Non, l'enregistreur d'action génère des fichiers .actm cryptés.

Je rappelle que le VBA devait être abandonné par Microsoft (et donc par Autodesk) avec l'arrivée du 64 bits, qu'il a été finalement mis à jour après de longues hésitations grâce (ou à cause) des réactions des utilisateurs.

Depuis, le module VBA n'est plus installé dans AutoCAD par défaut (il faut une installation spécifique).

Aujourd'hui Microsoft (comme Autodesk) préconisent d'utiliser plutôt .NET même si, de l'avis de tous les utilisateurs, "on ne joue plus dans la même cour".

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

À ma connaissance, il n'y a jamais eu d'enregistreur de MACRO VBA dans AutoCAD.

Il y a un environnement de développement intégré (éditeur de code) VBAIDE (à condition d'avoir installé le module VBA). Cet éditeur est l'équivalent pour VBA de l'éditeur Visual LISP (VLIDE) pour AutoLISP, mais dans l'un comme dans l'autre il faut "coder" à la main.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

...Pour faire du VBA; il reste souvent la bonne vieille façon à la mano :P

Donc tu lance "enregistrer macro" , tu fait un test avec un ou plusieurs calques, puis tu ouvre la macro et tu modifie le bout de code qui te conviens pas.

 

Amuse toi bien ;)

 

Tu parles d'enregistrer la MACRO ! ça se trouve où ?

 

Je te remercie.

 

Christian

 

 

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Tu parles d'enregistrer la MACRO ! ça se trouve où ?

Dans l'onglet "Outils"... Mais comme l'a dit Maitre (gile) :

Non, l'enregistreur d'action génère des fichiers .actm cryptés.

On ne peut pas enregistrer une macro en VBA...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

J'avais juste voulu confirmation de nG! Hebus

Et tu l'as eu ?

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Autant pour moi...

 

Effectivement il m'a créer un ACTM illisible...

Pourtant il me semble être déjà passé par la pour créer des macro personnalisées :o

 

 

PS : J'avais pas testé depuis un moment...

 

PS2 : Dommage ça fonctionne toujours bien sur excel (2003... No comment! je vais me pendre je reviens...)

"98% des soucis informatiques sont assis entre la chaise et le bureau !"

 

"C'est parce que la vitesse de la lumière est supérieure à celle du son que tant de gens paraissent brillants avant d'avoir l'air con."
Posté(e)

Coucou

 

À la queue des ces discussions qui ne vont pas dans le bon sens

Je viens tenter une réponse mais je n'ai pas VBA pour tester, tiens-nous au courant.

Je dirais qu'il manque un "End If" que je t'ai mis en rouge :

 

Set ObjLayer = ThisDrawing.Layers("0")

ObjLayer.LayerOn = True

ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item("0")

' active tous les calques sauf 'papier'

For Each ObjLayer In ThisDrawing.Layers

If ObjLayer.Name "papier" Then

If ObjLayer.Freeze Then ObjLayer.Freeze = False

ObjLayer.LayerOn = True

End If

End If

Next ObjLayer

ObjSel.SelectOnScreen FTyp, FVal

 

Amicalement

 

Posté(e)

Je dirais qu'il manque un "End If" que je t'ai mis en rouge

Je n'en suis pas si sûr... La routine peux fonctionner comme ça.

If ObjLayer.Name <> "papier" Then 'Début du premier If
If ObjLayer.Freeze Then ObjLayer.Freeze = False 'Début et fin de ce second If
ObjLayer.LayerOn = True 'est exécuté dans le premier If
End If 'Fin de premier If

Mais bon, j'ai VBA et j'ai testé le premier code de Christian, et il ne fait rien.

 

J'ai aussi viré la dernière ligne "ObjSel.SelectOnScreen FTyp, FVal" qui ne sert à rien et qui me fait penser que ce code vient d'un autre, plus grand...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Bonjour,

If ObjLayer.Freeze Then ObjLayer.Freeze = False

n'a pas d'intérêt je pense

qu'il soit à true ou à false, on s'en fout puisque le but est de le forcer à false à partir du moment qu'il est pas "papier"

donc,

Set ObjLayer = ThisDrawing.Layers("0")

ObjLayer.LayerOn = True

ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item("0")

' active tous les calques sauf 'papier'

For Each ObjLayer In ThisDrawing.Layers

If ObjLayer.Name <> "papier" Then

ObjLayer.Freeze = False

ObjLayer.LayerOn = True

End If

Next ObjLayer

ObjSel.SelectOnScreen FTyp, FVal

 

Bon mais c'est bien gentil tout ça, peux pas tester

il n'y a pas un Objlayer.rewrite ou Objetlayer.update à tout hasard ?

sur mon cher microstation, c'est ainsi ;)

Write a book about what ??

Posté(e)

Bonjour,

 

J'ai lancé mon "vieux" AutoCAD 2016 avec le module VBA installé pour tester cette macro.

En supprimant la dernière ligne, le code fonctionne :

Sub TEST()

' Rendre le calque "0" actif et courant

Set ObjLayer = ThisDrawing.Layers("0")

ObjLayer.LayerOn = True
' Activer le calque "0"

ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item("0")

' Active tous les calques sauf le calque 'papier'

For Each ObjLayer In ThisDrawing.Layers
' On parcourt les calques du dessin

If ObjLayer.Name <> "papier" Then

If ObjLayer.Freeze Then ObjLayer.Freeze = False
' Dégeler

ObjLayer.LayerOn = True
' Activer

End If

Next ObjLayer

End Sub

AutoCAD, AutoCAD Map3D, AutoCAD Architecture, Revit, COVADIS, InfraWorks 360, ReCap 360, ...

BIM Infrastructure

Posté(e)

Bonsoir,

Oui didier, sur une seule ligne , pas de end if

https://msdn.microsoft.com/fr-fr/vba/language-reference-vba/articles/ifthenelse-statement

https://docs.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/statements/if-then-else-statement

 

Il est clair que le vba permet pas mal de chose en écrivant des lignes et des lignes , le vrai travail d'un développeur est d'être le plus concis possible

on est très loin de la programmation en assembleur en hexadécimal

write a book about what ??

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité