Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/06/2007, 22h44   #1
Invité régulier
 
Inscription : novembre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 28
Points : 8
Points : 8
Par défaut Goto vers une procédure totalement lisible

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)
sechanbask est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2007, 22h52   #2
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
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 !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 08h31   #3
Invité régulier
 
Inscription : novembre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 28
Points : 8
Points : 8
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...
sechanbask est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 09h39   #4
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
on peut toujours router une fonction comme on veut

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
Function saut(autreparam As Integer, Optional ou As Variant) As Variant
Dim tempo As Integer
tempo = autreparam + 1
If Not IsMissing(ou) Then
   Select Case ou
   Case 1
   GoTo lab1
   Case 2
   GoTo lab2
   End Select
End If
tempo = autreparam + 1
lab1:
tempo = tempo + 3
lab2:
tempo = tempo + 5
saut = tempo
End Function
évidemment c'est assez imbuvable
__________________
Elle est pas belle la vie ?
random est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 10h43   #5
Invité régulier
 
Inscription : novembre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 28
Points : 8
Points : 8
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...
sechanbask est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 13h27   #6
Invité régulier
 
Inscription : novembre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 28
Points : 8
Points : 8
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é...
sechanbask est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 20h42   #7
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Citation:
Envoyé par sechanbask
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é...
Pour l'instant, pour moi, le problème c'est ni le VBA ni quoi que ce soit d'autre que tes explications :s
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 !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 21h09   #8
Invité régulier
 
Inscription : novembre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 28
Points : 8
Points : 8
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.
sechanbask est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 22h45   #9
Modérateur
 
Avatar de mout1234
 
Inscription : novembre 2006
Messages : 2 200
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2006
Messages : 2 200
Points : 2 699
Points : 2 699
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
mout1234 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 22h57   #10
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Citation:
Envoyé par sechanbask
Faut pas s'énerver!
Je ne m'énerve pas !
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:
Envoyé par sechanbask
J'ai appris la programmation sur le tas
OK.
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:
Envoyé par sechanbask
alors si tu n'arrives pas à lire le code alors que j'ai mis des commentaires...
il est complet, ou pas ?
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:
Envoyé par sechanbask
Hydrau puis eauchaude/eauglacee ou température constante.
Donc, HYDRAU est la première procédure qui est lancée.
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:
Envoyé par sechanbask
C'est une MIS EN ABÎME avec une sortie.
C'est quoi une mise en abime.
Un truc très clair pour toi, spécialiste dans ton damine, mais pas pour moi !
Le fameux souci de la communication

Citation:
Envoyé par sechanbask
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.
Oui, c'est du VBA, mais manifestement pas assez complet pourêtre compréhensible...
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 !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 18h22   #11
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
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... mais ton Goto Hydrau, dans la fonction Eau Glacée... ce ne serait pas la procédure Hydrau que tu veux relancer ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h33.


 
 
 
 
Partenaires

Hébergement Web