Aller au contenu

Dernière commande


sechanbask

Messages recommandés

Comment autocad enregistre la dernière commande utilisée? Il utilise une variable?

 

J'ai besoin de comprendre ce fonctionnement pour que mes macro VBA soit répétable sans lancer la commande.

 

En effet, une fois la commande VBA fini si on fait "ESPACE" autocad redemande le nom de la macro (en VBA, cela signifie le chemin entier de la macro)

 

la commande qui relance la dernière commande est trouvable dans le CUI :

Nom : Répéter %s

Description : Répète la dernière commande exécutée

Macro : ^C^C;

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

Salut,

personnellement, pour lancer des macros VBA, j'utilise le lisp, ce qui permet de créer une commande "répétable" comme tu le décris (en validant pour relancer la commande précedement lancé) :

 

exemple

(defun c:MACOMMANDE ()    
 (command "-vbarun" "MON_DVB.DVB!MODULE_MON.NOMduMODULE")
 (princ)
)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Merci je vais tester ça même si je je doute un peu (à tort sans doute) de la fiabilité de ce complexe LISP-VBA...

A mon avis, il serait plus simple de modifier la commande de répétition d'autocad pour qu'elle reprenne les fonction avec arguments... De plus ça aiderait certains (donc moi d'ailleurs) pour relancer les commandes spéciales genre http://www.cadxp.com/sujetXForum-15749.htm et les commandes autocad par exemple couper au point...

 

Ce forum is formidable !

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Bonsoir,

j'ai crée ça

 

Sub DM()
Dim Largeur As String
Largeur = ThisDrawing.Utility.GetString(True, "Veuillez entrer la largeur de la réservation :")
MsgBox "La largeur de la réservation est de : " & Largeur & " cm."
End Sub

 

 

Que je lance avec :

 

(defun c: RDM()
(command "-vbarun" "PROJET.DVB!INSAUTO.DM")
(princ)
)

 

ça marche bien mais lorsque je relance la commande, il m'inscris 2 fois le texte pour l'interception de l'utilisateur... Si quelqu'un pouvais me dire comment empêcher ça...

 

[Edité le 6/8/2007 par sechanbask]

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Salut,

je n'ai pas testé, mais peut-être ceci :

 

Sub DM()
Dim Largeur As String
Largeur = ThisDrawing.Utility.GetString(True, "Veuillez entrer la largeur de la réservation :")
MsgBox "La largeur de la réservation est de : " & Largeur & " cm." [b]& vbCr[/b]
End Sub

 

 

 

 

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

J'ai effectué plusieurs modifications pour tenter de résoudre mon problème en vain alors je poste de nouveau les codes:

 

Code de lancement en LISP:

 

(defun c: DMN()
(command "-vbarun" "PROJET.DVB!INSAUTO.DMN")
(princ)
)

 

Code de la macro VBA lancé par DMN(lisp) :

 

Sub DMN()
Dim Largeur As String
Largeur = ThisDrawing.Utility.GetString(True, "Veuillez entrer la largeur de la réservation :")
MsgBox "La largeur de la réservation est de : " & Largeur & " cm." & vbCr
End Sub

 

Le résultat est toujours le même en ligne de commande j'ai toujours 2 fois le texte qui apparait :

Extrait de la ligne de commande :

"Commande: dmn

-vbarun

Nom de la macro: PROJET.DVB!INSAUTO.DMN Veuillez entrer la largeur de la

réservation :Veuillez entrer la largeur de la réservation : "

 

D'ailleurs, si je pouvais juste avoir une fois le texte "Veuillez entrer la largeur de la

réservation :" sans "-vbarun

Nom de la macro: PROJET.DVB!INSAUTO.DMN " ça serait encore plus joli... mais déjà que je suis dans la panade c'est peut-être trop demandé..

 

[Edité le 7/9/2007 par sechanbask]

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Pour ne pas voir les commandes en ligne de commande, il faut mettre la variable cmdecho à 0 :

 

(defun c: DMN()
(setvar "cmdecho" 0)
(command "-vbarun" "PROJET.DVB!INSAUTO.DMN")
(setvar "cmdecho" 1)
(princ)
)

 

pour le doublon sur la ligne de commande, essaye de mettre un saut de ligne dans ton message (pas testé) :

 

Sub DMN()
Dim Largeur As String
Largeur = ThisDrawing.Utility.GetString(True, "\nVeuillez entrer la largeur de la réservation :")
MsgBox "La largeur de la réservation est de : " & Largeur & " cm." & vbCr
End Sub

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Le changement du lisp porte ses fruits car dans la ligne de commande, je n'ai que ça:

 

"Commande:

DMN \nVeuillez entrer la largeur de la réservation :"

 

par contre j'ai une différence entre la ligne de commande et la ligne dynamique (sous autocad 2006) :

 

-ligne de commande : (voir au dessus)

 

-ligne dynamique : "\nVeuillez entrer la largeur de la réservation :\nVeuillez entrer la largeur de la réservation :"

 

c'est bizarre non ?

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

Re,

le fait que tu ais le "\n" dans la ligne de commande montre que le saut de ligne n'est pas pris en compte.

Tu peux donc l'enlever.

 

Pour différence en la ligne de commande et la saisie dynamique, je n'en sais rien.

Peut-être n'est ce plus GetString qu'il faut utiliser ....

 

Mais essaye avec ça pour voir (pas beau mais pour tester) :

 

Sub DMN()
Dim Largeur As String
Largeur = ThisDrawing.Utility.GetString(True, "Veuillez entrer la largeur de la réservation :")
[b]ThisDrawing.Utility.GetString(True, "(princ)")[/b]
MsgBox "La largeur de la réservation est de : " & Largeur & " cm." & vbCr
End Sub

 

 

[Edité le 7/9/2007 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

j'ai une error de syntaxe sur :

ThisDrawing.Utility.GetString(True, "(princ)")

 

Je ne même pas passer à la ligne suivante on "oubliant l'erreur" avec

on error resume next

 

j'ai donc essayé ça :

Sub DMN()
Dim Largeur As String
Largeur = ThisDrawing.Utility.GetString(True, "Veuillez entrer la largeur de la réservation :")

Largeur = ThisDrawing.Utility.GetString(True, "(princ)")
MsgBox "La largeur de la réservation est de : " & Largeur & " cm." & vbCr
End Sub

 

mais en vain car forcement ça me donne dans la ligne dynamique :

"Veuillez entrer la largeur de la réservation :Veuillez entrer la largeur de la réservation :". Puis une fois la valeur donnée, la ligne dynamique me redemande de remplir la variable largeur en écrivant "(princ)" . Bien sur seul ce que j'écris avec "(princ)" sera utilisable par le programme.. J'ai pas compris comment ton astuce devait marcher..

 

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

Ceci ?

(j'y vais à taton...)

 

Sub DMN()
Dim Largeur As String
Largeur = ThisDrawing.Utility.GetString(True, "Veuillez entrer la largeur de la réservation :")
ThisDrawing.SendCommand "(princ)" & vbCr
MsgBox "La largeur de la réservation est de : " & Largeur & " cm." & vbCr
End Sub

 

 

 

 

[Edité le 7/9/2007 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

je pense sérieusement que c'est problème de compatibilité entre VBA et LISP, tu n'as pas de commande avec une interception utilisateur comme celle que j'ai posté ?

 

P.S. ça marche toujours pas...

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

Bred, je suis toujours dans la panade, tu es en rade d'idée ? si c'est le cas, ben snifff... Merci d'avoir tenté de m'aider.

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

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é