codebleu
Messages postés30Date d'inscriptionmardi 30 mai 2006StatutMembreDernière intervention 6 mai 2009
-
2 avril 2007 à 14:42
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
5 avril 2007 à 18:54
Bonjour,
J'aimerais pouvoir utiliser les valeurs d'une variable déclarée "Public" de la forme "Type...End Type" dans une macro "MaMacro1.xla" en échange avec une autre macro "MaMacro2.xla".
Et bien sûr, cela ne marche pas ! Je précise bien que cela est fait en VBA.
L'idée est la suivante ;
Déclaration dans MaMacro1.xla :
Public Type MaVariable
MaSousVar1 as Double
MaSousVar2 as Double
MonAutreVar as String
End Type
J'affecte des valeurs à "MaVariable" et je souhaiterais utiliser les mêmes désignation de variables dans une autre macro "MaMacro2.xla" . Comme par exemple ;
Sub MaSubDansMaMacro2()
MsgBox "MaSousVar1=" & MaVariable.MaSousVar1
End Sub
En fait, la variable de type "MaVariable" n'est pas reconnue dans la macro "MaMacro2.xla" alors qu'elle est déclarée en Public...
Si vous avez des solutions pour m'aider, elles sont les bienvenues,
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 5 avril 2007 à 18:54
Salut,
ça changera rien... Quand on dit, "on peut pas passer une variable entre projet", c'est pas pour t'embêter juste à toi, c'est qu'on peut vraiment pas.
Le coup de la DLL, beh mon module de classe, si tu le compile, sera une dll, mais il faut bien dans tous les cas stocker la variable qque part car, tu transmets une info à un Projet1, qui est récupéré par un projet2. Dans ce cas précis, elle ne servirait qu'à faire maillon pour passage d'info
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 2 avril 2007 à 21:00
Salut
En effet, contrairement à ce que dit l'aide, la déclaration "Public" d'un Type ne donne pas une portée à tous les projets.
La portée se limite à tous les éléments du projet en cours (feuilles, modules, ...)
Maintenant, il est très simple de dupliquer cette déclaration de type dans un des modules de l'autre projet pour pouvoir en profiter.
Par contre, c'est vrai, tu ne pourras pas lire le contenu des variables entre les Projets.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
codebleu
Messages postés30Date d'inscriptionmardi 30 mai 2006StatutMembreDernière intervention 6 mai 2009 2 avril 2007 à 22:54
Merci pour ta réponse.
En fait, je me doutais un peu de cela...
Et j'aimerais savoir si les modules de classes en vba seraient plus adapté à ce que je recherche.
Notamment, la communication des valeurs de variables en envoi/retour au travers de classeurs ayant des macros (xla). Mon idée est de pouvoir faire transiter des données pour le calcul d'une macro (ex: MonClasseur1.xla!MaMacro1(Arg1,1rg2...)) et de les récupérer dans d'autres classeurs (ex: MonClasseur2.xla!MaMacro2(Arg1, Arg2...)).
Je connais un peu les structures Property Set / Property Let / Property Get, mais je ne vois pas trop comment utiliser cela pour ce but de communication entre classeurs.
Il y aurait-il un intérêt dans mon cas à faire des fichiers xml car j'utilise bien sûr des bases de données sur des Feuilles Excel.
J'espères ne pas trop en demander, mais je me pose des questions...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 3 avril 2007 à 00:36
Re
Judicieuse question.
Comment faire communiquer deux applications entre elles ?
Anciennement, il y avait les liens DDE (Dynamic Data Exchange) entre applications.
Cette technique dite "peu sûre" est maintenant abandonnée sous Vista mais fonctionne toujours sous XP.
Tu peux l'expérimenter, c'est assez simple à mettre en oeuvre à condition de bien respecter certaines règles.
Elle a été remplacée par d'autres techniques comme les liaisons OLE (Object Linking and Embedding).
Dans le cas d'Excel, c'est assez simple puisqu'il suffit qu'il y ait une feuille Excel dont les cellules servent de stockage pour les échanges.
Depuis l'extérieur, il te suffit de venir lire te connecter, comme à une base de données.
Consulte l'aide de Excel sur ces mots DDE et OLE et ils expliquent quels objets peuvent communiquer et comment créer ces liens.
Sous Office 2003, c'est assez bien expliqué.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
codebleu
Messages postés30Date d'inscriptionmardi 30 mai 2006StatutMembreDernière intervention 6 mai 2009 3 avril 2007 à 08:04
Salut,
Merci pour toutes ces infos.
Je dois donc en conclure que la solution la plus adaptée à mon besoin serait plus un logiciel type VB 2005 qui devrait permettre de créer des dll et des xml pour pouvoir communiquer entre projets.
Je ne connais que superficiellement VB2005 mais ayant vu une démo j'ai cru comprendre qu'on pouvait avoir des liens avec SDL Server. Et créer des dll pour les calculs dont j'ai besoin.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 3 avril 2007 à 08:12
Pourquoi ne pas faire une petite classe d'écriture / lecture de valeur dans un *.txt ?
T'inclues cette classe dans tes 2 macros complémentaires, et quand t'as besoin, TaClass.ReadVar(tesParams), etc.. enfin un truc comme ça.
Vite fait à mettre en place.
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
codebleu
Messages postés30Date d'inscriptionmardi 30 mai 2006StatutMembreDernière intervention 6 mai 2009 3 avril 2007 à 10:44
Mortalino ta proposition est interressante, pourrais-tu détailler un peu le fonctionnement. Notamment, pour appeler les variables via le fichier texte...
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 3 avril 2007 à 21:31
Oui, bien sûr,
tes types sont donc cela :
Public Type MaVariable
MaSousVar1 as Double
MaSousVar2 as Double
MonAutreVar as String
End Type
Tu peux les reprendres différemment dans une classe :
Pour l'exemple, crée un nouveau Module de Classe, nomme le MaClasse et colle ce code :
Private CheminFicherDeStockage As String
Function ReadVar(ByRef Valeur1 As Double, ByRef Valeur2 As Double, ByRef AutreValeur As String) As Boolean
Dim ff As Integer
Dim temp As String
Dim tempLine() As String
WriteVar = True
Erase tempLine
MyEnd:
End Function
Function WriteVar(ByRef Valeur1 As Double, ByRef Valeur2 As Double, ByRef AutreValeur As String) As Boolean
Dim ff As Integer
Dim temp As String
Dim tempLine() As String
Ensuite quand tu as besoins de récupérer tes valeurs, il suffit de lire (n'oublie pas aussi d'écrire dès que tes valeurs sont modifiées d'une macro ou de l'autre :
Sub test_Ecriture()
Dim Imp_Export As New MaClasse
Dim TaVar1 As Double: TaVar1 = 123.123
Dim TaVar2 As Double: TaVar2 = 456.456
Dim TaVar3 As String: TaVar3 = "salut"
codebleu
Messages postés30Date d'inscriptionmardi 30 mai 2006StatutMembreDernière intervention 6 mai 2009 5 avril 2007 à 18:36
Merci Mortalino,
Ton code fonctionne effectivement bien ! (Il faut quand même corriger dans la fonction
ReadVar() ou WriteVar =
True
doit être ReadVar). Ceci dit, je n'aurais pas de communication dynamique de variables multiples entre classeurs portant des macros (.xla). Il faudra que j'enregistre le fichier ".txt" et j'ouvre... Mais c'est une façon de fonctionner possible!
Ce que je recherche vraiment c'est pouvoir passer des paramètres et avoir en retour d'autres paramètres sans passer par du stockage dans un fichier.
C'est pourquoi je pense aux librairies type ".dll", mais on ne peut pas les créer en vba me semble-t-il. Et je ne sais pas si en VB2005 on peut le faire ?
Si quelqu'un le sait cela m'intéresse beaucoup !
Est-ce qu'il faut aller voir dans d'autres thèmes de forum ?