Prendre le contrôle d'une application Windows avec VBA (Application. DDEInitiate)
Bonjour à tous.
C'est un sujet que j'essaie de creuser depuis longtemps mais qui n'est que très peu documenté sur le web: Comment contrôler une application tierce a MS Office sous windows via VBA?
L'objectif est de créer un lien (pont-connexion) d'un outil Office (Excel/Access) afin d'effectuer des manipulation sur une application windows, par exemple coller le clipboard dans paint ou dans notepad. Par soucis d'efficacité, je ne souhaite pas utiliser la commande sendkeys à laquelle nous ne pouvons pas faire confiance.
A ma connaissance il existe une methode DDE qui le permettrait mais il semble qu'elle soit obsolète. Pouvez-vous confirmer ?
Voici un code utilisant DDE afin de se connecter à Word et de lui envoyer la commande Impression
"
Code:
1 2 3 4 5
| channelNumber = Application.DDEInitiate( _
app:="WinWord", _
topic:="C:\FORMLETR.DOC")
Application.DDEExecute channelNumber, "[FILEPRINT]"
Application.DDETerminate channelNumber |
En essayant de le modifier afin de coller notre clipboard sur paint, voici le code qui ne fonctionne pas :
Code:
1 2 3 4 5
| channelNumber = Application.DDEInitiate( _
app:="mspaint", _
topic:="C:\Test.png")
Application.DDEExecute channelNumber, "[PASTE]"
Application.DDETerminate channelNumber |
Resultat:
J'ai une erreur "Run time error '13': Type missmatch" à la première ligne bien que le fichier s'ouvre.
Essayons avec le notepad:
Code:
1 2 3 4 5 6 7 8
| Sub DDEtoBlocNotes()
Dim Datarange As Range
chan = Application.DDEInitiate(app:="NOTEPAD", topic:="C:\Users\User1\Documents\Access\Test.txt")
Set Datarange = ThisWorkbook.Worksheets("Sheet1").Range("A1")
Datarange.Copy
Application.DDEExecute chan, "[EDITIONCOLLER]"
Application.DDETerminate chan
End Sub |
Resultat: même erreur que précédement malgré l'ouverture du document.
"Run time error '13': Type missmatch"
Pouvez-vous m'aider à résoudre ce problème svp ?
Avez vous de la documentation sur les attributs des commandes DDE?
Connaissez vous une autre façon de se connecter à une application tierce afin de lui envoyer des commandes ? (OLE/ODBC/ADO) ?
Merci d'avance pour vos réponses.