Call procedure (urgent) [Résolu]

Signaler
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011
-
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
-
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

Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
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)
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
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  
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
... 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  
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011

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
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011

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
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011

OK Très bien ça marche nickel merci bcp c'est super merci!!!!
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
"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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
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  
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Ah oui oki, j'ai rien dis