Call procedure (urgent)

Résolu
inge68 Messages postés 42 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 24 février 2011 - 29 juil. 2008 à 12:32
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 29 juil. 2008 à 19:11
Bonjour tout le monde, j'ai 2 procedure

Sub procedure1( )
dim a as long
a=3
call procedure2
msgbox("b=" & b & ".")     ' pareil il connait pas la valeur de b qui est declaré dans la procedure2
End

Sub procedure2( )
dim b as long
b= a +1                ' Ici il connait pas la valeur de a qui est pourtant declaré dans la procedure1
call procedure1
End

en fait quand je declare mon  coef dans une premiere procedure, ma deuxieme ne le reconnait pas.

y a t 'il un moyen pour communiquer entre les 2 procedures. ca parait simple mais j'ai galeré toute la matiné a trouver une solution

Merci d'avance

10 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
29 juil. 2008 à 12:50
Mmh, tu est un débutant toi

Il faut passer des arguments et retourner une valeur :

Sub procedure1( )
    Dim a As Long
    Dim b As Long
    a = 3
    b = Call procedure2(a)
    msgbox("b=" & b & ".")  
End

Function procedure2(a As Long) As Long
    Dim b As Long
    b = a +1               
    procedure2 = a + 1
End

Une variable déclaré dans une fonction (ou procédure) n'est accessible que dans le bloc ou elle est déclaré (que dans la fonction donc)
Sinon, tu peux déclarer des variables en dehors des fonctions.

Private a As Long
Private b As Long

Sub procedure1( )
    a = 3

    Call procedure2

    msgbox("b=" & b & ".")  

End

Sub procedure2()

    b = a +1               
End

Ceci est pour du .NET, mais ça doit être du même pour VB6:
Private = accessible que dans la classe
Friend = accessible que dans le projet
Public = accessible depuis n'importe ou (depuis un autre programme)
3
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
29 juil. 2008 à 12:51
Petite correction.

Function procedure2(a As Long) As Long
    Dim b As Long
    b = a +1               
    procedure2 = a + 1
End

devient

Function procedure2(a As Long) As Long
    Dim b As Long
    b = a +1               
    procedure2 = b
End

ou

Function procedure2(a As Long) As Long
    procedure2 = a + 1
End
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 juil. 2008 à 13:27
salut,

autre petite correction kevin ^^

Sub procedure1( )
    Dim a As Long
    Dim b As Long
    a = 3
    b = Call procedure2(a)
    msgbox("b=" & b & ".")  
End

devient

Sub procedure1( )
    Dim b As Long
    b = procedure2(3)
    msgbox "b=" & b & "."
End

(et en VB6 on passera BYVAL. contrairement à dotnet, VB6 est en BYREF par défaut)
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 juil. 2008 à 14:29
... kevin a écrit ceci : Function procedure2(a As Long) As Long

donc ta pivot devient Sub Pivot(byval C as long)

et tu appelles par Call Pivot(C)
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
inge68 Messages postés 42 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 24 février 2011
29 juil. 2008 à 13:51
Merci pour votre aide c'est vrai ça fait pas longtemps que j'ai commencé à programmer en VBA.

bonne apres midi et encore une fois merci
0
inge68 Messages postés 42 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 24 février 2011
29 juil. 2008 à 14:14
c'est toujours moi, en fait mon vrai probleme est le suivant l'exemple ci dessus etait juste un  exemple pour vous expliquer ce que je veux

j'ai deux procedure et non pas des fonctions et le probleme c'est que le coefficient commun entre les 2 et C.
la premiere : mise_en_place( )
...
Dim C as Long
       C = 5
        Do While Cells(LigneF2, ColonneF2) <> ""
              Sheets("Feuil1").Cells(LigneF1, ColonneF1).Value = Cells(LigneF2,ColonneF2).Value
              LigneF1 = LigneF1 + 1
              ColonneF2 = ColonneF2 + 4
              Call pivot
               C = C + 4
        Loop
 ......

pivot( )
.....
         For i = 1 To n      
                  Sheets("Feuil2").Cells(i, C).Value = x(i)  '(x est calculé auparavant mais c'est pas important dans à savoir)
         Next
.....

Comment je pourrais utiliser la valeur de C declaré dans la procedure mise en place dans la procedure Pivot.

Merci en core une fois
0
inge68 Messages postés 42 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 24 février 2011
29 juil. 2008 à 16:02
OK Très bien ça marche nickel merci bcp c'est super merci!!!!
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
29 juil. 2008 à 18:32
"autre petite correction

kevin ^^"

C'est plus une simplification qu'une correction Je voulais garder les variables pour bien montrer le principe    Mais je suis évidement tout à fait d'accord
On peut même faire plus court:
Sub procedure1( )
    msgbox "b=" & procedure2(3) & "."
End 

Bonne continuation inge68
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 juil. 2008 à 18:57
j'ai supprimé a par réflexe
la correction était dans le call

    b = <strike>Call</strike> procedure2(a)
noté :
   b = procedure2(3)

++ ;)
<hr size ="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
29 juil. 2008 à 19:11
Ah oui oki, j'ai rien dis
0
Rejoignez-nous