utiliser un resultat provenant d'un autre sub

  • Initiateur de la discussion Reeaz
  • Date de début
R

Reeaz

Guest
Bonjour,

Voici mon code:

Public Sub essai()


x = Selection
x = Replace(x, " ", "")
x = Replace(x, "Days", "D")
x = Replace(x, "Weeks", "W")
x = Replace(x, "Months", "M")
x = Replace(x, "Years", "Y")
x = Replace(x, "Day", "D")
x = Replace(x, "Week", "W")
x = Replace(x, "Month", "M")
x = Replace(x, "Year", "Y")

x = Replace(x, "D", "D ")
x = Replace(x, "W", "W ")
x = Replace(x, "M", "M ")
x = Replace(x, "Y", "Y ")

tab1 = Split(x, " ")
resultat = 0
For b = 0 To UBound(tab1) - 1
x1 = tab1(b)
val1 = Mid(x1, 1, Len(x1) - 1)
unit1 = Right(x1, 1)
Select Case unit1
Case "D": x2 = Val(val1)
Case "W": x2 = Val(val1) * 7
Case "M": x2 = Val(val1) * 30
Case "Y": x2 = Val(val1) * 361
End Select
resultat = resultat + x2
Next b

resul = MsgBox("voila le resultat: " & resultat, vbInformation, "Test")

End Sub


Globalement, ce programme me retourne "resultat"
Je voudrai exploiter ce resultat dans une autre procedure voire un autre module, comment faire?

Merci beaucoup!!
 
A

Alain

Guest
Bonjour,

Il faut que tu déclares ta variable Resultat en Public

Public Resultat

Public Sub essai()


x = Selection
x = Replace(x, " ", "")
x = Replace(x, "Days", "D")
x = Replace(x, "Weeks", "W")
x = Replace(x, "Months", "M")
x = Replace(x, "Years", "Y")
x = Replace(x, "Day", "D")
x = Replace(x, "Week", "W")
etc...
...
resultat = resultat + x2
Next b

resul = MsgBox("voila le resultat: " & resultat, vbInformation, "Test")

End Sub

Ainsi elle sera utilisable dans tous les modules de ton projet, sinon, si tu ne la déclares pas, elle ne sera connue que dans le module où tu l'utilises.

Bon courage.
 
M

Max

Guest
Salut,

Ta variable resultat ne peut pas transmettre sa valeur à une autre procédure. C'est là qu'est la différence entre une procédure (sub) et une fonction (function).

La première effectue une serie d'oppération mais ne renvoie pas de valeur.
La seconde, en revanche permet de renvoyer la valeur d'une variable, utilisable dans une autre procédure sub d'un autre module.

Remplace "sub()" par "function test()"

et mets ceci juste avant end function:
test=resultat

Ta fonction test se verra affectée de la valeur de la variable résultat.
Ensuite dans une procédure sub, mets:

Variable=test (On affecte à variable la valeur de la fonction test, cad la valeur de la variable resultat.

Eh voilà comment on se sert des fonction. Tu peux même leurs passer des arguments si tu veux.
 
M

Max

Guest
A propos du message d'Alain:

je crois que déclarer ta variable resultat comme public (ce qui est déjà le cas par défaut) te permet uniquement de ne pas déclarer cette variable dans toutes tes procédures si tu t'en sert à chaque fois.

Mais elle perdra sa valeur à la fin de ta procédure "essai". J'en suis pratiquement sûr, mais je suis encore novice alors...

Enfin essai, tu verras bien. Tiens nous au courrant.
 
M

mjp

Guest
salut c JP,

pour utiliser Resultat dans tout le projet :
en haut de la page de code

Option explicite
Public Resultat as ..... (type de variable) ... string , variant...

Maintenant Resultat est connu de tout le projet !!!

-----------------------
autre solution :
transformer sub essai() en function essai()

Public Function essais()

'avec pour retour NomFonction = Variable à transmettre
essai = Resultat

end Function

si pas de Public ...
on utilise : MaCellule = NomModule.NomFonction( x )

@+ JP
 
A

Alain

Guest
Bonjour,

Juste quelques lignes pour montrer qu'il faut déclarer la variable Public

Public Resultat
Sub essai1()
For i = 1 To 15
Resultat = Resultat + i
Next i
Essai2
End Sub
Sub Essai2()
MsgBox Resultat
End Sub

Si on enlève la 1ère ligne, rien ne s'affiche, sinon, le résultat s'affiche bien.

@+.
 
J

Jon

Guest
sub demo
msgbox resultat
end sub

function resultat

x = Selection
x = Replace(x, " ", "")
x = Replace(x, "Days", "D")
x = Replace(x, "Weeks", "W")
x = Replace(x, "Months", "M")
x = Replace(x, "Years", "Y")
x = Replace(x, "Day", "D")
x = Replace(x, "Week", "W")
x = Replace(x, "Month", "M")
x = Replace(x, "Year", "Y")

x = Replace(x, "D", "D ")
x = Replace(x, "W", "W ")
x = Replace(x, "M", "M ")
x = Replace(x, "Y", "Y ")

tab1 = Split(x, " ")
resultat = 0
For b = 0 To UBound(tab1) - 1
x1 = tab1(b)
val1 = Mid(x1, 1, Len(x1) - 1)
unit1 = Right(x1, 1)
Select Case unit1
Case "D": x2 = Val(val1)
Case "W": x2 = Val(val1) * 7
Case "M": x2 = Val(val1) * 30
Case "Y": x2 = Val(val1) * 361
End Select
resultat = resultat + x2
Next b

'resul = MsgBox("voila le resultat: " & resultat, vbInformation, "Test")

End function
 

Discussions similaires

Réponses
9
Affichages
895

Statistiques des forums

Discussions
312 329
Messages
2 087 335
Membres
103 520
dernier inscrit
Azise