OVH Cloud OVH Cloud

VBA et liaison OLE

4 réponses
Avatar
Christian.L
Bonjour à tous

Dans une routine VBA faite dans un fichier Excel, je lance une session
Autocad
avec le code suivant :

' On lance AutoCAD
Set AcadApp = New AutoCAD.AcadApplication

' On remets Excel au premier plan (le lancement d'AutoCAD désactive la
fenêtre Excel)
Application.Visible = True

a la fin de ma routine, je ferme l'application avec le code suivant :

' On ferme AutoCAD
AcadApp.Quit
ActiveWorkbook.Save

Le problème, c'est que la liaison OLE continue d'exister, car si je relance
la routine, Excel me dit qu'il attend la fin d'une liaison OLE et refuse de
me créé
l'objet AcadApp.

Une idée de solution ?

Merci d'avance

Christian

4 réponses

Avatar
papou
Bonjour
Essaie simplement d'ajouter
Set AcadApp = Nothing
après
AcadApp.Quit

Cordialement
Pascal

"Christian.L" a écrit dans le message de
news: %
Bonjour à tous

Dans une routine VBA faite dans un fichier Excel, je lance une session
Autocad
avec le code suivant :

' On lance AutoCAD
Set AcadApp = New AutoCAD.AcadApplication

' On remets Excel au premier plan (le lancement d'AutoCAD désactive
la
fenêtre Excel)
Application.Visible = True

a la fin de ma routine, je ferme l'application avec le code suivant :

' On ferme AutoCAD
AcadApp.Quit
ActiveWorkbook.Save

Le problème, c'est que la liaison OLE continue d'exister, car si je
relance
la routine, Excel me dit qu'il attend la fin d'une liaison OLE et refuse
de
me créé
l'objet AcadApp.

Une idée de solution ?

Merci d'avance

Christian



Avatar
michdenis
Bonjour Christian,

Habituellement avant de passer cette commande "quit", on commence par fermer le travail en cours dans l'application ouverte

Pour excel, on aurait :
Wk.Close 'Ferme le classeur ou les classeurs
Xl.quit 'Ferme l'application.


Salutations!


"Christian.L" a écrit dans le message de news: %
Bonjour à tous

Dans une routine VBA faite dans un fichier Excel, je lance une session
Autocad
avec le code suivant :

' On lance AutoCAD
Set AcadApp = New AutoCAD.AcadApplication

' On remets Excel au premier plan (le lancement d'AutoCAD désactive la
fenêtre Excel)
Application.Visible = True

a la fin de ma routine, je ferme l'application avec le code suivant :

' On ferme AutoCAD
AcadApp.Quit
ActiveWorkbook.Save

Le problème, c'est que la liaison OLE continue d'exister, car si je relance
la routine, Excel me dit qu'il attend la fin d'une liaison OLE et refuse de
me créé
l'objet AcadApp.

Une idée de solution ?

Merci d'avance

Christian
Avatar
Christian.L
Bonjour et merci de ton attention

En effet, je ne le faisais pas.
Après modification de mon code je ferme a chaque fois le plan
que j'ai ouvert.

Toujours le même problème

C.L.

"michdenis" a écrit dans le message de news:
%
Bonjour Christian,

Habituellement avant de passer cette commande "quit", on commence par
fermer le travail en cours dans l'application ouverte

Pour excel, on aurait :
Wk.Close 'Ferme le classeur ou les classeurs
Xl.quit 'Ferme l'application.


Salutations!


"Christian.L" a écrit dans le message de
news: %
Bonjour à tous

Dans une routine VBA faite dans un fichier Excel, je lance une session
Autocad
avec le code suivant :

' On lance AutoCAD
Set AcadApp = New AutoCAD.AcadApplication

' On remets Excel au premier plan (le lancement d'AutoCAD désactive
la
fenêtre Excel)
Application.Visible = True

a la fin de ma routine, je ferme l'application avec le code suivant :

' On ferme AutoCAD
AcadApp.Quit
ActiveWorkbook.Save

Le problème, c'est que la liaison OLE continue d'exister, car si je
relance
la routine, Excel me dit qu'il attend la fin d'une liaison OLE et refuse
de
me créé
l'objet AcadApp.

Une idée de solution ?

Merci d'avance

Christian




Avatar
michdenis
Bonjour Christian,

Voici un exemple d'automation avec Excel.

Je ne vois pas pourquoi, il n'en serait pas ainsi avec Autocad.

Attention, le VBA d'autocad peut différer légèrement comme dans cette ligne de code :

Wk.Close False 'Est-ce que le paramètre "False" existe avec Autocad ?

Lorsque tu ouvres un nouveau plan, assure-toi d'utiliser l'instance pour le créer, comme dans cette ligne de code pour Excel

Set Wk = Xl.Workbooks.Open("c:Atravailclasseur1.xls")

Avec les touches Ctrl +Alt + delete, assure toi qu'il n'y a pas d'instance d'autocad ouverte avec de procéder.

Au-delà de cela, je ne sais pas!


'---------------------------
Sub Exemple()

Dim Xl As New Excel.Application
Dim Wk As Workbook
Xl.Visible = True
Set Wk = Xl.Workbooks.Open("c:Atravailclasseur1.xls")
'opérations diverses sur le classeur

Wk.Close False 'fermeture du classeur sans saugegarde
Xl.Quit
Set Wk = Nothing: Set Xl = Nothing

End Sub
'---------------------------



"Christian.L" a écrit dans le message de news: eIL%23XY$
Bonjour et merci de ton attention

En effet, je ne le faisais pas.
Après modification de mon code je ferme a chaque fois le plan
que j'ai ouvert.

Toujours le même problème

C.L.

"michdenis" a écrit dans le message de news:
%
Bonjour Christian,

Habituellement avant de passer cette commande "quit", on commence par
fermer le travail en cours dans l'application ouverte

Pour excel, on aurait :
Wk.Close 'Ferme le classeur ou les classeurs
Xl.quit 'Ferme l'application.


Salutations!


"Christian.L" a écrit dans le message de
news: %
Bonjour à tous

Dans une routine VBA faite dans un fichier Excel, je lance une session
Autocad
avec le code suivant :

' On lance AutoCAD
Set AcadApp = New AutoCAD.AcadApplication

' On remets Excel au premier plan (le lancement d'AutoCAD désactive
la
fenêtre Excel)
Application.Visible = True

a la fin de ma routine, je ferme l'application avec le code suivant :

' On ferme AutoCAD
AcadApp.Quit
ActiveWorkbook.Save

Le problème, c'est que la liaison OLE continue d'exister, car si je
relance
la routine, Excel me dit qu'il attend la fin d'une liaison OLE et refuse
de
me créé
l'objet AcadApp.

Une idée de solution ?

Merci d'avance

Christian