Existe-t-il un moyen pour renvoyer plusieurs variables (2 dans mons cas) en sortie d'une fonction?
Existe-t-il un moyen pour renvoyer plusieurs variables (2 dans mons cas) en sortie d'une fonction?
Une fonction ne peut renvoyer qu'une seule valeur. Par contre, elle peut modifier les parametres en entrée s'il sont passé par référence.
Ca veut dire qu'une variable placer en variable d'entrée d'une fonction peut etre modifie et cette modification sera automatiquement prise en compte dans la fonction principale?
Ou peut etre il y a-t-il une méthode auquel cas peux tu la préciser?
Bonjour,
ou encore : définis une structure et type la valeur de retour de ta fonction sur cette structure.
Edit :
Voilà deux manières de s'exprimer avec une structure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Private Type titi a As String b As String c As Integer End Type Private Sub Command1_Click() MsgBox toto("français").a & vbCrLf & toto("français").b & vbCrLf & toto("français").c MsgBox toto("anglais").a & vbCrLf & toto("anglais").b & vbCrLf & toto("anglais").c End Sub Private Function toto(monparam As String) As titi If monparam = "français" Then toto.a = "bonjour" toto.b = "toi" toto.c = 1 Else toto.a = "hello" toto.b = "you" toto.c = 2 End If End Function Private Sub Command2_Click() 'ce que tu peux écrire également ainsi : Dim tata As titi tata = toto("français") MsgBox tata.a & vbCrLf & tata.b & vbCrLf & tata.c tata = toto("anglais") MsgBox tata.a & vbCrLf & tata.b & vbCrLf & tata.c End Sub
Merci a vous deux avec le ByRef, cela fonctionne.
Du coup Delbeke pense tu qu'il faille que je precise dans toutes mes fonctions les ByVal et les ByRef (quesiton de l'isibilité)
Et ta méthode ucfoutu permet des créer ses propres objets non?
Il est intéressant de préciser le ByRef ou le ByVal dans la mesure ou la dernière mouture de Vb (Vb.Net) a inversé le type de passage par défaut. Le type de passage de référence pour Vb1 à Vb6 est ByRef par défaut.
Ce que t'a montré ucfoutu est ce que l'on nomme un type de variable défini par l'utilisateur (UDT) et quoique il ressemble un peu à un objet, ce n'en est pas un. Pas de propriété, méthode ni evénement
La bonne méthode à utiliser est celle citée par Delbeke :
la plupart des functions retournées par les librairies C fonctionnent ainsi -
la valeur de retour est utilisée pour retournée le comportement de la fonction (vrai/faux ou code d'erreur).
Ce qui donne depuis la fonction d'appel un code du type
Il est bon aussi de rappeler qu'il faut perdre les mauvaises habitudes afin de rendre les codes compatibles en vue d'un éventuel portage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 MyVar1=... MyVar2=... if MyFunction(myVar1, myVar2) then ...
comme le + comme opérateur de concaténation à la place du & habituel, le typage systématique etc.
Merci a tous uen dernière question en rapport avec les Byref
Il arrive que dans mes fonctions une variable puisse porter le meme nom que dans ma fonction principale. De ce fait je ne comprend pas bien la logique qui veut que je n'ai parfois pas besoin de déclarer cette meme variable dans ma sous fonction (sous risque de bug), je ne la declare ni par reference ni a l'interieur de la sous fonction nul par quoi.
Pouvez vous m'expliquer?
Sans déclaration en début de module de «Option Explicit»
les variables sont déclarées implicitement (Variant) avec une portée liée à l'endroit où elles sont utilisées.
En utilisant Option Explicit, tu constateras que VB refuse l'exécution de code
dès qu'une seule variable n'est pas déclarée :
c'est d'autant recommandé qu'indispensable pour un portage ultérieur sous .net
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager