cuq
Messages postés345Date d'inscriptionmardi 3 juin 2003StatutMembreDernière intervention21 mars 2008
-
10 août 2006 à 13:05
cs_thephil
Messages postés189Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention19 janvier 2011
-
11 août 2006 à 12:58
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 10 août 2006 à 16:09
Salut, oui il y a des différences mais la principale se situe d'abord au niveau de l'utilisation qu'on en fait.
MsgBox "Bonjour"
et
Call MsgBox("Bonjour")
servent à afficher un message sans attente d'un choix de l'utilsateur. Le Call est facultatif et est rarement utilisé. Reste à savoir la différence en terme de consommation ressources et rapidité entre les 2. Je pense qu'elle est minime.
Dim Retour As Long
Retour = MsgBox("Bonjour")
et
Dim Ret As VbMsgBoxResult
Ret = MsgBox("Bonjour")
Ces syntaxes ne sont pas à proprement parler fausses mais inutiles dans ce cas. On les utilise plutot comme ça :
Dim Retour As Long
Retour = MsgBox("Voulez-vous continuer ?", vbYesNo)
If Retour = vbYes Then ....
et
Dim Ret As VbMsgBoxResult
Ret = MsgBox("Voulez-vous continuer ?", vbYesNo)
If Ret = vbYes Then ...
la différence entre ces 2 syntaxes est que Retour est une variable Long et Ret une énumération des valeurs que peut retourner MsgBox donc, a priori Ret consomme plus de mémoire que Retour (quoiqu'une fois compilé, faut voir). D'un autre côté, si tu aimes bien les facilités de prog, quand tu tapes Ret =, la liste des valeurs possibles apparait et tu n'as plus qu'à choisir. Moi je préfère Dim Retour as Long.
cs_thephil
Messages postés189Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention19 janvier 2011 11 août 2006 à 12:58
en faisant les tests (en enlevant tout autre process qui pourrait retarder : réseau, antivirus ...etc), j'obtiens comme Dolphin Boy.
J'obterais pour la même conclusion.
cs_thephil
Messages postés189Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention19 janvier 2011 10 août 2006 à 14:01
je pense que le meilleur moyen de le savoir est de le mesurer ...
mais à priori je pense déjà que tes dernières solutions sont "plus gourmandes" en mémoire (même si c'est négligeable)car tu te te réserves un espace mémoire en déclarant tes variables pour stocker le retour.
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 10 août 2006 à 14:01
Salut,
à ma connaissance il n'y en a aucune, sauf entre Retour et Ret
Car Retour te donne un nombre de type Long
alors que Ret te donne un résultat de la fenêtre : OK, Annule, Yes, No, Etc...
cs_thephil
Messages postés189Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention19 janvier 2011 11 août 2006 à 08:26
he Cuq, pour ma curiosité personnelle ;-), pourquoi cette question ?
parce qui dit msgbox, dit attente d'une réponse de l'utilisateur en principe, donc pas besoin d'une rapidité de fou.
cuq
Messages postés345Date d'inscriptionmardi 3 juin 2003StatutMembreDernière intervention21 mars 20082 11 août 2006 à 09:40
Salut thephil,
Bonne remarque, en réalité j'ai pris msgbox comme exemple pour illustré
ma question et pour faire un exemple simple que tout le monde comprend.
Mais derrière cette question qui est un peu simpliste je voulais
éllargir la question à l'assemble des appels à une fonction.
En gros si l'on a pas besoin de récupérer la valeur retourné par la
fonction, est que l'on fait appel des milliers de fois à cette fonction
dans une procédure est-il préférable d'écrire la fonction seul sans
l'affectation à une variable, d'utiliser call ou de systématiquement
d'affecter le résultat.
Plusieurs me disent que le call est facultatif, voir totalement inutile
dans ce cas je pose aussi la question pourquoi avoir la fonction call :
Microsoft dit "Une fonction peut également être appelée à l'aide de l'instruction Call. Dans ce cas, la valeur de retour est ignorée."
Que veut dire ignorée ? la valsuer est simplement non prise en compte
ou les mécanisme d'affectation mémoire sont eux aussi ignorés à la
compilation donc avec un gain de temps ?
cs_thephil
Messages postés189Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention19 janvier 2011 11 août 2006 à 11:12
Ok, je vois très bien ce que tu veux dire. Pas facile alors de connaitre la réponse sans avoir le source de vb, pour savoir s'il alloue parmis les cas que tu as cité de la mémoire ou non à l'appel d'une fonction.
cuq
Messages postés345Date d'inscriptionmardi 3 juin 2003StatutMembreDernière intervention21 mars 20082 11 août 2006 à 11:15
Bon je pense que nous avons tous perdu ....
j'ai fait un petit test avec le code suivant
Private Sub Command1_Click()
Dim T1
Dim T2
Dim I As Long
Dim ret As Double
' pour comparaison de temps
'test 1
T1 = Time
For I = 1 To 900000000
retourne
Next I
T2 = Time
T1 = T2 - T1
MsgBox ("temps diff " & Format(T1, "hh:mm:ss"))
'Test 2
T1 = Time
For I = 1 To 900000000
Call retourne
Next I
T2 = Time
T1 = T2 - T1
MsgBox ("temps diff " & Format(T1, "hh:mm:ss"))
'Test 3
T1 = Time
For I = 1 To 900000000
ret = retourne
Next I
T2 = Time
T1 = T2 - T1
MsgBox ("temps diff " & Format(T1, "hh:mm:ss"))
End Sub
Function retourne() As Double
retourne = 1
End Function
Pour mesurer la différence de temps entre les trois écritures. Sur mon
PC si je test en mode console j'obtient pour les 3 écritures le même
temps à savoir 2 min 43 s. Mais en mode compilé les résultat sont
différent 2mn33 , 2mn37 et 2mn26 !!!!!!
Donc finalement et contre toute attente c'est "ret = retourne" qui est le plus rapide.
Si quelqu'un peut me confirmer les résultats et a une explication, je suis preneur..
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 11 août 2006 à 12:46
J'ai fait les mêmes tests chez moi (avec un I max 10x moindre car j'ai un super veau chez moi) et mes résultats sont différents:
En IDE, les 2 premiers tests sont équivalents et le 3ème moins rapide.
En compilé, test1 est le plus rapide et test3 le moins rapide.
Mais je crois que c'est un faux problème car j'ai fait d'autres tests avec une sub à la place de la function et ne renvoyant donc pas de valeur.
test1 et test2 aussi rapides l'un que l'autre mais plus rapide qu'avec ta function.
test3 impossible.
Conclusion, il faut utiliser la syntaxe correspondant à l'utilisation :
test1 et test2 pour des sub ou function ne retournant pas de valeur.
test3 pour les function retournant une valeur.