Lien DDE vers liste de PLC

Bonjours,

Dans le cadre de mon métier, j'aimerais réaliser une petite supervision avec Excel.

Cette supervision sera la même pour une trentaine de machine similaires.

J'arrive sans aucun soucis à accéder aux viriables Plc qui m'intéressent en utilisant un lien DDE.

image

voir le lien dans la formule.

Ce que je n'arrive pas a faire, c'est remplacer le 'SHW401' du lien DDE par la valeur d'une liste déroulante ce trouvant dans la cellule C3

image

N'étant pas trop sûr de la clareté de ma requette, n'hésitez a me demander les informations nécessaire et complémentaire.

Cordialement

Cap49

Bonjour,

Je ne suis pas certain d'avoir compris mais pouvez-vous essayer ceci :

=INDIRECT("(RSLinx|'"&$C$3&"'!N30:0')")

Cdlt,

Bonjour

Merci de votre réponse 3GB.

De par votre réponse je vois que vous avez compris mon problème.

J' ai essayé le code que vous proposé mais malheureusement il ne fonctionne pas.

image

L'idée est bonne et je vais continuer de chercher sur cette voie.

Cordialement

Bonjour,

A votre place, j'essaierais sans les parenthèses à l'intérieur du INDIRECT. Et ce N30:0 m'étonne un peu mais comme je ne sais pas de quoi il s'agit, j'imagine que c'est normal.

Cdlt,

Bonjour,

J'ai essayé aussi sans les parenthèses , mais cela ne marche pas.

Si j'utilise la formule : =(RSLinx|'SHW401'!'N30:0')

j'accède bien a la variable N30:0 dans le PLC qui a comme nom SHW401 ( N30 étant un registre de 40 variables de tupe N = integer)

Encore merci pour vos réponces.

Bàv

Bonjour Cap49,

Je suis désolé mais malheureusement, je n'y connais rien... J'ai pensé, à l'apparence de la formule, que l'utilisation de la fonction INDIRECT permettrait de variabiliser l'import.

En attendant que vous obteniez meilleure réponse, je vous propose un essai avec une macro adaptée de cette vidéo :

basée sur 2 méthodes https://docs.microsoft.com/fr-fr/office/vba/api/excel.application.ddeinitiate et https://docs.microsoft.com/fr-fr/office/vba/api/excel.application.dderequest (je mets les liens pour moi).

Sub Block_Red()

lCanal = DDEInitiate("RSLinx", "SHW401")
tdata = DDERequest(lCanal, "N30:0")
activesheet.range("C6").resize(ubound(tdata) + 1).value = application.transpose(tdata)
DDETerminate(lCanal)

end sub

Si cette macro fonctionnait, cela signifierait qu'il serait peut-être possible de créer une fonction personnalisée :

function RSLinx(sTopic as string, sVariable as string)
lCanal = DDEInitiate("RSLinx", sTopic)
tdata = DDERequest(lCanal, sVariable)
RSLinx = tdata
DDETerminate(lCanal)
end function

Celle-ci, renvoyant un tableau, s'utiliserait ainsi sur Excel (combinée à INDEX) :

=INDEX(RSLinx("SHW401","N30:0");1)

pour obtenir le premier élément du tableau (il faudrait ensuite remplacer 1 par 2, 3, ...).

Bien sûr, les valeurs "SHW401" et "N30:0" pourraient alors être rendues variables, par exemple :

=INDEX(RSLinx($C$3,"N30:0");1)

Je n'ai vraiment aucune certitude ni moyen de tester donc c'est à voir...

Cdlt,

Rechercher des sujets similaires à "lien dde liste plc"