Pagodvd
Messages postés13Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention15 juin 2008
-
10 août 2007 à 12:42
Pagodvd
Messages postés13Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention15 juin 2008
-
11 août 2007 à 15:51
Bonjour,
j'aimerais un éclaircissement sur la différence entre Sub et Function
je suis en train de lire un livre ou il est expliqué en gros que Sub sert à effectuer une tâche genre ouvrir excel , travaillé une mise en forme, traité une msgbox, mais ne revoie pas de valeur,
pour Function il est expliqué que l'on retourne une valeur.
plus loin ds ce bouquin on voit que Function peut ouvrir un formulaire ce que je ne comprends pas c'est que pour ouvrir un formulaire je ferrais une Sub, alors qu'il est dit que Function renvoie une valeur
J'ai moi même fais un petit programme ou j'utilise une sub ou je passe ex 2 critères en entrée, je fais un calcul et je ressort 2 autres critère
exemple
appelle de procédure
call Calculheure ( HD as date, HA as date, Cal1 as date, cal2 as date) '*** HD et HA paramètre en entrée Cal1 et Cal2 paramètre en sortie ,valeur calculée
la procédure
Sub Calculheure ( Hdep as date, Harr as date, Calcul1 as date, calcul2 as date)
et sa marche pourtant je n'ai pas utilisé Function, alors ma façon de faire ne devrait pas être juste.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 10 août 2007 à 13:28
Une sub, ce n'est qu'une fonction sans valeur de retour : tout ce que tu peux faire avec une sub, tu peux le faire avec une function, et inversement. Après c'est à toi de juger qu'est-ce qui est le plus simple à comprendre pour l'utilisateur du code (si tu fais des librairies).
Renvoyer des valeurs comme tu le fait, c'est ce qu'on appelle le passage par référence. C'est un système assez dangeureux qui consiste à passer à la fonction le pointeur de la variable et non son contenu. Du coup, si tu modifie cette variable dans le corps de la function, la variable d'origine (celle dont tu passe le pointeur lors de l'appel) garde la valeur modifiée, ce qui est dangeureux si c'est un effet indésirable (difficile à debuguer !!!).
Le mieux étant de toujours renvoyer les valeurs par retour de fonction, en renvoyant des structures (Type) ou des objets (Class) si nécessaire.
En fait, l'intérêt du passage par référence réside dans le passage de "grosses" variables : le passage par valeurs oblige à faire une copie de la variable d'origine, ce qui peut être problèmatique pour des objets qui prennent beaucoup de mémoire (des tableaux ou des collections par exemples), d'où l'utilisation du passage par référence pour ces objets assez encombrants.
Pagodvd
Messages postés13Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention15 juin 2008 10 août 2007 à 17:11
Merci pour la réponse.,
dois-je modifier toute mes sub et remplacer par Function, car j'ai besoin d' envoyé à ma sous-procédure plusieurs valeurs et d'en recevoir aussi plusieurs en retour
pour les fonctions ce que j'ai compris c'est que exemple Function calcul ( a as Integer, b as integer)
paramètre de valeurs en entrée : a et b et en sortie le résultat est stocké dans calcul
donc je n'obtiens qu'une seule valeurs calculée en sortie
ce que j'ai fait dans ma fonction plus haut c'est que HD respectivement HDep et HA respectivement Harr sont uniquement dédié au rôle d'envoé les valeurs dans la sous procédure
et Cal1,Cal2 Calcul1 et Calcul2 ne font que retourner la valeur calculée comme ceci je ne devrait pas avoir de problème
Dans ton message tu mets....
Le mieux étant de toujours renvoyer les valeurs par retour de fonction, en renvoyant des structures (Type) ou des objets (Class) si nécessaire.