Initiate DDE conversation from VB for EXCEL

Le
maumo Hors ligne
Bonjour,

Voici un lien:

http://support.microsoft.com/kb/75089/en-us/

sur lequel vous trouverez une procédure pour établir la conversation DDE entre VB et EXCEL. et le code source VB.

J'en suis au cours 101 (début) avec VB, j'ai écrit le code proposé, sans vraiment de succès, mes connaissances sont trop limitées pour en voir la fin.

Ma première question est relative au STEP 2 de la procédure.

Quel le code en VB pour satisfaire cette première étape?

Je crois m'en être tirez avec le STEP 3 de la procédure.

J'ai beaucoup d'erreur dans le code du STEP 4:

i.e. les variables errorhandler et Z% not defined etc

Je demande peut être trop!!!

Si le code présenter est correctement écrit et a déjà fonctionner il me semble qu'on peut le réécrire sans trop de problème.

Ça, me rappel des souvenirs, vous êtes peut être trop jeune pour porter un jugement sur l'analogie qui suit:

Dans les années 70 (1970 il y a plus de 40 ans de cela) a l'IMAG ( Institut des Mathématiques Appliquées de Grenoble) , alors qu’il n'existait aucun compilateur pour analyser la sémantique du code ALGOL W nous devions faire les corrections de visou (Questions d'EXAMEN).

Je me sens revivre ces moments avec le code que l'on me présente et je ne connait pas assez bien la sémantique de VB.


S'il vous plait votre aide sera appréciez, merci a l'avance.

MauMo
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-marc
Le #23636201
maumo wrote:
Bonjour,

Voici un lien:

http://support.microsoft.com/kb/75089/en-us/

sur lequel vous trouverez une procédure pour établir la conversation
DDE entre VB et EXCEL. et le code source VB.

J'en suis au cours 101 (début) avec VB, j'ai écrit le code proposé,
sans vraiment de succès, mes connaissances sont trop limitées pour en
voir la fin.



Hello,

le code proposé est du VB3, ca remone aux années 90...
J'ai réécrit le code pour VB6. Ca compile et démarre sans erreur, mais je ne
parviens pas à le faire fonctionner (je pense que Excel 2010 n'aime pas trop
les liaisons DDE, en tout cas pas comme ça;).

bref, peut etre cela marchera t-il avec toi, qui sait ?

En tout cas, le code est correct maintenant, en tout caas d'un point de vue
syntaxique:

Tu peux faire un copy/paste de ce qui suit dans une feuille vierge:

(note: il faut créer les controles comme indiqué au point 2.2 (un textbox, 2
option buttons et 2 command buttons, mettre les bons noms etc.)


' --------------------------------> DEBUT


Option Explicit

Private Const SW_SHOWNORMAL = 1

Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long

Const AUTOMATIC = 1
Const MANUAL = 2
Const NONE = 0

Sub Form_Load()
Dim ErrorTries As Integer

On Error GoTo errorhandler


ShellExecute Me.hwnd, "open", "C:test.xls", vbNullString,
"C:Windows", SW_SHOWNORMAL

DoEvents 'Process Windows events to ensure that
'Excel executes before making any attempt
'to perform DDE.

Text1.LinkMode = NONE 'Clear DDE link if it already exists.

'Set up link with Excel:
'Unremark the next line for use with Excel 4.
'Text1.LinkTopic = "Excel|source.xls"

'Remark out the next line when using Excel 4
'Text1.LinkTopic = "Excel|C:VB3[SOURCE.XLS]Sheet1"

Text1.LinkItem = "R1C1" 'Set link to first cell on spreadsheet.

Text1.LinkTopic = "Excel|Feuil1"

Text1.LinkMode = MANUAL 'Establish a manual DDE link.
ManualLink.Value = True

Exit Sub

errorhandler:
If (Err.Number = 282) And (ErrorTries < 15) Then
ErrorTries = ErrorTries + 1
DoEvents
Resume
Else
Error Err.Number
End If

End Sub

Private Sub ManualLink_Click()
Request.Visible = True 'Make request button valid.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = MANUAL 'Reestablish new LinkMode.
End Sub

Private Sub AutomaticLink_Click()

Request.Visible = False 'No need for button with automatic link.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = AUTOMATIC 'Reestablish new LinkMode.
End Sub

Private Sub Poke_Click()

'With any DDE link this button will be visible and when selected
'it will poke information from the destination application to the
'source application.
Text1.LinkPoke
End Sub

Private Sub Request_Click()

'With a manual DDE link this button will be visible and when
'selected it will request an update of information from the source
'application to the destination application.
Text1.LinkRequest
End Sub

' --------------------------------> FIN

Bon amusement;

--
Jean-marc
maumo Hors ligne
Le #23636261
Jean-marc a écrit le 07/08/2011 à 15h46 :
maumo wrote:
Bonjour,

Voici un lien:

http://support.microsoft.com/kb/75089/en-us/

sur lequel vous trouverez une procédure pour établir la
conversation
DDE entre VB et EXCEL. et le code source VB.

J'en suis au cours 101 (début) avec VB, j'ai écrit le code
proposé,
sans vraiment de succès, mes connaissances sont trop limitées
pour en
voir la fin.




Hello,

le code proposé est du VB3, ca remone aux années 90...
J'ai réécrit le code pour VB6. Ca compile et démarre sans
erreur, mais je ne
parviens pas à le faire fonctionner (je pense que Excel 2010 n'aime pas
trop
les liaisons DDE, en tout cas pas comme ça;).

bref, peut etre cela marchera t-il avec toi, qui sait ?

En tout cas, le code est correct maintenant, en tout caas d'un point de vue
syntaxique:

Tu peux faire un copy/paste de ce qui suit dans une feuille vierge:

(note: il faut créer les controles comme indiqué au point 2.2 (un
textbox, 2
option buttons et 2 command buttons, mettre les bons noms etc.)


' --------------------------------> DEBUT


Option Explicit

Private Const SW_SHOWNORMAL = 1

Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String,
ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long

Const AUTOMATIC = 1
Const MANUAL = 2
Const NONE = 0

Sub Form_Load()
Dim ErrorTries As Integer

On Error GoTo errorhandler


ShellExecute Me.hwnd, "open", "C:test.xls", vbNullString,
"C:Windows", SW_SHOWNORMAL

DoEvents 'Process Windows events to ensure that
'Excel executes before making any attempt
'to perform DDE.

Text1.LinkMode = NONE 'Clear DDE link if it already exists.

'Set up link with Excel:
'Unremark the next line for use with Excel 4.
'Text1.LinkTopic = "Excel|source.xls"

'Remark out the next line when using Excel 4
'Text1.LinkTopic = "Excel|C:VB3[SOURCE.XLS]Sheet1"

Text1.LinkItem = "R1C1" 'Set link to first cell on spreadsheet.

Text1.LinkTopic = "Excel|Feuil1"

Text1.LinkMode = MANUAL 'Establish a manual DDE link.
ManualLink.Value = True

Exit Sub

errorhandler:
If (Err.Number = 282) And (ErrorTries < 15) Then
ErrorTries = ErrorTries + 1
DoEvents
Resume
Else
Error Err.Number
End If

End Sub

Private Sub ManualLink_Click()
Request.Visible = True 'Make request button valid.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = MANUAL 'Reestablish new LinkMode.
End Sub

Private Sub AutomaticLink_Click()

Request.Visible = False 'No need for button with automatic link.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = AUTOMATIC 'Reestablish new LinkMode.
End Sub

Private Sub Poke_Click()

'With any DDE link this button will be visible and when selected
'it will poke information from the destination application to the
'source application.
Text1.LinkPoke
End Sub

Private Sub Request_Click()

'With a manual DDE link this button will be visible and when
'selected it will request an update of information from the source
'application to the destination application.
Text1.LinkRequest
End Sub

' --------------------------------> FIN

Bon amusement;

--
Jean-marc


Bon matin Jean Marc,

Un gros merci pour ton aide c'est la première fois que je fais appel à la collaboration sur ce site je suis agréablement surpris du résultats. Un retour aussi rapide de ta part ça m'enchante et me donne du courage pour poursuivre. Je ne veux pas te décevoir, je me met à l'oeuvre tout de suite.

@ + Maurice
maumo Hors ligne
Le #23636881
maumo a écrit le 07/08/2011 à 16h23 :
Jean-marc a écrit le 07/08/2011 à 15h46 :
maumo wrote:
Bonjour,

Voici un lien:

http://support.microsoft.com/kb/75089/en-us/

sur lequel vous trouverez une procédure pour établir la
conversation
DDE entre VB et EXCEL. et le code source VB.

J'en suis au cours 101 (début) avec VB, j'ai écrit le code
proposé,
sans vraiment de succès, mes connaissances sont trop limitées
pour en
voir la fin.





Hello,

le code proposé est du VB3, ca remone aux années 90...
J'ai réécrit le code pour VB6. Ca compile et démarre sans
erreur, mais je ne
parviens pas à le faire fonctionner (je pense que Excel 2010 n'aime pas
trop
les liaisons DDE, en tout cas pas comme ça;).

bref, peut etre cela marchera t-il avec toi, qui sait ?

En tout cas, le code est correct maintenant, en tout caas d'un point de vue
syntaxique:

Tu peux faire un copy/paste de ce qui suit dans une feuille vierge:

(note: il faut créer les controles comme indiqué au point 2.2
(un
textbox, 2
option buttons et 2 command buttons, mettre les bons noms etc.)


' --------------------------------> DEBUT


Option Explicit

Private Const SW_SHOWNORMAL = 1

Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String,
ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long

Const AUTOMATIC = 1
Const MANUAL = 2
Const NONE = 0

Sub Form_Load()
Dim ErrorTries As Integer

On Error GoTo errorhandler


ShellExecute Me.hwnd, "open", "C:test.xls", vbNullString,
"C:Windows", SW_SHOWNORMAL

DoEvents 'Process Windows events to ensure that
'Excel executes before making any attempt
'to perform DDE.

Text1.LinkMode = NONE 'Clear DDE link if it already exists.

'Set up link with Excel:
'Unremark the next line for use with Excel 4.
'Text1.LinkTopic = "Excel|source.xls"

'Remark out the next line when using Excel 4
'Text1.LinkTopic = "Excel|C:VB3[SOURCE.XLS]Sheet1"

Text1.LinkItem = "R1C1" 'Set link to first cell on spreadsheet.

Text1.LinkTopic = "Excel|Feuil1"

Text1.LinkMode = MANUAL 'Establish a manual DDE link.
ManualLink.Value = True

Exit Sub

errorhandler:
If (Err.Number = 282) And (ErrorTries < 15) Then
ErrorTries = ErrorTries + 1
DoEvents
Resume
Else
Error Err.Number
End If

End Sub

Private Sub ManualLink_Click()
Request.Visible = True 'Make request button valid.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = MANUAL 'Reestablish new LinkMode.
End Sub

Private Sub AutomaticLink_Click()

Request.Visible = False 'No need for button with automatic link.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = AUTOMATIC 'Reestablish new LinkMode.
End Sub

Private Sub Poke_Click()

'With any DDE link this button will be visible and when selected
'it will poke information from the destination application to the
'source application.
Text1.LinkPoke
End Sub

Private Sub Request_Click()

'With a manual DDE link this button will be visible and when
'selected it will request an update of information from the source
'application to the destination application.
Text1.LinkRequest
End Sub

' --------------------------------> FIN

Bon amusement;

--
Jean-marc



Bon matin Jean Marc,

Un gros merci pour ton aide c'est la première fois que je fais appel
à la collaboration sur ce site je suis agréablement surpris du
résultats. Un retour aussi rapide de ta part ça m'enchante et me
donne du courage pour poursuivre. Je ne veux pas te décevoir, je me met
à l'oeuvre tout de suite.

@ + Maurice


Bonjour Jean Marc,

A ta convenance, pour tester ton code tu dois démarrez un serveur RTD/DDE, le cas échéant, je te donne, un lien avec mon ID et mon mot de passe, aussitôt la connexion établie le serveur est actif en arrière plan.

Pour le moment voici le résultat de mes exploits suivant la ré-écriture de ton code. Quelques erreurs subsistent: le Main n'est defini et certains enoncés ( 6 ) ne sont pas à leurs place dans le programme.

Pour facilité la lecture à la réception je vais utiliser un autre message ou il n'y aura que le code.

@+ Mau
maumo Hors ligne
Le #23636891
maumo a écrit le 07/08/2011 à 16h23 :
Jean-marc a écrit le 07/08/2011 à 15h46 :
maumo wrote:
Bonjour,

Voici un lien:

http://support.microsoft.com/kb/75089/en-us/

sur lequel vous trouverez une procédure pour établir la
conversation
DDE entre VB et EXCEL. et le code source VB.

J'en suis au cours 101 (début) avec VB, j'ai écrit le code
proposé,
sans vraiment de succès, mes connaissances sont trop limitées
pour en
voir la fin.





Hello,

le code proposé est du VB3, ca remone aux années 90...
J'ai réécrit le code pour VB6. Ca compile et démarre sans
erreur, mais je ne
parviens pas à le faire fonctionner (je pense que Excel 2010 n'aime pas
trop
les liaisons DDE, en tout cas pas comme ça;).

bref, peut etre cela marchera t-il avec toi, qui sait ?

En tout cas, le code est correct maintenant, en tout caas d'un point de vue
syntaxique:

Tu peux faire un copy/paste de ce qui suit dans une feuille vierge:

(note: il faut créer les controles comme indiqué au point 2.2
(un
textbox, 2
option buttons et 2 command buttons, mettre les bons noms etc.)


' --------------------------------> DEBUT


Option Explicit

Private Const SW_SHOWNORMAL = 1

Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String,
ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long

Const AUTOMATIC = 1
Const MANUAL = 2
Const NONE = 0

Sub Form_Load()
Dim ErrorTries As Integer

On Error GoTo errorhandler


ShellExecute Me.hwnd, "open", "C:test.xls", vbNullString,
"C:Windows", SW_SHOWNORMAL

DoEvents 'Process Windows events to ensure that
'Excel executes before making any attempt
'to perform DDE.

Text1.LinkMode = NONE 'Clear DDE link if it already exists.

'Set up link with Excel:
'Unremark the next line for use with Excel 4.
'Text1.LinkTopic = "Excel|source.xls"

'Remark out the next line when using Excel 4
'Text1.LinkTopic = "Excel|C:VB3[SOURCE.XLS]Sheet1"

Text1.LinkItem = "R1C1" 'Set link to first cell on spreadsheet.

Text1.LinkTopic = "Excel|Feuil1"

Text1.LinkMode = MANUAL 'Establish a manual DDE link.
ManualLink.Value = True

Exit Sub

errorhandler:
If (Err.Number = 282) And (ErrorTries < 15) Then
ErrorTries = ErrorTries + 1
DoEvents
Resume
Else
Error Err.Number
End If

End Sub

Private Sub ManualLink_Click()
Request.Visible = True 'Make request button valid.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = MANUAL 'Reestablish new LinkMode.
End Sub

Private Sub AutomaticLink_Click()

Request.Visible = False 'No need for button with automatic link.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = AUTOMATIC 'Reestablish new LinkMode.
End Sub

Private Sub Poke_Click()

'With any DDE link this button will be visible and when selected
'it will poke information from the destination application to the
'source application.
Text1.LinkPoke
End Sub

Private Sub Request_Click()

'With a manual DDE link this button will be visible and when
'selected it will request an update of information from the source
'application to the destination application.
Text1.LinkRequest
End Sub

' --------------------------------> FIN

Bon amusement;

--
Jean-marc



Bon matin Jean Marc,

Un gros merci pour ton aide c'est la première fois que je fais appel
à la collaboration sur ce site je suis agréablement surpris du
résultats. Un retour aussi rapide de ta part ça m'enchante et me
donne du courage pour poursuivre. Je ne veux pas te décevoir, je me met
à l'oeuvre tout de suite.

@ + Maurice


Les enoncées Private ne sont pas à leurs place!!!! et il semble que ca prend un Main() voici le code:


Option Explicit On

Sub Form_Load()

Private Const SW_SHOWNORMAL = 1
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Const AUTOMATIC = 1
Const MANUAL = 2
Const NONE = 0

Dim ErrorTries As Integer
ErrorTries = 0
On Error GoTo errorhandler

ShellExecute(Me.hwnd, "open", "C:SOURCE.xls", vbNullString, "C:Windows", SW_SHOWNORMAL)

DoEvents() 'Process Windows events to ensure that
'Excel executes before making any attempt
'to perform DDE.

Text1.LinkMode = NONE 'Clear DDE link if it already exists.

'Set up link with Excel:
'Unremark the next line for use with Excel 4.
'Text1.LinkTopic = "Excel|source.xls"

'Remark out the next line when using Excel 4
'Text1.LinkTopic = "Excel|C:VB3[SOURCE.XLS]Sheet1"

Text1.LinkItem = "R1C1" 'Set link to first cell on spreadsheet.

Text1.LinkTopic = "Excel|Feuil1"

Text1.LinkMode = MANUAL 'Establish a manual DDE link.
ManualLink.Value = True

Exit Sub

errorhandler:
If (Err.Number = 282) And (ErrorTries < 15) Then
ErrorTries = ErrorTries + 1
DoEvents()
Resume
Else
Error Err.Number
End If

End Sub

Private Sub ManualLink_Click()
Request.Visible = True 'Make request button valid.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = MANUAL 'Reestablish new LinkMode.
End Sub

Private Sub AutomaticLink_Click()

Request.Visible = False 'No need for button with automatic link.
Text1.LinkMode = NONE 'Clear DDE Link.
Text1.LinkMode = AUTOMATIC 'Reestablish new LinkMode.
End Sub

Private Sub Request_Click()

'With a manual DDE link this button will be visible and when
'selected it will request an update of information from the source
'application to the destination application.
Text1.LinkRequest()
End Sub


Private Sub Poke_Click()

'With any DDE link this button will be visible and when selected
'it will poke information from the destination application to the
'source application.
Text1.LinkPoke()
End Sub


@+ Mau
Publicité
Poster une réponse
Anonyme