Syntaxe d'écriture

Résolu
Messages postés
345
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
21 mars 2008
-
Messages postés
189
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
19 janvier 2011
-
Bonjour,


Y'a t'il une différence entre :


MsgBox "Bonjour"


Call MsgBox("Bonjour")


Dim Retour As Long

Retour = MsgBox("Bonjour")


Dim Ret As VbMsgBoxResult

Ret = MsgBox("Bonjour")


dirrérence mémoire, rapidité ?


merci,

10 réponses

Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

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.
Messages postés
189
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
19 janvier 2011

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.
Messages postés
189
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
19 janvier 2011

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.
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
16
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...



Chris...


Web :
Firstruner
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
Salut,


pour moi le Call est totalement inutile ici, en plus c'est plus Long à écrire, et avec des parenthèses en plus ...

mais en exécution, ce sera exactement la même chose (enfin je suppose)


le type VbMsgBoxResult est le même que le Long, la preuve:

Dim Ret As VbMsgBoxResult

MsgBox TypeName(Ret)


Ret = MsgBox("Bonjour")

totalement inutile aussi, le réponse par défaut étant VbOk  ( donc Ret = 1)

Daniel
Messages postés
189
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
19 janvier 2011

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.
Messages postés
345
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
21 mars 2008
2
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 ?


salutations,
Messages postés
189
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
19 janvier 2011

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.
Messages postés
345
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
21 mars 2008
2
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..

Salutations,
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

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.