interpolation en VBA (debutant)

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
 

Gruick

XLDnaute Accro
Re : interpolation en VBA (debutant)

hi,

tu remplaces ces 3 lignes
Code:
Hd = Range("O6:S10").Value
HDspeed = Range("O5:S5").Value
HDtorq = Range("N6:N10").Value
par
Code:
Set Hd = Range("O6:S10")
Set HDspeed = Range("O5:S5")
Set HDtorq = Range("N6:N10")

et Bonjour Pierre.

Gruick
 

goodguy1206

XLDnaute Nouveau
Re : interpolation en VBA (debutant)

ma fonction marche très bien,
elle s'intitule interpHd,
donc je l'utilise dans une case =interpHd(INspeed, optorq)
INspeed et optorq étant le nom de deux cases dont les valeurs changent.

Mais justement, lorsque ces variables changent de valeur,
le résultat de ma fonction se transforme en #VALEUR!
Jusqu'à ce que je clique sur ma fonction puis Entrée,
afin de la relancer.

Y a t'il un moyen de la lancer automatiquement à chaque fois que ses arguments changent ?
 
Dernière édition:

Gruick

XLDnaute Accro
Re : interpolation en VBA (debutant)

Résumons :
Au début, tu avais une macro fonction à revoir,
Après, tu nous donnes des noms,
Maintenant tu nous gratifie de plusieurs feuilles.
Tu n'aurais pas une autre notion genre pression atmosphérique ?
Que nous l'eusses-tu expliqué en détail dès le premier post.

Il faut revoir les 3 lignes déjà rectifiées en précisant sur quelles feuilles elles se trouvent
Code:
Set Hd = Sheets("Comparison").Range("O6:S10")
, et adapter la formule sur la feuille qu'elle doit calculer. (les noms deviennent inutiles, il est préférable de se servir de références de cellules, si plus d'une feuille.

Je ne comprends plus ni les tenants, ni les aboutissants de ton fil, aussi, ceci constituera ma dernière réponse.
 

goodguy1206

XLDnaute Nouveau
Re : interpolation en VBA (debutant)

Bonjour Gruick,
un grand merci pour cette réponse qui m'a permit de débloquer la situation.
Comme tu as pu le constater, les feuilles excel que je t'ai fait parvenir sont simplement des extraits. Mon fichier excel est en fait constitué de plus de dix feuilles, avec de nombreux paramètres, temperature, vitesse, acceleration, couple en sortie, mais aussi frequence, courant, tension, des graphiques, les listes de choix, des variables, des bases de données ...
Bien sur, j'ai essayé de rester simple dans ma demande qui ne concernait qu'une partie de mon fichier. Cependant je te prie de m'excuser si elle manquait d'information.
Encore merci pour cette aide précieuse qui m'a permit de gagner du temps.

J'aurai encore une toute petite question, par rapport à ton dernier post:
les noms deviennent inutiles, il est préférable de se servir de références de cellules, si plus d'une feuille.

Les noms sont pour moi plus facile à manipuler, qu'une cellule inexplicite.
Pourquoi dois-je les éviter ?
 

Gruick

XLDnaute Accro
Re : interpolation en VBA (debutant)

Bonjour goodguy1206,

J'étais en colère, et j'implore tes excuses... euh, je les demande, faut pas exagérer !

Bon, quand j'écrivais que les noms étaient inutiles, c'est parce que je supposais que des feuilles de recherche il y en avait plusieurs. S'il n'y en a qu'une, le problème est résolu. Sinon, fais nous parvenir le fichier autrement, par un site du genre Cijoint.
 

goodguy1206

XLDnaute Nouveau
Re : interpolation en VBA (debutant)

Pas de pb,
Donc j'ai nommé mes cellules,
sur des plages qui peuvent s'étendre
(avec DECALER ET NBVAL),
et maintenant j'aimerais les utiliser à la place de :
Set Hd = Sheets("Comparison").Range("O6:S10")

Que dois-je taper ? Set Hd=Range("nom_tableau") ?

Désolé pour cette question de débutant,
mais j'ai pas reussi à trouver l'information ailleurs.
 

goodguy1206

XLDnaute Nouveau
Re : interpolation en VBA (debutant)

ok, pardon,
pas si facile comme exercice:
J'ai joins le fichier.

Dans ma macro fonction, dans la declaration des plages (Range),
plutot que d'indiquer
Set Hd = Sheets("Comparison").Range("O6:S10")
j'aimerai utiliser le nom de mon tableau ("losses").
Pour plusieurs raisons:
_le tableau peut être déplacé, le nom suivra.
_Le tableau peut être complété, la plage s'étendra.

Mais je bloque sur la syntaxe.
 

Pièces jointes

  • HD.xls
    28 KB · Affichages: 160
  • HD.xls
    28 KB · Affichages: 176
  • HD.xls
    28 KB · Affichages: 178

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz