Approximation d'une courbe "particulière" sous Excel par une droite affine

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour à tous, bonjour le Forum,

Bien bien, me voici une nouvelle fois ici pour un nouveau besoin. Je donnerais un peu plus loin des éléments de contexte ainsi que les besoins qui animent ma venue ici.

Cette fois-ci, je pense que ma demande est un peu plus complexe que d'habitude. Je pense également, qu'elle s'adressera plus particulièrement à des développeurs expérimentés (en tout cas bien plus expérimentés que moi ça c'est sur^^). Je rappel que je suis débutant sous Vba mais ayant acquis de bonnes bases tout de même. Bien évidement tout le monde peut participer et je prends tous les conseils !

Bien maintenant entrons un peu plus dans le sujet... Je vous conseil de télécharger le fichier Excel (2003) que j'ai mis en en téléchargement en bas de page pour que vous compreniez beaucoup mieux au fur et à mesure de la lecture ;)

Je travail sous Excel 2007, et je cherche à développer une Macro. Dans mon fichier Excel et dans la première feuille intitulée "DONNÉES" il y a un graphique. Ce graphique est tracé grâce à deux colonnes. Une première colonne pour les abscisses et une autre pour les ordonnées. En ce qui concerne les valeurs qui se trouvent dans les colonnes, on va dire qu'elles sont acquises de manière expérimentale et donc qu'il n'y a pas de formule pour trouver ces points. Pas de formule...donc pas d'équation de courbe non plus !
De plus comme vous le remarquerez très bien, cette courbe ne respecte pas l'unicité de solution. C'est à dire que pour une valeur d'abscisse X, il n'existe pas une et une seule solution. C'est bien la un des problèmes qui me pousse à développer une macro évoluée.

Maintenant que j'ai dit ça, je vais pouvoir exprimer la problématique. Voici ce que je cherche à faire sur ce graphique.

Dans une tierce colonne, il y a des valeurs qui représentent des abscisses. Et mon but va être d'associer les bonnes ordonnées qui correspondent à la colonne des abscisses par lecture graphique. Ce travail est fastidieux car il peut y avoir une cinquantaine de valeurs à lire. De plus, pour chaque abscisse il peut y avoir de multiples intersections et donc qu'il faut à chaque fois lire plusieurs ordonnées pour une même abscisse. J'ai mis en évidence ce problème sur la feuille numéro deux du fichier Excel intitulée "EXEMPLE". On y voit la multi-intersection d'une courbe par une unique valeur d'abscisse.
J'ajouterais que pour ne rien faciliter, mon graphique se trouve sur une feuille Excel, et ma colonne qui contient les valeurs des abscisses en attente de réception d'ordonnées se trouve sur une autre feuille. Du coup il faut sans arrêt jongler entre les feuilles Excel. Pas cool !

Du coup je me suis dit qu'il serait sans doute jouable via une macro Excel de faire en sorte de venir lire les valeurs sur le graphique à la place de l'utilisateur. Malheureusement, ce sont des données expérimentales et il n'y a pas d'équation de courbe qui tienne pour éventuellement calculer les valeurs d'ordonnées en fonction des abscisses. De plus, apparemment Excel ne gère pas l'intersection de courbes sur un graphique pour remonter à la cordonnée d’intersection. Pour lui, les courbes se superposent mais il ne détecte pas le passage de l'une sur l'autre. Vraiment dommage ! A moins que je me trompe ???

Du coup la seule solution que j'ai trouvé actuellement est de travailler par petits intervalles de valeurs d'abscisses et de faire une approximation linéaire par une droite affine de la forme "Y = a*X + b". Du coup pour une valeur d'abscisse données, on va chercher à encadrer cette abscisse par la première immédiatement plus petite, et la première immédiatement plus grande que la valeur d'abscisse désiré. De cette façon, on encadre l'abscisse voulu par deux autres abscisses dont on connait les ordonnées respectives. Il ne reste plus qu'a faire l’approximation linéaire et à en déduire l'ordonnée qui correspond à la valeur d’abscisse qui était demandée initialement.
Pour que sa soit plus clair pour tous, j'ai mis en feuille trois intitulée "MODÉLISATION DU PROBLÈME" la visualisation de ce que je viens de dire. Vous verrez ce n'est pas compliqué quand on voit l'exemple.

Évidement, comme pour une abscisse il peut y avoir plusieurs intersections possible, il ne faut pas oublier de boucler sur toutes les valeurs du graphique pour mettre en évidence toutes les possibilités possibles. Ce sont des choses très simples que je demande mais qui mis bout à bout deviennent vites complexes (pour moi en tout cas !)

Enfin, il y aura également une partie "visuelle" à traiter. En effet, comme il y a plusieurs solutions pour une abscisse l'idée serait de faire afficher dans une fenêtre toutes les solutions trouvées et de demander à l'utilisateur laquelle il désire garder. Que la solution choisie soit ensuite copiée dans la cellule en face de l’abscisse initiale. Et puis que le programme recommence avec une autre abscisse qui se trouve dans la cellule des abscisses suivantes...
Pour info, les valeurs d'abscisses seront étudiées dans l'intervalle [0;1] UNIQUEMENT et les valeurs d'ordonnées seront étudiées dans l'intervalle [0;500E-9] UNIQUEMENT. Les autres valeurs ne m'intéressement pas.

C'est pourquoi je viens faire appel à votre aide. Cette demande n'est pour moi pas vraiment prioritaire car ce n'est pas indispensable pour la suite de mes idées. Néanmoins, maintenant que j'ai eu l'idée d'aller plus loin et de proposer une solution envisageable ; et bien je suis vraiment curieux de voir ce que sa peut donner une fois codé. Je vais tout faire pour tenter l'expérience mais je n'ai pas le temps à me casser la tête sur ce code. C'est dommage mais c'est comme sa. Voila pourquoi je vous demande un petit coup de main pour essayer d'avancer plus vite.

Je reste disponible pour toutes vos questions que vous pourriez avoir, et évidement je reste dans le coin du mieux que je peux pour aider moi aussi.

Voila c'est finit pour le moment. J'avais averti, c'est un peu plus costaud cette fois-ci^^

Cordialement,

André
 

Pièces jointes

  • MODELISATION DU PROBLEME APPROXIMATION.xls
    59.5 KB · Affichages: 120
  • MODELISATION DU PROBLEME APPROXIMATION.xls
    59.5 KB · Affichages: 131
  • MODELISATION DU PROBLEME APPROXIMATION.xls
    59.5 KB · Affichages: 131

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Je place ici le fichier Excel (2003) le plus à jour actuellement.
Merci à tous de bien vouloir poursuivre avec ce dernier. Y compris toi Eric^^

Ce post est encore loin d'être résolu, mais il est en très bonne voie. Je reprendrai son développement demain...

Bonne soirée aux plus vaillant :)

André
 

Pièces jointes

  • MODELISATION DU PROBLEME APPROXIMATION.xls
    75.5 KB · Affichages: 85
  • MODELISATION DU PROBLEME APPROXIMATION.xls
    75.5 KB · Affichages: 85
  • MODELISATION DU PROBLEME APPROXIMATION.xls
    75.5 KB · Affichages: 92

eriiic

XLDnaute Barbatruc
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Bonjour,

Si on trie par abscisses la courbe n'a plus du tout la même allure, on se retrouve avec une succession de minima et maxima.
Il faut laisser les valeurs non triées.

Puisque tu trouves les valeurs correctes maintenant est-ce que c'est toujours intéressant de faire apparaitre les 2 couples les ayant générées ?

Merci à tous de bien vouloir poursuivre avec ce dernier
D'accord, mais poursuivre quoi ?
Que la solution choisie soit ensuite copiée dans la cellule en face de l’abscisse initiale.
Je n'ai toujours pas compris où était la cellule en face de l’abscisse initiale.
Il faut l'insérer dans les données ?

Je joint ta dernière version 6 avec le code un peu plus commenté.
J'ai aussi défini un nom dynamique pour tes données.
La plage s'appelle 'datasXY', et s'adapte au nombre de valeurs, plus besoin d'éditer la formule sur une nouvelle extraction.
Par contre aucune autre valeur numérique ne doit se trouver en Données!B:B, et les données doivent toujours démarrer en B4

eric

PS: le nombre de valeurs retournées dépend du nombre de cellules sélectionnées. Actuellement c'est 10 maxi, modifiable dans le code : ReDim tablOrd(10)
 

Pièces jointes

  • MODELISATION DU PROBLEME APPROXIMATION-6.xls
    76.5 KB · Affichages: 74
Dernière édition:

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Bonjour le Forum, eriiiic,

Si on trie par abscisses la courbe n'a plus du tout la même allure, on se retrouve avec une succession de minima et maxima.
Il faut laisser les valeurs non triées

-En effet c'est ce dont je me suis aperçu hier soir juste avant de me coucher. Excel relie les points par ordre successif. Du premier couple (X,Y) jusqu'au dernier. Du coup ordonner la plage (Abscisse,Ordonnées) est une aberration. J'ai même pu tester rapidement sur 3 points ce matin et c'est logique en fait^^
Donc je confirme également, il est inutile d'essayer de modifier la plage de données initiale. Ce qui m'arrange en fait.

Puisque tu trouves les valeurs correctes maintenant est-ce que c'est toujours intéressant de faire apparaitre les 2 couples les ayant générées ?

-Non, c'est totalement inutile car tu essaies d'encadrer la valeur d'abscisse par deux lignes successives. Du coup c'est très simple de vérifier d'après la table (X,Y). Les deux valeurs que tu utilise pour extrapoler sont donc les bonnes. Ce qui me parait maintenant évident. Car en fait, la table est belle et bien ordonnée dans un certain sens. C'est à dire que si l'on prends deux à deux les lignes de la table, alors on se balade de couple en couple successifs sur la courbe également. C'est mal dit mais je me comprends très bien. J'espère que vous autre aussi^^.
Donc la logique que tu emploies est la bonne. on ne change rien de ce côté.


Merci à tous de bien vouloir poursuivre avec ce dernier.
D'accord, mais poursuivre quoi ?

-Oula, il y a encore pas mal de choses à faire je pense. Tu vas bien trop vite pour moi on dirais^^. J'expliquerais à la fin du post ce qu'il reste à faire. Je vais finir de répondre à tes questions pour l'instant. Rendez-vous un peu plus bas...

Que la solution choisie soit ensuite copiée dans la cellule en face de l’abscisse initiale.
Je n'ai toujours pas compris où était la cellule en face de l’abscisse initiale.
Il faut l'insérer dans les données ?

-C'est une partie un peu complexe du code que je demandais. La réponse arrive avec ce qu'il reste à faire...Donc je vais en parler maintenant. Tu vas mieux comprendre ce que je voulais dire depuis le tout début.

J'ai aussi défini un nom dynamique pour tes données.
La plage s'appelle 'datasXY', et s'adapte au nombre de valeurs, plus besoin d'éditer la formule sur une nouvelle extraction.
Par contre aucune autre valeur numérique ne doit se trouver en Données!B:B, et les données doivent toujours démarrer en B4

-J'ai remarqué le changement dans la formule matricielle "=interpolation(datasXY;E31)". N'oublie pas que le fichier Excel que j'ai posté reste avant tout un fichier de développement et de tests. Il n'est pas vraiment identique à mon application finale. C'est une version plus simple que je propose en téléchargement. Du coup, si tu enlève des paramètres d'initialisation c'est bien, mais sa me complique la tache ensuite aussi. Maintenant que tu as mis les noms dynamiques je ne sais plus comment changer éventuellement par la suite la plage de données. Sa m'embête. Peux tu me dire comment on règle "dataXY" maintenant ? Je suis sur que sa doit être simple. Mais bon, faut le savoir quand même. Également, merci pour les commentaires. A quoi sert le "Option Base 1" ?

Voila, les questions sont maintenant toutes posées et répondues pour la plus part. Je vais pouvoir passer à la suite du développement.

Question : Que reste il à faire ??? Pour moi 90% du boulot est fait. Mais on va quand même essayer de finaliser la bête.

Reprenons...Sur un feuille Excel, il y a 2 colonnes. Une première pour les abscisses, une autre pour les ordonnées. Ensuite un graphique est tracé. Sur une autre feuille Excel (feuille non représentée dans le fichier de téléchargement) il y a une colonne qui correspond à un certain nombre d'abscisses. Ce sont les abscisses dont je veux justement trouver la bonne ordonnée. Donc de manière évidente, sur cette même feuille Excel il y a une deuxième colonne VIDE !!! Qui est en attente de la bonne ordonnée.
Pour la colonne des ordonnées sur cette feuille, il y a seulement une et UNE seule colonne. Donc si pour une abscisse on trouve 5 intersections, c'est à l'utilisateur de faire le choix et d'indiquer laquelle il souhaite conserver pour la stoker dans la colonne ordonnée.

Est-ce plus clair Eric ?

Le but du jeu maintenant :

Je cherche à automatiser au maximum tout ça. Donc j'aimerais placer sur la feuille qui contient le graphique un bouton de commande qui lancerais le début de l'opération. Lorsque l'on clique sur ce bouton, la macro irais chercher sur la feuille 2 qui contient les valeurs d'abscisses la toute première valeur. Ensuite, pour cette valeur d'abscisse une fenêtre (un formulaire quoi) s'ouvre pour avertir l'utilisateur qu'il y a plusieurs intersections possible et qu'il doit choisir laquelle garder.
Donc cette fenêtre indiquera la valeur actuelle d'abscisse, puis les 3 ou 4 ou 5 ou plus valeurs d'ordonnées possibles. On peut imaginer un formulaire avec 5 optionBouton à un seul choix possible. L'utilisateur choisie sa valeur, et cette valeur est ensuite stockée dans la feuille 2, celle ou il y a une seule colonne d'ordonnée à remplir.
Une fois ceci fait, on boucle et on recommence jusqu’à avoir parcouru toutes les valeurs d’abscisses. on a donc rempli de manière automatique les ordonnées sans avoir besoin de jongler sans arrêt entre deux feuilles Excel, et surtout sans s'abimer les yeux à lire sur un graphique !

Ma demande vous semble t'elle réasliste ? Je l'espère !

Je reste dans le coin pour plus de précisions si besoin est. Je vais essayer de préparer un jolie formulaire et le bouton d'action à placer près du graphique. Je pense que je sais faire ça. Enfin je vais essayer au moins.

Bien cordialement,

André
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Re,

Maintenant que tu as mis les noms dynamiques je ne sais plus comment changer éventuellement par la suite la plage de données. Sa m'embête. Peux tu me dire comment on règle "dataXY" maintenant ?
'insertion / nom / définir...', pour datasXY tu lis :
=DECALER(DONNÉES!$B$3;1;;NB(DONNÉES!$B:$B);2)
crée une référence en décalant DONNÉES!$B$3 de 1 ligne, 0 colonnes, d'une hauteur égale au nombre de valeurs numériques en B, de 2 colonnes de large.
Mais dans la fonction tu mets ce que tu veux en paramètre, ce nom ou une plage fixe comme avant.

A quoi sert le "Option Base 1" ?
A faire démarrer les indices des tableaux à 1 au lieu de 0.
Au départ je ne savais pas si je ferais un sub ou une fonction personnalisée, et pour un sub il fallait que je commence à 1 pour coller le résultat dans la feuille plus facilement.

Sur une autre feuille Excel (feuille non représentée dans le fichier de téléchargement) il y a une colonne qui correspond à un certain nombre d'abscisses. Ce sont les abscisses dont je veux justement trouver la bonne ordonnée.
Ca tu aurais dû le dire tout de suite, si j'étais parti sur un sub beaucoup de choses auraient été à reprendre. Ouffff ;-)

eric
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Oui dsl j'aurais du mieux m'exprimer à propos de la feuille qui n'est pas représentée dans le fichier et qui doit recevoir les ordonnées. Je l'avais pourtant esquissée dans la feuille nommée "EXEMPLE" juste sous le graphique. Mais mon erreur a été de mettre 1 cellule abscisse et 5 cellules ordonnées. Sa prête à confusion je l'avoue.

Donc je confirme, le but est bien d'identifier toutes les intersections possible pour une valeur donnée d'abscisse, mais de n'en conserver qu'une seule et de n'en stocker qu'une seule au final. Le choix de sélection est un critère que seul l'utilisateur pourra faire. Il n'y a pas vraiment de règle pour déterminer laquelle choisir.

En ce qui concerne ta question sur l'intervalle, tu peux partir sur l'intervalle d'abscisse correspondant à ]0;500E-9]. Sa me conviens si tu ne change que ça pour l'instant. c'est acceptable lol.

Je vais essayer de m'approprier le dataXY en jouant avec. Ça n'a pas l'air si simple à première vue...Mais faut essayer avant de parler. Je te dirais ce qu'il en est.

N'hésite surtout pas si tu as la moindre question ou remarque.

André
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

eric je viens d'essayer les noms dynamiques que tu as mis en place pour la formule "=interpolation(datasXY;E31)". C'est trop compliqué pour moi et surtout pour la suite de mon projet. Je ne me suis jamais encore servis de cette rubrique, et j'ai beaucoup de mal à l'utiliser. C'est sans doute une méthode plus efficace que d'utiliser des noms dynamiques mais néanmoins sa ne me plais pas du tout.
D'autant plus que dans mon application finale, la colonne Abscisse et la colonne ordonnée ne sont pas cote à cote, et que de plus la colonne abscisse se trouve à droite de la colonne ordonnée. (Abscisse = colonne F; Ordonnée = colonne D). C'est pourquoi je suis nettement plus attiré par la première version que tu proposais "=interpolation(DONNÉES!$B$4:$C$131;E31)". La au moins j'identifie clairement la plage de données, la feuille et l'étendue. Est-il possible d'avoir la formule avec définition de la colonne X, définition de la colonne Y par hasard ?
Une formule du genre "=interpolation(DONNÉES!ColonneX;DONNÉES!ColonneY;E31)

Si tu pouvais proposer cette solution dans le prochain fichier que tu uploaderas, sa serait vraiment top. Je sais tu vas me dire que ça n'a plus grand intérêt de proposer une telle solution vu que je souhaite avoir un formulaire etc. Oui il est vrai que sa peut paraître inutile, mais ça constitue toujours une première solution simplissime en cas de besoin et qui fonctionne vraiment bien. J'entre une valeur d'abscisse, et sa me retourne toutes les ordonnées trouvées en ligne. Ça reste donc une solution simple mais efficace que je désire conserver pour le moment. Mais pas avec des noms dynamiques car inexploitable pour moi^^

Voila tu sais le pourquoi du comment comme sa :)


Si tu peux faire l'effort, sa serait super pour la suite je pense.

André
 

eriiic

XLDnaute Barbatruc
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Il ne faut pas avoir peur des noms dynamiques.
En fait le nom tient compte automatiquement du nombre de valeurs à prendre en compte.
Si tu colles 83 valeurs en B4:C12 (et plus rien en-dessous) la plage fera automatiquement 83 lignes sans que tu aies besoin de la redéfinir dans la fonction.
Et l'un n'empêche pas par l'autre. Dans la fonction tu mets les paramètres sous la forme que tu veux, que ce soit un nom ou une plage fixe.

Ci-joint la modif demandée, j'ai quand même défini les noms datasX et DatasY (que tu n'es pas obligé d'utiliser...)

Si tu ne te rappelles pas l'ordre des paramètres attendus fait 'insertion / fonction... / personnalisées / interpolation' pour lire les noms des paramètres.

eric
 

Pièces jointes

  • MODELISATION DU PROBLEME APPROXIMATION-6.1.xls
    77 KB · Affichages: 52

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Merci Eric pour ta modif. C'est maintenant beaucoup plus simple pour moi d'adapter le code de cette forme la. Et aussi plus clair j'avoue.

L'histoire des noms dynamique ne me séduit toujours pas. Dsl, je n'accroche pas. D'ailleurs tu dis :
j'ai quand même défini les noms datasX et DatasY (que tu n'es pas obligé d'utiliser...)

J'ai bien vu ces noms la. Mais tu vois je ne parviens toujours pas à comprendre quel est le lien. Je veux dire, ils ne me servent à rien, et je ne vois pas ou ils sont utilisé notamment. A part quand je fais afficher la fonction interpolation qui me dit "interpolation (datasX;datasY;Valeur)". Mais pourtant quand je clique sur une cellule d'ordonnée j'ai bien "=interpolation(DONNÉES!$B$4:$B$131;DONNÉES!$C$4:$C$131;E31)". Et pas de datasX ou datasY.

Donc du coup, sa fonctionne bien...mais je n'ai pas tout compris quand même. A quoi sa sert de laisser un dataxX si on définis de manière explicite la plage datasX ???

Si tu peux m'aiguiller sur ces noms dynamiques car je suis curieux et désireux de savoir le pourquoi du comment.

André

Ps : En tout cas merci pour la correction car c'est bien plus lisible pour moi
 

eriiic

XLDnaute Barbatruc
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Si tu peux m'aiguiller sur ces noms dynamiques car je suis curieux et désireux de savoir le pourquoi du comment.
Ben relis tranquillement mon post précédent, car je vais réécrire la même chose pour la 3ème ou 4ème fois...
Sinon pas grave, oublie. Tu reverras ça lorsque tu passeras ceinture verte ;-)
eric
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Pas de soucis Eric^^

J'apprendrais mieux quand j'aurais personnellement besoin l'idée d'utiliser les noms dynamiques. Mais je garde sa en tête. Sa peut être pratique en effet.

Dit moi, j'essaie de transposer ton tableau d'ordonnée pour l'obtenir non pas en lignes mais en colonnes...Mais je n'y parviens pas.

Pourrais tu m'indiquer comment procéder ? Je tente avec "Application.Transpose(tablOrd)" mais sans résultat.

La encore je n'ai jamais travaillé avec des tableaux uni ou bidimensionnels, statique ou dynamique. C'est pas ma tasse on dirais bien^^ Un petit coup de main ne serait pas de refus.

D'avance merci.

André
 

eriiic

XLDnaute Barbatruc
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Re,

Je tente avec "Application.Transpose(tablOrd)" mais sans résultat.
Pourtant c'est bien ça.
N'oublie pas de sélectionner plusieurs cellules en colonne avant et de valider avec shift+ctrl+entrée...

Je te le met avec un ajout de paramètre optionnel : enColonne
- omis ou FAUX : restitue en ligne
- VRAI : restitue en colonne

Code:
Function interpolation(datasX As Range, datasY As Range, valeur As Double, Optional enColonne As Boolean = False) As Variant
    Dim lig As Long, pente As Double, ordonnéeOri As Double, ordonnéePt As Double, tablOrd As Variant, ptr As Long
    ' tableau de stockage des ordonnées des intersections
    ReDim tablOrd(10)
    ' pointeur d'intersections
    ptr = 1
    ' pour chaque ligne de données
    For lig = 1 To datasX.Rows.Count - 1
        ' si l'abcisse et la suivante encadre la valeur recherchée
        If (datasX(lig, 1) >= valeur And datasX(lig + 1, 1) <= valeur) Or (datasX(lig, 1) <= valeur And datasX(lig + 1, 1) >= valeur) Then
            ' calcul de la droite de régression linéaire
            pente = Application.WorksheetFunction.Slope(datasY(lig, 1).Resize(2, 1).Value, datasX(lig, 1).Resize(2, 1).Value)
            ordonnéeOri = WorksheetFunction.Intercept(datasY(lig, 1).Resize(2, 1).Value, datasX(lig, 1).Resize(2, 1).Value)
            ' évaluation de l'ordonnée
            ordonnéePt = pente * valeur + ordonnéeOri
            ' si l'ordonnée calculée est dans les critères
            If ordonnéePt <= 0.0000005 And ordonnéePt >= 0 Then
                ' stocker l'ordonnée
                tablOrd(ptr) = ordonnéePt
                ' ordonnée suivante
                ptr = ptr + 1
                ' si maxi intersection atteint, on sort
                If ptr > UBound(tablOrd) Then Exit For
            End If
        End If
    Next lig
    ' retourner la matrice de résultats
    If enColonne Then
        interpolation = Application.Transpose(tablOrd)
    Else
        interpolation = tablOrd
    End If
End Function
syntaxe :
=interpolation(DONNÉES!$B$4:$B$131;DONNÉES!$C$4:$C$131;E31) ' en ligne
ou
=interpolation(DONNÉES!$B$4:$B$131;DONNÉES!$C$4:$C$131;E31;VRAI) ' en colonne

eric
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Merci Eric pour l'aide. J'ai compris pourquoi sa ne marchait pas avec moi^^. Si je ne sélectionne pas de cellules en colonnes avant de faire shif+ctrl+entrée normal que sa ne fonctionne pas.

Je suis tout de même content d'avoir "presque" trouvé la solution de transposition^^. Je lâche pas le morceau et poursuis mon développement. Je reviendrais prochainement posté la version la plus à jour avec le formulaire et compagnie...Enfin si j'y arrive bien sur.

A demain sans doute.

André

Ps : Eric, de nouveau un grand merci pour ta rapidité et ta précision. Tu m'a vraiment bluffé par tes résultats. C'est cool.
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Approximation d'une courbe "particulière" sous Excel par une droite affine

Bon ben re-bonsoir du coup,

Me revoici. Je n'aurais pas fait long feu tout seul on dirait bien^^. Erci j'aurais à nouveau besoin d'un mini conseil de ta part si tu passe par la.

Comment peut on lancer ton code via une macro ?

J'ai essayé à partir de ceci mais sans résultat :

Code:
Sub TEST()

Range("H31:H35") = =interpolation(DONNÉES!$B$4:$B$131;DONNÉES!$C$4:$C$131;E31;VRAI)

End Sub

En gros pour moi je sélectionne 5 cellules en colonnes, et je fais exécuter la fonction interpolation qui est définie juste au dessus de mon module. Mais ma syntaxe semble désastreuse :rolleyes:

Vba me jette à tout vas, et toutes mes tentatives ont échouées. Pourtant je lui entre bien une plage X, une plage Y, une cellule contenant la valeur, et le terme optionnel pour mettre en colonne. Donc j'ai laissé en exemple la version basique.

Si quelqu'un saurait comment lancer la fonction via une macro je suis preneur.

Bien cordialement,

André
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
283

Statistiques des forums

Discussions
312 083
Messages
2 085 175
Membres
102 807
dernier inscrit
Routier78