Tabouray38
Messages postés2Date d'inscriptionmercredi 15 janvier 2014StatutMembreDernière intervention16 janvier 2014
-
15 janv. 2014 à 17:05
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
16 janv. 2014 à 11:17
Bonjour à tous,
Je suis entrain de coder une fonction d'interpolation linéaire un peu particulière et qui porterait les éléments suivants :
Cette fonction prendra en arguments
Un décimal x compris entre deux limites a et b
Un tableau de valeurs x_i (x_0,...,x_i,?...x?_n )
Un tableau de valeurs considérées comme les images des valeurs précédentes, les y_i=f(x_i)
Le programme consistera dans un premier temps à trouver i tel que x_i<x<x_(i+1) à l'aide d'une boucle while...wend, et d'interpoler linéairement son image y entre y_i et y_(i+1).
Pour le moment, voici le code que j'ai inscrit :
Function IntpoLin(X As Double, Tab_X() As Double, Tab_Y() As Double) As Double
Dim X1 As Double
Dim X2 As Double
Dim Y1 As Double
Dim Y2 As Double
Dim i As Integer
i = 1
While X < Tab_X(i)
i = i + 1
X1 = Tab_X(i - 1)
X2 = Tab_X(i)
Y1 = Tab_Y(i - 1)
Y2 = Tab_Y(i)
Wend
IntpoLin = (Y1 - Y2) / (X1 - X2) * (X - X2) + Y2
End Function
Ce code ne fonctionne bien évidemment pas (cela affiche #valeur lorsque je l'appelle depuis une feuille) et j'aurais voulu que vous me guidiez. Je soupçonne peut être un probleme dans mes tableaux ...
Etant nouveau, j'aimerais vraiment comprendre mon erreur et donc si possible, ne pas me donner la réponse mais m'inviter à creuser certains points, etc ...
Bonjour,
L'écriture du code montré n'appelle, en soi, aucune remarque.
Ton erreur est donc dûe :
- soit à des valeurs inattendues passées pour leur type (non numériques, NULL, par exemple)
- soit à des opérations impossibles, telles une division par 0. Ce sera notamment le cas lorsque X1 = X2
Tu es seul à pouvoir vérifier tout cela. (mode debug, pas à pas ...)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Tab_Y (représentant les images du premier tableau):
2, 4, 6, 8, 10 , 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34
(égale à 2X)
Je me place en B2, j'appelle ma fonction personnalisée (= > fx personnalisée > Intpolin) en sélectionnant comme arguments :
- X une cellule dans laquelle je rentrerai la valeur 2,6
- Tab_X : le premier tableau
- Tab_Y : le second tableau
Là, l'erreur #Valeur s'affiche. Pourtant, nous sommes d'accord que mes valeurs sont bien des nombres.
Je n'arrive par ailleurs, pas à accéder au pas à pas détaillé de ma fonction. Je vais dans l'onglet formule > vérification des erreurs > afficher les étapes du calcul, mais lorsque je l'active, l'erreur #valeur s'affiche immédiatement après que j'ai cliqué sur évaluer (bien que j'ai mis un STOP sur ma fonction qui se situe dans un module 1 dans le menu développeur...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 janv. 2014 à 10:50
Salut
Si tu n'entres pas dans ta function lors d'un pas-à-pas, c'est qu'il y a un problème de syntaxe.
Vas dans le menu "Debogage" + "Compiler" pour vérifier que la syntaxe ne pose pas de problème.
Si c'est le cas, ce sont peut-être les types des tableaux que tu transmets à ta fonction.
Il faudrait voir comment sont initialisés et remplis tes tableaux Tab_X et Tab_Y.
Méfiance entre les points et les virgules.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 janv. 2014 à 10:57
PS : Tu dis appeler cette fonction depuis une feuille.
Tes 'tableaux' sont peut-être des ensembles de cellules ?
Dans ce cas, il faut transmettre des Range qui représenteront ces tableaux (item pour X) car la conversion Range -> tableau de Double n'est pas native.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 16 janv. 2014 à 11:17
Commence par regarder les cellules concernées de ta feuille de calcul.
Si l'une d'entre elles contient une valeur alignée à gauche, son contenu n'est pas numérique, quelle que puisse en être la raison (nombres décimaux avec le séparateur décimal inadéquat, etc ...)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend