interpolation en VBA (debutant)

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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:
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.
 
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 ?
 
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.
 
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.
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
670
Réponses
2
Affichages
548
Réponses
6
Affichages
611
Réponses
5
Affichages
573
Réponses
12
Affichages
559
Réponses
7
Affichages
636
  • Question Question
Microsoft 365 VBA sur outlook
Réponses
14
Affichages
1 K
Réponses
0
Affichages
482
Retour