Daydayer
Messages postés201Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention13 août 2005
-
23 mai 2005 à 10:33
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 2009
-
23 mai 2005 à 19:37
bonjour!
qqn pourrait-il m'expliquer la différence entre une 'sub' et une fonction? il me semble que c'est au niveau de ce qu'elles renvoient et de leur appel, mais je ne sais plus...
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention 7 juin 20097 23 mai 2005 à 11:06
Effectivement, une Sub est une procédure et donc ne renvoie rien
Une fonction (Function) renvoie quelque chose (valeur ou objet)
Ex:
'Procédure
Public Sub maSub1(a_Text As String)
MsgBox a_Text
End Sub
'Fonction renvoyant un entier
Public Function maFonc1(a_Val As Integer) As Integer
maFonc1 = a_Val * 2
End Function
'Fonctin renvoyant une chaine
Public Function maFonc2(a_Text As String, a_Val As Integer) As String
maFonc2 = a_Text & " : " & a_Val
End Function
'Fonction renvoyant un objet
Public Function maFonc3(a_Text As String, a_Val As Integer) As Object
Dim l_test As New Form
Set maFonc3 = l_test
End Function
'Fonctin renvoyant un Variant (c'est à dire n'importe quel type de donnée
Public Function maFonc4(a_Text As String, a_Val As Integer)
Dim l_test As New Form
Select Case a_Val
Case 0
'Renvoie un entier
maFonc4 = 1
Case 1
'Renvoie une chaine
maFonc4 = a_Text
Case 2
'Renvoie un objet
Set maFonc4 = l_test
End Select
End Function
Public Sub test()
Dim a As Object
Dim li_Value As Integer
Dim ls_Val As String
Dim lv_test As Variant
maSub1 "Coucou"
Call maSub1("Coucou")
'Appels de fonction dont on ne récupère pas la valeur (ce qui ne sert à rien dans cet exemple)
maFonc1 2
Call maFonc1(2)
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 23 mai 2005 à 19:37
Salut :O)
En effet une sub ne retourne pas d'information mais n'oublions pas qu'en passant un argument par référence, une sub peut modifier le contenu d'une variable locale. Pour rappel, VB passe par défaut tous ses arguments par référence. ByVal devrait être explicitment utilisé à chaque fois que ByRef n'est pas nécessaire. Histoire d 'être logique et 'propre'.
Exemple :
Private Sub Command1_Click()
Dim toto As Long
toto = 1
Call MySub(toto)
'Toto vaut 2 puisque la valeur 1 lui a été ajouté dans la sub MySub
MsgBox toto
End Sub
Private Sub MySub(ByRef Parametre As Long)
'La variable Parametre pointe sur la variable toto. Parametre et toto sont une seule et unique variable.
'Toto vaut 1 à ce stade. Toto aura comme valeur 2 après l'exécution de la ligne ci-dessous.
Parametre = Parametre + 1