VBA Fonction mathématique avec paramétrage
Bonjour,
je suis débutant en VBA et j'aimerais faire un programme qui demande à l'utilisateur de saisir une fonction et qui ensuite trace sa représentation graphique.
Jusque-là tout va bien, mais si ma chaîne de caractère contient un caractère autre que "x" et "e" elle doit le détecter comme paramètre de cette fonction mathématique et donc demande à l'utilisateur de saisir la valeur de ce paramètre et la place dans la première cellule non vide d'une colonne dédiée au paramètres. Le problème et que mon bout de code si je le recopie pour vérifier tous mes caractères possibles, alors il plante et c'est le drame.
Code que j'ai écrit
option Explicit
sub main()
Dim Vide As Boolean
Dim Fonction As String
Vide = False
If RechercheCar(Fonction, "a") = True Then
i = 13'Ma recherche de cellule non vide commence à la ligne 13 de la colonne 1
While Vide = False And i <= 37
If Cells(i, 1).Text = "" Then
Cells(i, 1).Value = "a"
Vide = True
End If
Wend
Cells(i, 2).Value = InputBox("Donnez la valeur de votre paramètre", "PARAMETRE", "2")
If Cells(i, 2).Value = "" Then
MsgBox "Vous n'avez pas saisi de valeur", vbCritical, "E R R E U R !"
Exit Sub
Else
Fonction = Replace(Fonction, "a", Cells(i, 2).Value)
End If
End If
End Sub
Function RechercheCar(ByVal Fonction As String, ByVal Car As String) As Boolean
RechercheCar = False
If InStr(Fonction, Car) <> 0 Then
RechercheCar = True
End If
End Function
Merci beaucoup de votre aide car je suis en train de m'arracher les cheveux là-dessus depuis bien quelques jours
Bonjour,
à compléter selon le type des fonctions attendues.
La fonction retourne un tableau des paramètres à renseigner :
Sub test()
Dim p, i As Long
p = paramFn("3x^2+4bx+c")
If UBound(p) >= 0 Then
For i = 0 To UBound(p)
Debug.Print p(i)
Next i
End If
End Sub
Function paramFn(fonction As String)
Const num As String = "0;1;2;3;4;5;6;7;8;9;,;.;e;x;pi"
Const operateur As String = "+;^;-;*;/;(;);[;];{;};=;sin;cos;tan"
Dim op, i As Long
paramFn = fonction
op = Split(num, ";")
For i = 0 To UBound(op)
paramFn = Replace(paramFn, op(i), "")
Next i
op = Split(operateur, ";")
For i = 0 To UBound(op)
paramFn = Replace(paramFn, op(i), " ")
Next i
paramFn = Application.Trim(paramFn)
paramFn = Split(paramFn, " ")
End Function
si tu dois demander x il faut le traiter séparément car je suis obligé de l'éliminer vu qu'il peut être accolé à une variable(comme +4bx)
eric
PS : mettre If UBound(p) >= 0 Then et non If UBound(p) > 0 Then
corrigé dans le post
Merci beaucoup ça marche très bien