|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 28 ![]() |
J'ai besoin de faire un saut de programme d'une fonction2 vers une fonction1 mais ce saut doit atterrir vers une partie du code qui est lu en début de procédure de la fonction1. Y'a-t-il moyen de délimiter une étiquette pour que la fonction1 puisse être lue dans sa totalité lors du lancement de la macro. Car mon code est une mise en abîme paramétrable sinon je serais obligé de faire 4 macros donc 4 commandes sous autocad:
l'organigramme simplifié de la macro: Fonction1 appel vers fonction 2 Fonction2 vers ligne 3 de la fonction1 (non lu) Fonction1 ligne 3 (début de la lecture) |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() |
euh...
Sauf erreur de ma part, une fonction renvoie un résultat. Pourquoi ne pas tester le résultat pour qu'en fonction du retour de la fonction, tu exécutes telle ou telle partie du programme ?
__________________
1formaxion, une formation de qualité, des formateurs compétents Mes tutoriels et vidéos : Tableaux croisés dynamiques, Access les Bases, et les autres ! |
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 28 ![]() |
j'utilise VBA pour autocad pour dimensionner un réseau hydraulique:
je lance la fonction1 l'utilsateur choisi entre la procédure de la fonction1 (eau chaude ou paramètre du fluide) ou un paramètre qui lance la fonction 2(eau glacée) ou 3 (tempérture constante). Comme l'utilisateur doit dimensionner un réseau exemple le reseau eau glacée, je souhaite qui puisse le faire sans a avoir à rechoisir le fonction 2. Donc après le choix, j'ai la variable fluide qui passe de "" à "eauglacee". quand la fonction est finie (après le dimensionnement). Lors d'un autre lancement de la commande l'utilisateur va directement dans la fonction2 mais il faut qu'il puisse choisir de revenir à la fonction 1 eauchaude ou paramètre du fluide... je ne peux pas envoyé le code pour l'instant car il est trop long il faudrait que je supprime les choses inutiles pour que ça devienne lisible pour quelqu'un qui ne connait pas autocad... |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() Inscription : mai 2005 Messages : 3 419 ![]() |
on peut toujours router une fonction comme on veut
Code :
__________________
Elle est pas belle la vie ? |
||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 28 ![]() |
Peu importe si c'est buvable je ne compter pas boire... mdr...
Disons pour faire simple que j'ai commencé le VBA il y a très peu de temps alors je suis dépacé par ton extrait de code... cet après-midi je poserais mon code pour que tu m'aides pour l'aiguillage de mon programme... |
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 28 ![]() |
le problème c'est pas l'interaction VBA et autocad car je sais récupérer Pa mais pour aller dans la procédure 1 sans rendre la suite du programme illisible pour le lancement initial de la procédure 1 et c'est là que je coincé...
|
|
|
00
|
|
|
#7 | |
![]() ![]() ![]() |
Citation:
Tu parles de Procédure 1... Mais, c'est laquelle ? Quel est ton point d'entrée ?
__________________
1formaxion, une formation de qualité, des formateurs compétents Mes tutoriels et vidéos : Tableaux croisés dynamiques, Access les Bases, et les autres ! |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 28 ![]() |
Faut pas s'énerver! J'ai appris la programmation sur le tas alors si tu n'arrives pas à lire le code alors que j'ai mis des commentaires...
Hydrau puis eauchaude/eauglacee ou température constante. Quand l'utilisateur relance Hydrau en fonction du choix de la prémière utilisation, ça lance eauchaude s'il avait utilisé eauchaude ou eauglacee s'il avait utilisé eauglacee. C'est une MIS EN ABÎME avec une sortie. Lors de la relance je souhaite que l'utilisateur puisse vider la string fluide et qu'il revienne dans 'retour souhaité ici (voir code précédent). Comme il reste du code en dessous et lors de la première utilisation, tout le code d'HYDRAU doit être lu... je n'arrive pas à faire de saut car l'étiquette ne permet pas de lire le code... Je ne vois pas comment être plus clair mon code est là aussi pour ça. C'est du VBA certes pour autocad, mais c'est du VBA. |
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : novembre 2006 Messages : 2 200 ![]() |
Bonsoir,
Une des raisons pour laquelle il n'est pas évident de voir où tu veux en venir provient de la structure de ton programme et des méthodes utilisées. Notes que les GOTO et étiquettes associées sont certes toujours disponibles mais sont fortement déconseillées. Elles correspondent à une architecture de programmes datant des premières générations de langage et nuisent fortement à la lisibilité dans un langage doté de multiples structures de code (fonctions et procédures, if ,select, boucles,...). Je te suggère donc d'essayer de repenser l'architecture générale de ton code en oubliant les GOTO (exception faite pour la gestion d'erreur d'exécutions). En se rappelant que: - une fonction A peut appeler une Fonction B. Dans ce cas, l'exécution de A reprend sur la ligne suivant l'appel de la fonction B une fois cette dernière terminée - une fonction peut recevoir des paramètres (qui peuvent par exemple servir à déterminer quelle action mener ...) - une fonction peut retourner une valeur (on peut par exemple retourner True ou False selon que le traitement a ou non abouti) Bon courage.
__________________
............................................................................................ Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés. Les FAQs les tutos Les Sources Access Profitez de ces mines d'or... Postez dans le bon sous forum et mentionnez la version |
|
|
00
|
|
|
#10 | ||||||
![]() ![]() ![]() |
Citation:
Seulement, je constate que ce qui semble être très clair dans la tête de celui qui expose son problème, l'est beaucoup moins dès qu'il l'expose. La difficulté de la communication étant de faire passer une idée d'une tête à une autre, d'une personne à une autre. Donc, si tu veux te faire comprendre, il te faut te mettre à la place de l'autre. Citation:
Ben, c'est pas une tare : moi aussi ! Mais, par contre, il y a des points que je ne comprends pas dans ton code. Citation:
Parce que le lire ... soit ! Mais le comprendre ... :s Par exemple, tu as une variable FLUIDE. Cette variable fluide apparait dans plusieurs procédures. Mais je ne vois pas de déclaration de cette variable. Où est-elle ? D'autre part, histoire d'éclaircir ton propos, ne pourrais-tu pas proposer un logigrammeplutôt que du code, qui, sur le plan purement technique est plutôt lourd (mais, encore une fois, ceci n'est pas une tare, puisque tu débutes, et qu'on est ici pour s'entraider Citation:
Que fait cette procédure , Elle commence par afficher FLUIDE. Mais FLUIDE vient d'où ? ???????????????????????????????? Ensuite, tu lances une fonction CALQUECOURANT. Cette fonction ne renvoie rien du tout ! elle ne fait que définir une chaîne StrCalqueCourantH . Où a été déclarée cette chaine ? ???????????????????????????????? Ensuite, tu testes Fluide (dont on ne sait toujours rien) On apprend, d'après le test, que Fluide doit contenir un String Bon, soit... Si c'est EAUGLACEE => Procédure Eauglacee ====> Si choix du PA, retour à HYDRAU pour aller dans le si non ====> Si pas choix de PA, gestion d'erreur ???????? ========> Demande de saisie . si initialier ==> Goto Hydrau ???????? Si c'est TEMPERATURECONSTANTE => Procédure TemperatureConstante Si non => Saisie + Eauchaude Bref, comme tu le constate, le schema global est plutôt compris. Mais ton code, pas du tout. Pleion de trucs manquent. Comment faire que ton Goto Hydrau fonctionne, puisque tu n'as pas d'étiquette Hydrau ? Tu ne voudrais pas plutôt faire un Gosub ? Mais, d'un autre côté, pourquoi ne pas faire une fonction qui renvoie un résultat, et, en fonction du résultat te branche dans ton programme (beaucoup plus propre !) Citation:
Un truc très clair pour toi, spécialiste dans ton damine, mais pas pour moi ! Le fameux souci de la communication Citation:
ou alors, je suis vraiment une bille, ce qui est tout aussi possible. Bref... Si tu pouvais prendre autant de temps à exprimer ton problème (schémas bienvenus - logigrammes) que j'en ai pris à lire ton code, on pourrait peut-être arriver à quelque chose ! ++
__________________
1formaxion, une formation de qualité, des formateurs compétents Mes tutoriels et vidéos : Tableaux croisés dynamiques, Access les Bases, et les autres ! |
||||||
|
00
|
|
|
#11 |
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
J'ajouterai juste une chose : Pourquoi une gestion d'erreur sur le Else de Select Case fluide ? Tu peux aussi bien sortir de ce select case par Exit sub dans Case Else puisqu'aucun code n'est exécuté s'il n'y a pas d'erreur.
Et tu enchaînes select case Err.Number indépendant (précédé de l'étiquette) en cas d'erreur. Juste pour ajouter mon gain de sel Edit Mais non t'as pas tout faux... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com