begin process at 2010 02 10 07:42:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OLE, DDE, Automation

 > AUTOCAD LT ET DDE

AUTOCAD LT ET DDE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :20 285

Auteur : papy04

Ecrire un message privé
Commentaire sur cette source (20)
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.


 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) EXCELDOTNET : PROGRAMMER EXCEL EN DOTNET SANS VBA NI VSTO par Patrice99
Source avec Zip Source avec une capture AJOUTEZ VOTRE COMPLÉMENT À VISUAL BASIC 6 SANS ÊTRE CONTRAIN... par VBsearch
Source avec Zip PILOTER ACROBAT READER DEPUIS EXCEL ET VBA par jpduf
Source avec Zip Source avec une capture INTERCEPTER DES APPELS DE METHODE (SURCHARGE DE VTABLE) par Renfield
Source avec Zip Source avec une capture CYBER COUNTER V2 par makaveli244

Commentaires et avis

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

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

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

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

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.

;-)

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

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

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

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

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 !

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

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 ...

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

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

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?

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

Commentaire de allopeck le 04/12/2007 16:06:59

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

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.

Commentaire de allopeck le 06/12/2007 10:32:24

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

Commentaire de scromania le 01/10/2009 10:31:28

bonjour ,
j'aimerais savoir si quelqu'un pourrais m'expliquer car

je parviens à ouvrir autocad 2008.
je souhaite soit faire un coller de tout le texte directement dans autocad


ex:
point 378558.968,179006.34
point 378188.651,179309.202
point 378174.173,179327.315
point 366429.476,176386.49
point 366418.707,176390.232
point 350390.902,184772.049
point 350348.219,184820.23
point 350161.756,185483.88
point 378558.968,179006.34
point 377790.191,179407.567
point 376992.888,178768.69
point 375989.401,178733.442
point 375049.05,178507.076

J'arrrive juste a ouvrir l'api autocad .

Private Sub Bouton1_Click()

     Dim MyAppID
       MyAppID = Shell("C:\Program Files\AutoCAD 2008\acad.exe", 1)  
application.Doevents()

End Sub


Pouvez vous m'aiguillet
merci

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales