XL 2016 Fonction qui renvoie 2 valeurs

  • Initiateur de la discussion Initiateur de la discussion djiska
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

djiska

XLDnaute Junior
Bonjour
j'aimerai savoir comment coder une fonction qui renvoie deux valeurs.

par exemple;

Je voudrai que ma fonction reçoive 4 paramètres (x1,x2,y1,y2) et me retourne a,b que je calcule grâce aux paramètres passés

public function Deuxvaleurs(byval x1,x2,y1,y2) as double

je calcule a et b
a= ...............
b= ...........

Ma question :
si la fonction ne tournait qu'une valeur on aurait fait : Deuxvaleurs= valeur de retour
Comment faire dans le cas ou on a deux valeurs de retour , sans pour autant créer un nouveau TYPE ??

Merci
 
Bonjour
sans pour autant créer un nouveau TYPE ??
1) L'utilisation d'un type personnalisé est pourtant, en l'occurrence, ce qu'il y a de plus orthodoxe et ce : à divers titres (dont le nommage plus convivial de chacune des deux variables)
2) refuser un type personnalisé juste pour le "plaisir" de le refuser, je choisirais alors personnellement d'utiliser une simple routine en lieu et place d'une fonction et passerais par référence à cette routine mes deux variables, que je pourrais en outre nommer comme je l'entends et typer également comme je l'entends (y compris de types différents).
 
Bonjour tout le monde,
Une autre approche peut être plus simple à l'écriture est de passer le choix en paramètre :
VB:
Function Deuxvaleurs(ByVal x1#, x2#, x3#, x4#, Choix As Boolean)
If Choix = 0 Then
    Deuxvaleurs = x1 + x2 + x3 + x4
Else
    Deuxvaleurs = x1 * x2 * x3 * x4
End If
End Function
Ainsi : =Deuxvaleurs(1;2;3;4;0) renvoie 10
et =Deuxvaleurs(1;2;3;4;1) renvoie 24
 
Bonjour tout le monde,
Une autre approche peut être plus simple à l'écriture est de passer le choix en paramètre :
VB:
Function Deuxvaleurs(ByVal x1#, x2#, x3#, x4#, Choix As Boolean)
If Choix = 0 Then
    Deuxvaleurs = x1 + x2 + x3 + x4
Else
    Deuxvaleurs = x1 * x2 * x3 * x4
End If
End Function
Ainsi : =Deuxvaleurs(1;2;3;4;0) renvoie 10
et =Deuxvaleurs(1;2;3;4;1) renvoie 24
Salut tout le monde
@ Sylvanu ,ne peut on pas le faire sans le boolean que tu as ajouté ?
 
Bonsoir tout le monde,
Soit on passe par une matrice de retour et un index d'extraction, solution de Job, soit on passe par un paramètre qui renvoie que la valeur demandée comme ma proposition.
On peut aussi écrire deux fonctions qui chacune renvoie sa propre valeur.
Mais il y aura toujours un discriminant pour savoir quoi retourner. Tout dépend comment on veut choisir sa discrimination des résultats.
Le plus simple restant évidemment la double fonction qui simplifie le coté feuille.
VB:
Function AddPerso(ByVal x1#, x2#, x3#, x4#)
    Deuxvaleurs = x1 + x2 + x3 + x4
End Function
Function MultPerso(ByVal x1#, x2#, x3#, x4#)
    Deuxvaleurs = x1 * x2 * x3 * x4
End Function
 
Bon
illustrons ce que j'exposais plus haut (mon message #3), en utilisant une simple routine :
VB:
Private Sub CommandButton1_Click()
  Dim surface As Double, forme As String, largeur As Double, hauteur As Double
  largeur = 23
  hauteur = 10
  titi largeur, hauteur, surface, forme
  MsgBox surface & vbCrLf & forme
End Sub

Private Sub titi(ByVal L As Double, ByVal H As Double, ByRef v1 As Double, ByRef v2 As String)
  v1 = L * H
  v2 = "carré"
  If L <> H Then v2 = "rectangle"
End Sub

(ce qui ne veut absolument pas dire que l'utilisation d'un type personnalisé ne serait pas préférable)
 
Re,
On peut aussi de façon ludique renvoyer les deux valeurs dans la même cellule :
VB:
Function DeuxValeurs(ByVal x1#, x2#, x3#, x4#)
    DeuxValeurs = "Add :" & x1 + x2 + x3 + x4 & "  Mult: " & x1 * x2 * x3 * x4
End Function
Mais l'intérêt reste limité.
 
Bon
illustrons ce que j'exposais plus haut (mon message #3), en utilisant une simple routine :
VB:
Private Sub CommandButton1_Click()
  Dim surface As Double, forme As String, largeur As Double, hauteur As Double
  largeur = 23
  hauteur = 10
  titi largeur, hauteur, surface, forme
  MsgBox surface & vbCrLf & forme
End Sub

Private Sub titi(ByVal L As Double, ByVal H As Double, ByRef v1 As Double, ByRef v2 As String)
  v1 = L * H
  v2 = "carré"
  If L <> H Then v2 = "rectangle"
End Sub

(ce qui ne veut absolument pas dire que l'utilisation d'un type personnalisé ne serait pas préférable)
Merci Tres interressant cette methode avec une procedure
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
2 K
Réponses
0
Affichages
599
Retour