Procédure et Fonction Access VBA

Pagodvd Messages postés 13 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 juin 2008 - 10 août 2007 à 12:42
Pagodvd Messages postés 13 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 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.

Merci de m'éclaircir

3 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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.
1
Pagodvd Messages postés 13 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 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.

c'est quoi ceci et ou puis-je trouver un exemple

merci
0
Pagodvd Messages postés 13 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 juin 2008
11 août 2007 à 15:51
Merci pour votre aide si quelqu'un pourrais commenter ma réponse précedente ce serrait coll
merci
0
Rejoignez-nous