Exponentiel en Code VBA pour Excel : est-ce possible ?
Bonjour,
J'ai besoin d'aide en code VBA sous Excel.
De puis ce matin, je me torture l'esprit afin de,
__ dans un 1er temps, reproduire, en VBA, cette formule :
=B2*EXP(-(C2*D2))
__dans un 2ème temps, obtenir la réponse :
---------------------------------------------------------------------> dans la cellule (Range("E...") adéquate,
---------------------------------------------------------------------> dans la cellule active : ActiveCell,
---------------------------------------------------------------------> dans une boîte de message : MsgBox.
Points de blocage :
* Exp
* la Boîte de message ne s'affiche pas.
Voici dessous :
* le code que j'ai déjà réussi à réaliser toutefois, "Exp" bloque, (même en le remplaçant par "E")
* une copie de la fenêtre d'exécution
* le fichier excel support.
Je vous remercie par avance de vote aide.
Bien cordialement.
**************************************************************************************************************************
Function exponentiel()
' Function pour déterminer la concentration du vinaigre en fonction du temps qui passe
' (durée entre pose et test de vérification)
' Ci pour la concentration initiale (mg/L),
' d est la durée en heures
' vp est la constante de vitesse perte efficacité (unités de 1/h).
' Cf qui correspond à C(d) pour la Concentration finale de vinaigre après la durée (d).
Dim Ci As Double, vp As Double, d As Variant, Cf As Double, E As Double
Ci = Range("b2")
vp = 1
td = Application.InputBox("Indiquer le temps écoulé entre la pose du vinaigre et le test de concentration : ")
E = Exp
Cf = ActiveCell
' Cf = (Ci) * exp(-(d*vp ))
ActiveCell = (Ci * E(d)(-(d*vp)))
ActiveCell = FormatNumber(2,2)
MsgBox ("La concentration est de :" & ("Cf") & "")
End Function
Bonjour,
Pas tout bien compris. il faut utiliser la fonction personnalisée comme une formule excel, c'est à dire écrire la formule dans la cellule de destination, qui est à la fois la cellule active. Je ne vois pas l'utilité du message.
Exemple le code de la fonction personnalisée:
Function CF(CI As Double, VP As Double, D As Date) As Double
' Fonction pour déterminer la concentration du vinaigre en fonction du temps qui passe
' (durée entre pose et test de vérification)
' Ci pour la concentration initiale (mg/L),
' d est la durée en heures
' vp est la constante de vitesse perte efficacité (unités de 1/h).
' Cf qui correspond à C(d) pour la Concentration finale de vinaigre après la durée (d).
CF = Round(CI * Exp(-(VP * D)), 2) 'Limité à 2 chiffres après la virgule
End Functionet la formule à inscrire en E2 puis à tirer vers le bas:
=cf(B2;C2;D2)
Cdlt
Bonjour Arturo83,
Je te remercie vraiment d'avoir pris du temps afin de m'aider.
Je teste actuellement, mais cela bloque, dès le départ ;-).
Par contre, en réalisant cela
Option Explicit
Sub data_input()
Dim Cf As Double
Cf = Round(efficacite(200, 0.5, 4), 0)
'-----> 'Cf = efficacite(200, 0.5, 4)
'Cf = Round(Ci, 0)
MsgBox ("La concentration est de :" & Cf)
End Sub
Function efficacite(Ci, pv, d)
Dim Cf As Double
Cf = Ci * Exp(-pv * d)
medicament = Cf
End Function
Il me reste à positionner aussi l'info dans l'ActiveCell
CF = efficacite(200, 0.5, 4)
CF = Round(C, 2)
ActiveCell = CF
Et ce sera fait.
Un grand merci à toi.
Bonne journée.
Essayez ceci, à copier dans le module de la feuille (et pas dans un module standard)
Dim Cf As Double
Dim Ci As Double
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo Sortie
Application.EnableEvents = False
If Target.Row > 1 And Target.Column = 5 Then
Cf = Int(efficacite(200, 0.5, 4))
MsgBox ("La concentration est de : " & Cf)
Target.Value = Cf
End If
Sortie:
Application.EnableEvents = True
End Sub
Function efficacite(Ci, pv, d) As Double
efficacite = Ci * Exp(-pv * d)
End FunctionIl suffit de faire un double clic sur l'une des cellules de la colonne E pour obtenir le résultat dans la cellule et dans la boîte de message.Cdlt
Bonjour Arturo83,
Je te remercie de ton suivi.
De retour, je vais tester ta solution ce soir et te tiendrai informé.
A ce soir.
Alilu