Sous programmes sous VBS [Résolu]

Messages postés
39
Date d'inscription
mercredi 9 mai 2012
Dernière intervention
9 juillet 2012
- - Dernière réponse : belouniss
Messages postés
39
Date d'inscription
mercredi 9 mai 2012
Dernière intervention
9 juillet 2012
- 28 mai 2012 à 22:57
Bonjour!

j'ai programmer plusieurs étapes d'automatisation d'un instrument. maitenant j'aimerais pouvoir les fusionner pour avoir un seul script qui contiendrait toutes les étapes! pouriez vous me guider un peus je suis trés novice, je sais que l'on peut fair des sous programmes avec sub-end sub et tout mais j'ai pas bien compris, car par éxemple j'aimerais juste utiliser le résultat trouvé à l'étape2 dans l'étape3 ensuite continuer l'étape4 ainsi de suite

Merci pour vos orientations!
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
26
3
Merci
Oui !!!

Fais tes tests et si erreur(s), nous te corrigerons.

Important dans un developpement:
- Mettre Option Explicit;
- Mettre un msgbox sous chaque Function (ou Sub) pour contrôler les variables.


Const ....
Dim ....
Set ....

Call MyFunction1(var1,var2)

Function MyFunction1(var1,var2)
....
call MySub1(arg1)
call MyFunction2(arg1,False)
....
End function

Sub MySub1(arg1)
....
End Sub 

Function MyFunction2(arg1,arg2)
....
call MyFunction3(....)
End Function



L'une des documentation vbs téléchargeable est "SCRIPT56".

jean-marc

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_JMO
Messages postés
5860
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 mars 2019
79
0
Merci
Bonjour,
C'est très simple:

Sub etape2()
'ton code
End Sub

Pour l'appeler dans ton etape3:
etape2()

c'est tout et ainsi de suite pour toutes les étapes
@+Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
26
0
Merci
 Bonjour,

Exemple:

Option Explicit
Const cstDate = "15/05/2012"
Const cstNumber = 10
Dim MyDate, MyNumber

Main

Sub Main
    Call ModifDate("+2",MyDate)
    Call ShowNewDate("+3", MyDate)
    MsgBox MyDate,,"Main -> ShowNewDate + 3 années"
    MsgBox MyNumber
End Sub 

Function ModifDate(ArgDate, MyDate)
    MyDate = DateAdd("d",ArgDate, cstDate)
    MsgBox MyDate,,"ModifDate -> cstDate + 2 jours"
    ModifDate = MyDate 
End Function

Function ShowNewDate(ArgDate, MyDate)
   MyDate = DateAdd("m",ArgDate, MyDate)
   MsgBox MyDate,,"ShowNewDate -> ModifDate + 3 mois"
   MyDate = DateAdd("yyyy",ArgDate, MyDate)
   MyNumber = cstNumber + 5
   ShowNewDate = MyDate
   ShowNewDate = MyNumber
End Function 




jean-marc
Commenter la réponse de cs_JMO
Messages postés
39
Date d'inscription
mercredi 9 mai 2012
Dernière intervention
9 juillet 2012
0
Merci
Merci bcp,
mais si par exemple dans Function ShowNewDate(ArgDate, MyDate) javais besoin du resultat doné par Function ModifDate(ArgDate,MyDate)
? je l'appel de la même maniére?
genrs
pour ma part:
Option Explicit

Dim tmpsAcq 
Dim tmpsZ 
const r=0.2
Main

 Sub Main
    Call etape1
    Call etape2

 End Sub 

Function etape1
    tmpsAcq  = tmpsRef*(500/r*2)
   etape1 = tmpsAcq 
End Function

Function etape2
tmpsZ=tempsAcq*05 'c'est justement lâ mon prblem comment appler tmpAcq?  
End Function 

Commenter la réponse de belouniss
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
26
0
Merci
Re Bonjour,


Ta variable tmpsRef n'est pas définie.





Option Explicit

Dim tmpsAcq 
Dim tmpsZ 
const r=0.2
Main

 Sub Main
    Call etape1
    Call etape2(tmpsAcq)
     MsgBox tmpsZ
 End Sub 

Function etape1()
   Dim tmpsRef
   tmpsRef = 2
   tmpsAcq  = tmpsRef*(500/r*2)
   etape1 = tmpsAcq 
End Function

Function etape2(tmpsAcq)
MsgBox tmpsAcq,,"contrôle var tmpsAcq"
tmpsZ=tmpsAcq*05 'c'est justement lâ mon prblem comment appler tmpAcq?  
etape2 = tmpsZ
End Function 

jean-marc
Commenter la réponse de cs_JMO
Messages postés
39
Date d'inscription
mercredi 9 mai 2012
Dernière intervention
9 juillet 2012
0
Merci
Merci infiniment jean-marc!

ai-je le droit de mettre des functions dans une function???
genrs:
Functionetape1()
instruction
instruction
...
...
Function Integral()
......
......
......
end function
instruction
instruction
......
......
end function
Commenter la réponse de belouniss
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Dernière intervention
12 juin 2012
5
0
Merci
Bonjour belouniss, bonjour JMO,

en VBS, en fait... non, la question aurait pu être "déclarer des fonctions dans des fonctions" ce qui est différent de "appeler des fonctions dans des fonctions".

En Pascal (ou turbo) je crois que c'est possible, en VB.net (FW 4.0), il faut utiliser des expressions lambda.

Mais dans ton cas, je ne suis pas sûr que cela ne complique pas la construction (ça va un peu à l'encontre de la "globalisation" des variables ou de la modélisation orientée objet.

Il n'est pas impossible d'utiliser des classes en VBS (et là, ça va dans le bon sens).
rvblogn
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!
Commenter la réponse de rvblog
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
26
0
Merci
Bonsoir le Forum,
 
Bonsoir rvblog,

Merci de m'avoir corriger ! Oui -> Non
L'exemple pré-cité permettra à belouniss de comprendre le voyage de variables entre function et/ou sub.


jean-marc
Commenter la réponse de cs_JMO
Messages postés
39
Date d'inscription
mercredi 9 mai 2012
Dernière intervention
9 juillet 2012
0
Merci
Merci infiniment pour toutes vos réponses, vous m'avez beaucoup aidé
Commenter la réponse de belouniss
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Dernière intervention
12 juin 2012
5
0
Merci
rvblogn
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!
Commenter la réponse de rvblog
Messages postés
39
Date d'inscription
mercredi 9 mai 2012
Dernière intervention
9 juillet 2012
0
Merci
Encore une question concernant les sous programmes VBS.
Option Explicit

Dim tmpsAcq 
Dim tmpsZ 
const r=0.2
 const tmpsRef = 2 'puis je les declarés içi alors q je vais les utilisé dans sub etapé?
  const tempselem=60
Main

 Sub Main
    Call etape1
    Call etape2(tmpsAcq)
     MsgBox tmpsZ
 End Sub 

Function etape1()
   Dim tmpsRef
   Dim tempselem
   tmpsRef = 2
   tempselem=60
   tmpsAcq  = tmpsRef*(500/r*2)
   etape1 = tmpsAcq 
End Function

Function etape2(tmpsAcq)
MsgBox tmpsAcq,,"contrôle var tmpsAcq"
tmpsZ=tmpsAcq*05  
etape2 = tmpsZ
End Function 

Est ce possible de mettre tout les paramètres de tous les sous programmes avant mon Main()
car j'aimerais que l'utilisateur puisse rentrer tout les paramètres qu'il choisi sans qu'il ai à chercher ou les mettre dans les sous prgrms! c'est possible?
Merci à vous tous
Commenter la réponse de belouniss
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
26
0
Merci
 Bonsoir,

Attention: tmpsRef est défini 2 fois (Constante et variable) donc erreur.



Option Explicit
Const r=0.2 
Const tmpsRef = 2
Const tempselem=60
Dim tmpsAcq,tmpsZ 

Call etape1
MsgBox tmpsZ

Function etape1()
   tmpsAcq  = tmpsRef*(500/r*2)
   Call etape2(tmpsAcq)
End Function

Function etape2(tmpsAcq)
   tmpsZ=tmpsAcq*05 
   etape2 = tmpsZ 
End Function 




ce qui correspond à


Option Explicit
Const r=0.2 
Const tmpsRef = 2

MsgBox tmpsRef*(500/r*2)*5




la variable tempselem est initialisée, mais non utilisée.

jean-marc
Commenter la réponse de cs_JMO
Messages postés
39
Date d'inscription
mercredi 9 mai 2012
Dernière intervention
9 juillet 2012
0
Merci
Mercci JM!
mon prgram est un peu plus cmpliqué! aufait c un robot qui doit fair des deplacements
en x et en y et durant ces deplacement il doit fair certain calculs qui sont mes fonctions.
les deplacements y'a des grand pas en X et des grand pas en Y mais aussi des sous deplacements en x et en y
et c'est lors de ces grand pas que je fait appele aux fonctions etape1() etape2() et etape3()en gros c ça:
'#########################################################
'             PARAMETRES SYSTEME
'#########################################################

Dim X
Dim Xdp
Dim Ydp
Dim Y
Dim Z
Dim Z0
Dim Zn
Dim X0
Dim Y0
Dim delta_x
Dim delta_y
Dim delta_z
'#########################################################
'          INITIALISATION DES PARAMETRES SYSTEME
'#########################################################
 
 
 call deplacement()
 
 ' ***************************************************etape1**************
Function Etape1()
Dim t_Ref
Dim MaxIndice
Dim TableauIntensite
Dim flag
Dim tacq
Dim t_Ref_r
DIM Correction_factor

'#########################################################
'#########################################################
'       INITIALISATION DES PARAMETRES UTILISATEURS
'#########################################################

delta_x=20 
t_Ref=5 
Correction_factor = 0.75 

X=0 
flag=1 
'#########################################################
'#########################################################

Do
  
  
  
    ''lâ le rebor recoit un tableau de données 

    MaxIndice=0
    for i = 0 To UBound(TableauIntensite)
         If TableauIntensite(i)>TableauIntensite(MaxIndice) Then
            MaxIndice=i        
         End If
    Next  
    MaxIntensite=TableauIntensite(MaxIndice)
    
   

    If MaxIntensite<5 then
        flag=0
    Else 
        t_Ref=t_Ref*Correction_factor
        X= X+delta_x
    End if
         
Loop Until flag=0


tacq= t_Ref/MaxIntensite
etape1=tacq
End Function
                              
sub etape2()

  Dim TabIntgral()
  Dim TabIntensite()
  Dim MaxIndiceSum
  Dim Temps_profil_Z
  Dim sumZ
  Dim Zstep
  Dim Z0
  Dim Zn
 
'#########################################################
'#########################################################
'       INITIALISATION DES PARAMETRES UTILISATEURS
'#########################################################
delta_x=10
delta_z=1
X0=0
Y0=0
Z0=-2
Zn=2
Zstep=1
rtz=0.5 'Facteur du temps de profil en Z pap au temps d'acquisition

L=int(Zn-Z0)/Zstep ' (Zn-Z0)/Zstep en entier

TempsZ=etape1()*5




'#########################################################
'#########################################################

       X=X+delta_x
      
  for     i= 1 to L+1
  
          Z= Z0+(i-1)*delta_z
     
       
       acquisition des données
                
                
       
    ' Extraction des données dans un tableau TabIntensite
       
    sumZ=0     
        for j=1 to UBound(TabIntensite)
                
                sumZ=sumZ+(TabIntensite(j)-TabIntensite(1))               
        next
       
        ReDim Preserve TabIntgral(i)
         
              TabIntgral(i)= sumZ
        
  


 Next
end sub
 
'**************************************************etape3****************************

Function etape3 () 

  Dim sumPhB
  Dim N 
  Dim step_t
  Dim temps_Phb_elem
  Dim MaxIndicePhb
  Dim Tab_phb_Intensite
  Dim temps_phbl
  Dim delta_xphb
  Dim corr_tphb

'#########################################################
'#########################################################
'       INITIALISATION DES PARAMETRES UTILISATEURS
'#########################################################
temps_Phblnchmn_elem= 5
step_p=1000
N= Int (temps_Phblnchmn_elem/step_p
corr_tphb=200
Increment_phb=0.95 
Seuil_phb=0.8 
flag=0
delta_xphb=10

Do  
    X=X+delta_Xphb
    
    For t=1 to N
     
 
   ' Extraction des donnees  dans un tableau "Tab_phb_Intensite"
         
  
         sumPhB=0    
  
         for j=1 to UBound(Tab_phb_Intensite)  '
                
           sumPhB=sumPhB+Tab_phb_Intensite(j)   
              
         next
       

      ReDim Preserve Tab_Phb_Intgral(t)
        
      Tab_Phb_Intgral(t)= sumPhB
  
    Next
    
   ee=UBound( Tab_Phb_Intgral)
  
      
   a= Tab_Phb_Intgral(ee-1)      
   b= Tab_Phb_Intgral(ee)     
   
   test= b/a

 

  etape3()=test

end Function

'**************************************************************deplacement**********************************************************

sub deplacement()

Dim Xx
Dim ii
Dim jj
Dim kk
Dim Nx
Dim Ny
Dim Nxx
Dim NXy
'#########################################################
'       INITIALISATION DES PARAMETRES UTILISATEURS
'#########################################################
Xx =0
X0 =0
Y0 =0
Nx =3 
Ny =2 
Nxx=2 
NXy=2 
delta_x = 7000'grand X
delta_xx= 100
delta_Xy= 100
delta_y = 7000 'grand Y

for ii = 1 to Ny
    Y= Y0+(ii-1)*delta_y
    
    call etape2()
    call etape3()
    
            for     jj = 1 to Nx
            X= X0+(jj-1)*delta_x
    
    call etape2()
    call etape3() 
                 
                 for kk = 1 to Nxx
                  Xx= X+(kk-1)*delta_xx +delta_x 
               
                
            for ky = 1 to NXy
                  Xy= Y+(ky-1)*delta_Xy+delta_Xy  
                

                
        
                'acquisition des données
               
        next
                next
            next
next
end sub




ca c en gros mon prgrm, il marche assez bien sauf que il n'a pas l'air de faire appelle aux sous prgm etape2 et etap3 lors des deplacements que je veux grand x et grand Y

en plus j'aimerais mettre tout les parametres utilisateur au tout debut et non dans les sous prgrms. et mon Main c deplacement() qui fait appel à toutes les autres etapes!
Commenter la réponse de belouniss

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.