Public Function maFonction(x As Single, _ y As Single, _ z As Single, _ FonctionRange As Range) As Single Dim oSheetTemp As Worksheet Dim bFound As Boolean Dim OutRange As Range Dim sFonction As String bFound = False For Each oSheetTemp In Worksheets If oSheetTemp.Name = "Feuille cachée" Then bFound = True Exit For End If Next If Not bFound Then Set oSheetTemp = Nothing Set oSheetTemp = Worksheets.Add oSheetTemp.Name = "Feuille cachée" oSheetTemp.Visible = xlSheetHidden End If With oSheetTemp ' Il ne faut pas rencontrer de X, Y ou Z dans le nom de ces nouvelles cellules .Names.Add Name:="mA", RefersToR1C1:="=R1C1" .Names.Add Name:="mB", RefersToR1C1:="=R1C2" .Names.Add Name:="mC", RefersToR1C1:="=R1C3" .Range("mA").Value = x .Range("mB").Value = y .Range("mC").Value = z sFonction = FonctionRange.Text ' Tu noteras les espaces devant et derrière pour ne pas avoir de souci sFonction = Replace(sFonction, "x", " mA ", , , vbTextCompare) sFonction = Replace(sFonction, "y", " mB ", , , vbTextCompare) sFonction = Replace(sFonction, "z", " mC ", , , vbTextCompare) Set OutRange = .Range("D1") OutRange.FormulaR1C1 = "=" & sFonction maFonction = OutRange.Value End With End FunctionEt pour appeler cette fonction, il suffit de fournir les 3 valeurs x, y et z ainsi que le Range où se trouve la formule, exemple :
MsgBox maFonction(32, 8, 3, ActiveSheet.range("A1"))
Sub total() ' ' tableau d'entrees Dim tab1(4, 10) As Single Dim toto As Variant ' toto = Range("A1").Value ' ' remplissage du tableau avec des valeurs bidons For i = 1 To UBound(tab1, 2) tab1(1, i) = i tab1(2, i) = i * 3 tab1(3, i) = i * 7 Next i ' ' remplissage avec la formule tapée en A1 de la Feuil1 du classeur For i = 1 To UBound(tab1, 2) ' x x = tab1(1, i) ' y y = tab1(2, i) ' z z = tab1(3, i) ' ' recup de la formule tapée en A1 (exemple : x+y/z) tab1(4, i) = Evaluate(Replace(Replace(Replace(toto, "x", CStr(x)), "y", CStr(y)), "z", CStr(z))) ' Next i End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionSub total() ' ' tableau d'entrees Dim tab1(4, 10) As Single ' ' remplissage du tableau avec des valeurs bidons For i = 1 To UBound(tab1, 2) tab1(1, i) = i tab1(2, i) = i * 3 tab1(3, i) = i * 7 Next i ' ' remplissage avec la formule tapée en A1 de la Feuil1 du classeur For i = 1 To UBound(tab1, 2) ' x x = tab1(1, i) ' y y = tab1(2, i) ' z z = tab1(3, i) ' ' recup de la formule tapée en A1 (pour l'exemple : "x+y/z") tab1(4,i)= fonction de recuperation de la formule en A1 (qui serait le résultat de x+y/z) ' Next i End Sub