Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

AUTOCAD LT ET DDE


Information sur la source

Catégorie :OLE, DDE, Automation Niveau : Débutant Date de création : 19/08/2003 Date de mise à jour : 19/08/2003 10:43:09 Vu : 19 071

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

Description

Pour ceux qui peuvent être intéressés, le code suivant permet d'envoyer à partir de VB des commandes (autocad) via une liason DDE à Autocad LT.

Créer un Form avec contôle acceptant DDE
(textBox par exemple, Text1 dans le code qui suit)

La variable cmd (string) contient la commande Autocad comme saisie dans la ligne de commande d'Autocad LT



 

Source

  • Set obj = Text1
  • AppActivate "AUTOCAD LT", True
  • obj.LinkMode = 0
  • obj.LinkTopic = "AutoCAD LT.DDE|System"
  • obj.LinkMode = 2
  • obj.LinkTimeout = 500
  • obj.LinkExecute cmd
    Set obj = Text1
    AppActivate "AUTOCAD LT", True 
    obj.LinkMode = 0
    obj.LinkTopic = "AutoCAD LT.DDE|System"
    obj.LinkMode = 2
    obj.LinkTimeout = 500
    obj.LinkExecute cmd

Conclusion

J'ai trouvé le "Topic" dans la base registre...

Je n'ai trouvé que cette solution pour piloter Autocad LT. j'ai rien trouvé dans la doc Autocad LT sur le DDE.

Merci de me faire part de vos commentaires et astuces.

 

Commentaires et avis

signaler à un administrateur
Commentaire de ld40 le 21/10/2003 16:46:54

Voici quelques observations par rapport au code Autocad LT DDE (qui m'a bien servi merci!).

On notera que le nom de l'application DDE varie selon la version Autocad (14,2000,2002,LT)

Selon les vb utilisés le code peut varier:

Dans Word on utilisera l'objet textbox pour saisir la commande et le script suivant pour envoyer la commande Autocad

Private Sub CommandButton1_Click()
    Dim cmd As String
    
    cmd = Me.TextBox1.Text
    
    Set obj = Me.TextBox1
    '3lignes pour lancer l'application DDE
    'Dim MyAppID
    'MyAppID = Shell("C:Program FilesAutodesk Map 5 - Fraacad.exe", 1)    ' Exécute Microsoft Word.
    'AppActivate MyAppID, True

    'initialisation DDE Autocad v.14
    'chan = DDEInitiate(App:="AutoCAD.r14.DDE", Topic:="System")

    'initialisation DDE Autocad LT
    'chan = DDEInitiate(App:="AutoCAD LT.DDE", Topic:="System")

    'initialisation DDE Autocad 2000,  2002 ou MAP
    chan = DDEInitiate(app:="AutoCAD.r15.DDE", topic:="System")
    DDEExecute Channel:=chan, Command:=cmd
    DDETerminate Channel:=chan



End Sub



Dans Access on utilisera l'objet texte (qui a pour nom ici cmdtxt)
et le code suivant sur un bouton pour lancer la commande Autocad

Private Sub Commande50_Click()
    Dim cmd As String
    Dim obj
    Dim chan

    cmd = Me.cmdtxt
    Set obj = Me.cmdtxt

    '3lignes pour lancer l'application DDE
    'Dim MyAppID
    'MyAppID = Shell("C:Program FilesAutodesk Map 5 - Fraacad.exe", 1)    ' Exécute Microsoft Word.
    'AppActivate MyAppID, True

    'initialisation DDE Autocad v.14
    'chan = DDEInitiate(App:="AutoCAD.r14.DDE", Topic:="System")

    'initialisation DDE Autocad LT
    'chan = DDEInitiate(App:="AutoCAD LT.DDE", Topic:="System")

    'initialisation DDE Autocad 2000,  2002 ou MAP
    chan = DDEInitiate("AutoCAD.r15.DDE", "System")
    DDEExecute chan, cmd
    DDETerminate chan

    
End Sub

signaler à un administrateur
Commentaire de pieloult le 10/12/2003 14:41:12

bonjour,

je suis très intéressé par le code mais j'ai du mal à le mettre en pratique
l'idée c'est une base de données dans access qui peu envoyer des infos en les écrivants dans autocad LT??????

quelqu'un peu t il m'envoyer un exemple concret et complet?

merci d'avance

signaler à un administrateur
Commentaire de ld40 le 11/12/2003 20:04:06

j'ai fait quelques tests access>autocad 2002 qui fonctionnent bien, mais avec autocad LT 2002, je reste bloqué sur un problème:
-une boite de dialogue s'ouvre à chaque ouverture de fichier et interfère avec les ordres qui sont envoyés depuis access (boite information externe).

En mettant le code au point, j'ai observé deux choses:
-je fais suivre chacune des instructions de +chr(13) pour que les commandes s'executent dans Autocad
-je ferme et rouvre le lien entre access et autocad apres chaque instruction envoyée.
ex:
   DDETerminate chan
   doevents
   chan = DDEInitiate("AutoCAD LT.DDE","System")


En bref: j'arrive à lancer autocad 2002, ouvrir un fichier et faire un zoom étendu, Mais je bloque sur Autocad LT à cause de cette satanée boite de dialogue qui attend que l'on clique OK

signaler à un administrateur
Commentaire de ld40 le 12/12/2003 18:25:22


Option Compare Database
'liste des library                              nom           fichier référence
'v Microsoft DAO 3.6 Object library           : (DAO)         dao360.dll     (methode ancienne)
'
'v visual basic for applications              : (VBA)         vbe6.dll
'v Microsoft Access 9.0 Object library        : (Access)      MSACC9.olb
'v Ole Automation                             : (stdole)      stdole2.tld
'v Microsoft Office 9.0 Object Library        : (Office)      MSO9.dll
'
'#########################################################
'cet exemple fonctionne avec une table "TableCommandesAcad"
'contenant 2 champs
'champs1 : ID (numauto)
'champs2 : CommandesAcad (string)
'#########################################################
'et un formulaire contenant 3 boutons
'Bouton1 : LancerAcad
'Bouton2 : Executer
'Bouton3 : Fermer
'#########################################################
'les enregistrements de la table:
'1 : proxynotice 0         'elimine boite de dialogue indésirable au démarrage. Les autres se désactivent par Outils / Option dans autocad
'2 : filedia 0             'demande ouverture de fichier en ligne
'3 : _open                 'ouverture
'4 : c: oto.dwg           'nom du fichier
'5 : filedia 1             'fin du mode ouverture de fichier en ligne
'6 : z et                  'zoom etendu


Private Sub LancerAcad_Click()

    '3lignes pour lancer l'application DDE
    Dim MyAppID
    'MyAppID = Shell("C:Program FilesAutodesk Map 5 - Fraacad.exe", 1)    ' Exécute Autocad2000
    MyAppID = Shell("C:Program FilesAutoCAD LT 2002 Fraaclt.exe", 1)    ' Exécute AutocadLT
    '
    DoEvents
    AppActivate MyAppID, True


End Sub


Private Sub executer_Click()

    'Ouverture table en "DAO"
    Dim nom_de_la_table_a_ouvrir As String
    nom_de_la_table_a_ouvrir = "TableCommandesAcad"
    'Ouverture champ correspondant à table en "DAO"
    Dim nom_du_champs_a_ouvrir As String
    nom_du_champs_a_ouvrir = "CommandesAcad"


    Dim cmd As String
    Dim chan
    
    'initialisation DDE Autocad v.14
    'chan = DDEInitiate("AutoCAD.r14.DDE", "System")

    'initialisation DDE Autocad LT
    chan = DDEInitiate("AutoCAD LT.DDE", "System")

    'initialisation DDE Autocad 2000,  2002 ou MAP
    'chan = DDEInitiate("AutoCAD.r15.DDE", "System")





Dim db As Database
Dim rs As DAO.Recordset

Set db = CurrentDb()
Set rs = db.OpenRecordset(nom_de_la_table_a_ouvrir)


'###lire une table "DAO"
rs.MoveFirst

Do Until rs.EOF
    '###execute commande puis ferme et ouvre liaison
    '###avant de passer à suivante
    cmd = RTrim(rs(nom_du_champs_a_ouvrir)) + Chr(13)
    DDEExecute chan, cmd
    DoEvents
    DDETerminate chan
    'chan = DDEInitiate("AutoCAD.r15.DDE", "System") 'Acad2000
    chan = DDEInitiate("AutoCAD LT.DDE", "System")   'Acad LT
    rs.MoveNext
Loop
rs.Close
Set rs = Nothing

'###ferme liaison Autocad
    DDETerminate chan

End Sub
Private Sub Fermer_Click()
On Error GoTo Err_Fermer_Click
    DoCmd.Close
Exit_Fermer_Click:
    Exit Sub
Err_Fermer_Click:
    MsgBox Err.Description
    Resume Exit_Fermer_Click
End Sub

signaler à un administrateur
Commentaire de ld40 le 12/12/2003 18:28:22

voila enfin le code pour lire une suite d'"instructions Autocad" inscrites dans une table et les envoyer par liaison dde à Autocad depuis Access.

;-)

signaler à un administrateur
Commentaire de rahhal_ii le 28/01/2007 17:32:07

slt

tu peux utiliser createobject

tu verra que c'est plus facile et plus pratique

il y'a un exemple dans l'aide d'autocad

signaler à un administrateur
Commentaire de allopeck le 21/11/2007 10:06:58

Bonjour,
voila j'ai repris ton code je l'ai collé dans un module.
J'ai crée les trois butons dans un formulaire. Et j'ai rempli le 2 champ de la table avec " circle 4,4 1.1" mais le problème c que j'ai le 2006 je ne sais pas ou vous trouvez les DDE .
Pouvez vous m'aider s'il vous plait ?
merci

signaler à un administrateur
Commentaire de ld40 le 21/11/2007 19:22:39

'------------------------AUTOCAD LT
Set obj = Text1
AppActivate "AUTOCAD LT", True
obj.LinkMode = 0
obj.LinkTopic = "AutoCAD LT.DDE|System"
obj.LinkMode = 2
obj.LinkTimeout = 500
obj.LinkExecute cmd


'------------------------AUTOCAD 2000 à 2002
Set obj = Text1
obj.LinkMode = 0
obj.LinkTopic = "AutoCAD.r15.DDE|System"
obj.LinkMode = 2
obj.LinkTimeout = 500
obj.LinkExecute cmd

'------------------------AUTOCAD 2004 à 2006
Set obj = Text1
obj.LinkMode = 0
obj.LinkTopic = "AutoCAD.r16.DDE|System"
obj.LinkMode = 2
obj.LinkTimeout = 500
obj.LinkExecute cmd

'------------------------AUTOCAD 2007 à 2008
Set obj = Text1
obj.LinkMode = 0
obj.LinkTopic = "AutoCAD.r17.DDE|System"
obj.LinkMode = 2
obj.LinkTimeout = 500
obj.LinkExecute cmd

signaler à un administrateur
Commentaire de allopeck le 22/11/2007 09:17:06

Bonjour,
Tout d'abord je vous dit un grand merci pour votre réponse. Mais j'aurai une autre question ! excusez moi mais je suis trés nul en VB et j'ai decouvert ce logiciel avec access il n'y a pas trés longtemps. J'ai modifié le code comme vous pouvez le voir ci dessus mais il ne me lance pas autocad erreur suivante :"  MyAppID = Shell("C:Program FilesAutoCAD 2006 Fraaclt.exe", 1)    ' Exécute AutocadLT" erreur d'excution '53' fichier introuvable.

et quand je lance excuter il met  erreur de compilation déclaration existante dans la portée en cours : cmd As String
Voila si vous pouviez me dire quel est le problème ?
merci
code dans access :

Option Compare Database
'liste des library                              nom           fichier référence
'v Microsoft DAO 3.6 Object library           : (DAO)         dao360.dll     (methode ancienne)
'
'v visual basic for applications              : (VBA)         vbe6.dll
'Import Microsoft Access 9.0 Object library        : (Access)      MSACC9.olb
'v Ole Automation                             : (stdole)      stdole2.tld
'v Microsoft Office 9.0 Object Library        : (Office)      MSO9.dll
'
'#########################################################
'cet exemple fonctionne avec une table "TableCommandesAcad"
'contenant 2 champs
'champs1 : ID (numauto)
'champs2 : CommandesAcad (string)
'#########################################################
'et un formulaire contenant 3 boutons
'Bouton1 : LancerAcad
'Bouton2 : Executer
'Bouton3 : Fermer
'#########################################################
'les enregistrements de la table:
'1 : proxynotice 0         'elimine boite de dialogue indésirable au démarrage. Les autres se désactivent par Outils / Option dans autocad
'2 : filedia 0             'demande ouverture de fichier en ligne
'3 : _open                 'ouverture
'4 : c: oto.dwg           'nom du fichier
'5 : filedia 1             'fin du mode ouverture de fichier en ligne
'6 : z et                  'zoom etendu

Private Sub executer_Click()
'Ouverture table en "DAO"
   Set obj = Text1
obj.LinkMode = 0
obj.LinkTopic = "AutoCAD.r16.DDE|System"
obj.LinkMode = 2
obj.LinkTimeout = 500
obj.LinkExecute cmd
    Dim nom_de_la_table_a_ouvrir As String
    nom_de_la_table_a_ouvrir = "TableCommandesAcad"
    'Ouverture champ correspondant à table en "DAO"
    Dim nom_du_champs_a_ouvrir As String
    nom_du_champs_a_ouvrir = "CommandesAcad"


    Dim cmd As String
    Dim chan
    
    'initialisation DDE Autocad v.14
    'chan = DDEInitiate("AutoCAD.r14.DDE", "System")

    'initialisation DDE Autocad LT
    chan = DDEInitiate("AutoCAD.r16.DDE|System")

    'initialisation DDE Autocad 2000,  2002 ou MAP
    'chan = DDEInitiate("AutoCAD.r15.DDE", "System")





Dim db As Database
Dim rs As DAO.Recordset

Set db = CurrentDb()
Set rs = db.OpenRecordset(nom_de_la_table_a_ouvrir)


'###lire une table "DAO"
rs.MoveFirst

Do Until rs.EOF
    '###execute commande puis ferme et ouvre liaison
    '###avant de passer à suivante
    cmd = RTrim(rs(nom_du_champs_a_ouvrir)) + Chr(13)
    DDEExecute chan, cmd
    DoEvents
    DDETerminate chan
    'chan = DDEInitiate("AutoCAD.r15.DDE", "System") 'Acad2000
    chan = DDEInitiate("AutoCAD.r16.DDE|System")   'Acad LT
    rs.MoveNext
Loop
rs.Close
Set rs = Nothing

'###ferme liaison Autocad
    DDETerminate chan

End Sub
End Sub

Private Sub Fermer_Click()
On Error GoTo Err_Fermer_Click
    DoCmd.Close
Exit_Fermer_Click:
    Exit Sub
Err_Fermer_Click:
    MsgBox Err.Description
    Resume Exit_Fermer_Click
End Sub


Private Sub LancerAcad_Click()
  '3lignes pour lancer l'application DDE
    Dim MyAppID
    'MyAppID = Shell("C:Program FilesAutodesk Map 5 - Fraacad.exe", 1)    ' Exécute Autocad2000
    MyAppID = Shell("C:Program FilesAutoCAD 2006 Fraaclt.exe", 1)    ' Exécute AutocadLT
    '
    DoEvents
    AppActivate MyAppID, True
End Sub

signaler à un administrateur
Commentaire de ld40 le 22/11/2007 14:11:12

bonjour,
le probleme est le nom du fichier .exe qui est appelé
verifiez le dossier ou se trouve votre autocad2006, et corrigez le chemin MyAppID = Shell("C:\----------à modifier ici---------------\acad.exe",1)

dans tous les cas, il ne s'agit pas de aclt.exe, mais acad.exe !

signaler à un administrateur
Commentaire de allopeck le 22/11/2007 15:41:32

Bonjour,
merci pour cette explication. Cela fonctionne trés bien. Mais une autre erreur est survenu : " Erreur d'excution '5'Argument ou appel de procédure incorrect"  AppActivate MyAppID, True;
et le bouton éxcuter me mets toujours la même erreur :"erreur de compilation déclaration existante dans la portée en cours : cmd As String " cela vient-il de l'erreur ci dessus ?
Merci beaucoup

signaler à un administrateur
Commentaire de ld40 le 22/11/2007 21:39:30

je viens de reconstruire mon mdb.
je suis arrivé à la même erreur que toi, je ne sais pas trop pourquoi.
Tout ce que je peux dire, c'est que AppActivate MyAppID, True   n'est pas indispensable .
donc si ça plante, supprime cette ligne ...

signaler à un administrateur
Commentaire de allopeck le 24/11/2007 15:44:59

Bonjour,
merci pour ce conseil en effet, le problème a disparu! Par contre sur la commande excuter j'ai toujours le même problème ::"erreur de compilation déclaration existante dans la portée en cours : cmd As String " que signifie cela ?
merci P.F

signaler à un administrateur
Commentaire de ld40 le 24/11/2007 15:49:24

au risque de dire une bétise, il semblerait qu'il y a déjà un objet qui s'appelle cmd dans ton projet. un formulaire, une variable, une macro ...

essaye de changer dans ton code la variable "cmd" par un autre nom

signaler à un administrateur
Commentaire de allopeck le 25/11/2007 07:06:14

Bonjour,
Non il ne fallait pas changer de nom de variable pour régler le problème. C'est juste que cmd apparait avant la déclaration. Mais maintenant un autre porblème apparait : "Erreur d'excution 13 Incompatibilité de type. Set obj = Text1"
Est ce que ça marche avec la base que vous avez recrée? Si oui pouvez vous me l'envoyer par mail?

signaler à un administrateur
Commentaire de allopeck le 25/11/2007 07:08:26

Au fait c bien ça pour le 2006 ?
chan = DDEInitiate("AutoCAD.r16.DDE", "System")
merci

signaler à un administrateur
Commentaire de allopeck le 04/12/2007 16:06:59

Bonjour,
Alors est ce que pour vous ça marche ?
merci

signaler à un administrateur
Commentaire de ld40 le 04/12/2007 17:47:27

je vous ai oublié pardon. Ce que vous indiquez semble correct.
contactez moi directement par message privé en cliquant mon profil, je vous ferez parvenir le fichier access, et s'il fonctionne chez vous, je le publierai sur vbfrance.

signaler à un administrateur
Commentaire de allopeck le 06/12/2007 10:32:24

Bonjour,
Avez vous eu mon message?
Bonne journée

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.