Appel d'API en laissant la main à l'utilisateur

Appel d'API en laissant la main à l'utilisateur - VB/VBA/VBS - Programmation

Marsh Posté le 09-09-2003 à 11:11:05    

Bonjour à tous,
 
Pour une appli en VBA sous Excel permettant de lancer des traitements (sur des cubes Essbase pour info), je fais appel à l'API fourni par Hyperion. Tout fonctionne sans problème, sauf que les traitements étant particulièrement long j'aimerai que les utilisateurs puissent garder la main alors que pour l'instant Excel est en attente de l'API et empêche tout travail sous Excel que ce soit sur le fichier avec le script VBA ou sur tout autre fichier.
Actuellement mon code :

Code :
  1. ' Affichage de la fenêtre de traitement et du curseur en forme de sablier
  2.         Form_Traitement.Show (vbModeless)
  3.         Application.Cursor = xlWait
  4.        
  5.         ' Appel de l'API simplifiée
  6.         Call Esb_ModifierValeurVariable("Phase_Source", Trim(CB_PhaseSource.Value))
  7. ' On efface la fenêtre et on remet le curseur par défaut
  8.         Form_Traitement.Hide
  9.         Application.Cursor = xlDefault


l'API simplifiée sont des fonctions que j'ai créé qui regroupe des commandes de l'API. Par exemple ici ModifierValeurVariable :

Code :
  1. Public Sub Esb_ModifierValeurVariable(ByVal nom_Variable As String, ByVal valeur_Variable As String)
  2. ' Modifie la valeur d'une variable de substitution à partir de son nom et de de la valeur que l'on souhaite lui donner en paramètres (2 string)
  3.     Dim sts As Long
  4.     Dim oVariable As ESB_VARIABLE_T
  5.     '  On indique le serveur (l'application et la base ne sont pas renseignées car variables globales au projet)
  6.     oVariable.Server = nom_serveur
  7.     ' On affecte à la variable "nom_variable", la valeur donnée (valeur_Variable)
  8.     oVariable.VarName = nom_Variable
  9.     oVariable.VarValue = valeur_Variable
  10.     sts = EsbCreateVariable(apihctx, oVariable)
  11. End Sub


Mais bon ceci ne doit pas avoir d'importance ici je pense.
 
Pour info, tout le traitement a lieu sur le serveur donc le poste client est à 0% au niveau charge processeur, il n'y a donc aucun soucis de ce côté là. J'ai pensé à mettre des DoEvents le problème étant que c une ligne unique ("sts = EsbCreateVariable(apihctx, oVariable)" dans l'exemple ci-dessus) sur laquelle il bloque.
 
Voila si vous pouviez m'aiquiller vers la bonne direction, je vous en serais bien reconnaissant !
Merci !

Reply

Marsh Posté le 09-09-2003 à 11:11:05   

Reply

Marsh Posté le 10-09-2003 à 09:08:18    

Mets le traitement dans un thread


Message édité par Poipoi le 10-09-2003 à 10:07:10

---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 10-09-2003 à 10:05:16    

Le problème est que le multithreading en VB, même par les API n'est pas un modèle de fiabilité...

Reply

Marsh Posté le 10-09-2003 à 10:07:43    

Kyle_Katarn a écrit :

Le problème est que le multithreading en VB, même par les API n'est pas un modèle de fiabilité...


Comme tout ce qui est en VB
 
de toute façon c'est le seul moyen....


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 10-09-2003 à 10:33:17    

Poipoi a écrit :


Comme tout ce qui est en VB
 
de toute façon c'est le seul moyen....


 
Faux. Un DoEvents bien placé (en fin de traitement DANS la boucle) permet de laisser la main à windows.

Reply

Marsh Posté le 10-09-2003 à 10:38:57    

karlkox a écrit :


 
Faux. Un DoEvents bien placé (en fin de traitement DANS la boucle) permet de laisser la main à windows.


quand C une API qui fait le traitement ? :heink:  
DTC


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 10-09-2003 à 11:26:55    

j'ai répondu un peu trop vite, j'avais pas lu la deuxième partie de son problème ... :sarcastic:

Reply

Marsh Posté le 10-09-2003 à 19:29:46    

OK merci pour les réponses...
Donc à priori c le thread la solution, par contre c relativement facile à mettre en oeuvre ou c plutôt galère ? J'ai des pbs de temps et j'ai pas envie de me lancer dans une aventure sans fin !

Citation :

Le problème est que le multithreading en VB, même par les API n'est pas un modèle de fiabilité...


C cool ça met en confiance ! :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed