[VBA]Appel d'une fonction

Signaler
Messages postés
6
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 mai 2012
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonsoir à tous,

Je suis étudiante et débutante en language VBA. Pourriez m'indiquez, s'il vous plait, comment appeler la fonction que j'ai créé dans le cas suivant :

Function livret (m As Double, i As Double, n As Integer) As Double
Dim k As Integer, res As Double
res = m
For k = 1 To n
res = res * (1 + i)
Next k
livret = res
End Function

Sub Test ()
Dim i as double
Dim n as integer
Dim m as double
i = InputBox (“Veuillez entrez le taux d’intérêt”)
n = InputBox (“Veuillez entrer le nombre d’années”)
m = InputBox (“Veuillez entrer le montant”)
...
End Sub

Il me manque une dernière ligne dans ma macro "Test", je dois afficher le résultat de la fonction, comment appeler cette fonction,lorsque que j'indique MsgBox ("Utilite), ça ne fonctionne pas...

Merci d'avance.

6 réponses

Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour,

Retour=MaFonction(Parametre1, Parametre2, ...)

Comme tu appelles Inputbox en fait.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
6
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 mai 2012

Merci bcp ! Je suis désolée pour le doublon, ce n'est pas le même problème...
Messages postés
6
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 mai 2012

ERREUR : Type d'argument ByRef incomptabile.
Sachant que a,b,c sont des nombres positifs ou nuls (mais potentiellement pas entiers).

Pourriez-vous m'aider svp, d'où vient le problème ?

Merci d'avance.

Function Utilite(a As Double, b As Double, c As Double, X As Double, Y As Double) As Double
a = InputBox("Veuillez entrez la valeur de a")
b = InputBox("Veuillez entrez la valeur de b")
c = InputBox("Veuillez entrez la valeur de c")
X = InputBox("Veuillez entrez la valeur de X")
Y = InputBox("Veuillez entrez la valeur de Y")
Utilite = (a * X ^ b * Y ^ c)
End Function

Sub test()
MsgBox (Utilite(a, b, c, X, Y))
End Sub
Messages postés
355
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
15 juin 2019
9
Dans chaque paramètre tu dois definir comment sera utilisé la Variable
Public Function func(Byval a As Integer,ByVal b as string) As Boolean

'Tu mets tes instructions
End Function

La Science est Grande et Vaste partageons cette connaisance
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
Comment peux-tu penser, à la fois, à passer des paramètres à une fonction et y définir ces paramètres ?
Si tu écris :
Function Utilite(a As Double, b As Double, c As Double, X As Double, Y As Double) As Double

c'est que les paramètres a, b, c, X et Y, passés à la fonctions, sont déjà des doubles et qu'ils ont déjà une valeur.
Reste qu'il t'appartient de définir (en amont de la fonction, donc) a, b,c,X et Y. Ils doivent nécessairement être des doubles valides.
Or, prenons par exemple ce que tu écris dans ton tout premier message,. Cette ligne, par exemple et entre autres :
Dim i as double
i InputBox ("Veuillez entrez le taux d'intérêt")
>> imaginons maintenant que l'on veuille y saisir la valeur 1,1 === >>
si l'on saisit "1,1", reconnue comme "numérique" par VBA, elle ne sera pas un double acceptable. Le serait la valeur 1.1 (saisie en "1.1"), mais qui, elle, ne serait pas reconnue comme un "numérique" par l'inputbox.
La solution : utilisation de la fonction de conversion Cdbl . Ouvre ton aide VBA sur ce mot
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Regarde par exemple comment réagit ceci, que l'utilisateur utilise la virgule ou le point comme séparateur décimal :
Private Sub CommandButton1_Click()
  Dim a As Double
  a = CDbl(Replace(InputBox("entrez a"), ".", ","))
  MsgBox b(a)
End Sub

Private Function b(a As Double) As Double
 b = a * 1.1
End Function

Ceci étant dit : j'utiliserais à ta place Application.Inputbox (à voir dans ton aide VBA) plutôt que InputBox. Cela te permettrait de forcer l'utilisateur à frapper un "numérique" valise.




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ