goodguy1206
XLDnaute Nouveau
Bonjour,
J'ai entendu que ce forum était d'une grande aide,
j'essai donc à mon tour.
Je vous expose mon problème:
j'ai le tableau a double entré suivant:
0.1 rpm 1 rpm 10 rpm 20 rpm 50 rpm
1 Nm 0.99 Nm 1.19 Nm 1.03 Nm 1.13 Nm 1.38 Nm
4 Nm 1.03 Nm 1.27 Nm 1.12 Nm 1.10 Nm 1.58 Nm
10 Nm 0.91 Nm 1.40 Nm 1.55 Nm 1.78 Nm 2.07 Nm
20 Nm 1.71 Nm 2.24 Nm 2.52 Nm 2.40 Nm 2.89 Nm
30 Nm 2.43 Nm 2.96 Nm 3.36 Nm 3.42 Nm 4.15 Nm
Qui s'étale entre N5 et S10.
Je voudrai créer une fonction qui, à partir de n'importe quel valeur de vitesse (comprise entre 0.1 et 50rpm) et n'importe quel valeur de couple (comprise entre 1 et 30Nm) me donne la valeur du frottement par interpolation linéaire.
Je me suis donc essayer à faire une fonction dans VBA,
mais j'obtiens une erreur lorsque je l'utilise dans Excel sous mon tableau:
# VALEUR
Voici le code:
Public Function interpHD(vel, tor)
Dim i As Integer, j As Integer
Dim Hd As Range
Dim HDspeed As Range
Dim HDtorq As Range
Dim a As Single, b As Single
Dim c As Single, d As Single
Dim mab As Single, mcd As Single
Dim m As Single
Dim cellv As Range, cellt As Range
i = 0
j = 0
Hd = Range("O6:S10").Value
HDspeed = Range("O5:S5").Value
HDtorq = Range("N6:N10").Value
'recherche l'emplacement des valeurs voulues dans le tableau
For Each cellv In HDspeed
If vel >= cellv.Value Then i = i + 1
Next
For Each cellt In HDtorq
If tor >= cellt.Value Then j = j + 1
Next
'repere les quatres cellules concernées
a = Hd(k, i)
b = Hd(k, i + 1)
c = Hd(k + 1, i)
d = Hd(k + 1, i + 1)
'fait les interpolation concernant la vitesse
mab = a + (b - a) * (vel - HDspeed(1, i)) / (HDspeed(1, i + 1) - HDspeed(1, i))
mcd = c + (d - c) * (vel - HDspeed(1, i)) / (HDspeed(1, i + 1) - HDspeed(1, i))
'fait l'interpolation concernant le couple
m = mab + (mcd - mab) * (tor - HDtorq(k, 1)) / (HDtorq(k + 1, 1) - HDtorq(k, 1))
interpHD = m
End Function
Si vous voyez qlqch de flagrant ?
Merci de votre aide
J'ai entendu que ce forum était d'une grande aide,
j'essai donc à mon tour.
Je vous expose mon problème:
j'ai le tableau a double entré suivant:
0.1 rpm 1 rpm 10 rpm 20 rpm 50 rpm
1 Nm 0.99 Nm 1.19 Nm 1.03 Nm 1.13 Nm 1.38 Nm
4 Nm 1.03 Nm 1.27 Nm 1.12 Nm 1.10 Nm 1.58 Nm
10 Nm 0.91 Nm 1.40 Nm 1.55 Nm 1.78 Nm 2.07 Nm
20 Nm 1.71 Nm 2.24 Nm 2.52 Nm 2.40 Nm 2.89 Nm
30 Nm 2.43 Nm 2.96 Nm 3.36 Nm 3.42 Nm 4.15 Nm
Qui s'étale entre N5 et S10.
Je voudrai créer une fonction qui, à partir de n'importe quel valeur de vitesse (comprise entre 0.1 et 50rpm) et n'importe quel valeur de couple (comprise entre 1 et 30Nm) me donne la valeur du frottement par interpolation linéaire.
Je me suis donc essayer à faire une fonction dans VBA,
mais j'obtiens une erreur lorsque je l'utilise dans Excel sous mon tableau:
# VALEUR
Voici le code:
Public Function interpHD(vel, tor)
Dim i As Integer, j As Integer
Dim Hd As Range
Dim HDspeed As Range
Dim HDtorq As Range
Dim a As Single, b As Single
Dim c As Single, d As Single
Dim mab As Single, mcd As Single
Dim m As Single
Dim cellv As Range, cellt As Range
i = 0
j = 0
Hd = Range("O6:S10").Value
HDspeed = Range("O5:S5").Value
HDtorq = Range("N6:N10").Value
'recherche l'emplacement des valeurs voulues dans le tableau
For Each cellv In HDspeed
If vel >= cellv.Value Then i = i + 1
Next
For Each cellt In HDtorq
If tor >= cellt.Value Then j = j + 1
Next
'repere les quatres cellules concernées
a = Hd(k, i)
b = Hd(k, i + 1)
c = Hd(k + 1, i)
d = Hd(k + 1, i + 1)
'fait les interpolation concernant la vitesse
mab = a + (b - a) * (vel - HDspeed(1, i)) / (HDspeed(1, i + 1) - HDspeed(1, i))
mcd = c + (d - c) * (vel - HDspeed(1, i)) / (HDspeed(1, i + 1) - HDspeed(1, i))
'fait l'interpolation concernant le couple
m = mab + (mcd - mab) * (tor - HDtorq(k, 1)) / (HDtorq(k + 1, 1) - HDtorq(k, 1))
interpHD = m
End Function
Si vous voyez qlqch de flagrant ?
Merci de votre aide