Interpolation de valeurs

Bonjour à tous,

J'ai beau chercher, je ne trouve rien de concluant. Je vous explique mon souci :

Je dois, à partir de mesures (entre 5000 et 10000), créer des valeurs intermédiaires à celles mesurées. Celles-ci sont au millier près (ex : -15,891). Voilà un exemple en image pour vous faire une meilleure idée :

image

J'ai donc besoin de :

1- Arrondir à 10e-3 près. Ca c'est à peu près facile, je suis. en train de le rédiger.

2- Créer les valeurs intermédiaires entre chaque mesures, à 10e-3 près. Par exemple, entre les lignes 5 et 6, avoir les valeurs -17,116 puis -17,115 puis -17,114 ... jusqu'à -17,110 Il faut aussi que la colonne B suivent et que des valeurs hypothétiques mais véridiques soient créées.

Voici mes pistes :

(à savoir que pour accélérer le logiciel, j'ai créé une matrice appelé mes() avec le tableau ci-dessus enregistré dedans)

1- Utiliser quelque chose comme ça :

 Range("E12").Value = Round(Range("E12"), 2)        'En travaillant avec les cellules
'Ou plutôt
Do while i <= NombreDeMesures                       'En travaillant avec la matrice mes()
    mes(i, 2) = Round.mes(i, 2)                     'La 2nd colonne correspond à la B dans le tableau.
Loop

2- Utiliser la fonction PENTE sur 5 valeurs et faire des régressions linéaires toutes les 5 valeurs pour pouvoir interpoler plus tard les valeurs donc j'ai besoin. Sur cette partie là, je suis vraiment perdu donc je prend toute vos suggestions. (A savoir que j'ai à peu près 10000 lignes, donc si en plus ca peut ne pas prendre trop de temps c'est super)

Merci d'avance pour tout vos retours, je suis impatient d'avoir un 2nd avis sur ma problématique.

Félix

Edit : Je vous mets en plus un fichier pour que vous ayez quelque chose sur quoi vous appuyer.

6essaisvba.zip (109.75 Ko)
3essaisvba.zip (109.75 Ko)

Up !

bonjour,

Up !

tu es sur un forum où ce sont des bénévoles qui aident, alors soit patient.

voici une proposition pour le fichier que tu as envoyé.

Sub aargh()
    Set ws1 = Sheets("mesures brute")
    Set ws2 = Sheets.Add
    dl = ws1.Range("A5").End(xlDown).Row
    k = 0
    With ws1
        For i = 5 To dl
            x1 = Round(.Cells(i, 2), 3)
            y1 = .Cells(i, 3)
            k = k + 1
            ws2.Cells(k, 1) = ws1.Cells(i, 1)
            ws2.Cells(k, 2) = x1
            ws2.Cells(k, 3) = y1
            If i < dl Then
                x2 = Round(.Cells(i + 1, 2), 3)
                y2 = .Cells(i + 1, 3)
                pas = 0.001
                If x2 <> x1 Then
                pasy = pas * (y2 - y1) / (x2 - x1)
                For j = x1 + pas To x2 - pas Step pas 'on génère les valeurs manquantes par extrapolation linéaire sur l'intervalle.
                    k = k + 1
                    ws2.Cells(k, 2) = j
                    ws2.Cells(k, 3) = ws2.Cells(k - 1, 3) + pasy
                Next j
                End If
            End If
        Next i
    End With
End Sub

Bonjour,

Merci beaucoup de m'avoir répondu. J'ai relancé uniquement pour que mon message ne s'enfonce pas dans les tréfonds du forum, ça n'est en aucun cas une mise sous pression ou quelque chose dans ce sens là.

Je vais essayer de comprendre ta proposition, je reviendrais vers toi si j'ai des question et si tu es d'accord bien sur.

Bonjour, de retour sur ce p'tit programme...

J'ai changé la façon de faire car celle de h2so4 impliquait une erreur et faussait les valeurs. J'en suis retourné aux définitions d'une droite affine, et ça donne quelque chose comme ça (+fichier en PJ) :

Sub Interpolation()

Dim x1, x2, y1, y2 As Single, dl, k, i As Long, Pente, OrdOri, j As Single

Set ws1 = Sheets("Feuil1")

With ws1

dl = .Cells(.Rows.Count, "A").End(xlUp).Row

k = 1

For i = 1 To dl
    x1 = Round(.Cells(i, 1), 3)
    y1 = Round(.Cells(i, 2), 3)
    k = k + 1

        If i < dl Then
        x2 = Round(.Cells(i + 1, 1), 3)
        y2 = Round(.Cells(i + 1, 2), 3)
        pas = 0.001

                For j = x1 + pas To x2 Step pas

                Pente = (y2 - y1) / (x2 - x1)
                OrdOri = y1 - Pente * x1
                k = k + 1
                .Cells(k, 1) = j
                .Cells(k, 1) = Round(.Cells(k, 1), 3)
                .Cells(k, 2) = Round(Pente * j + OrdOri, 3)

                Next j
        End If

Next i

End With

End Sub

Problème : ce programme ne fonctionne que pour les deux premières lignes de mon tableau, et j'en ai +/- 25000 à traiter... Est-ce qu'un.e de vous comprend comment faire pour résoudre mon soucis ? Et si oui, est-ce que c'est possible de me l'expliquer, que je comprenne mes erreurs ?

Cahier des charges : créer une interpolation dans les colonnes A et B sur les mesures dans les colonnes D et E, avec un pas variable en cellule E18.

Merci d'avance pour votre temps !

bonjour,

avec ces instructions tu écris sur tes données de base, que tu prends ensuite comme valeur pour tes calculs suivants

.Cells(k, 1) = j
.Cells(k, 1) = Round(.Cells(k, 1), 3)
.Cells(k, 2) = Round(Pente * j + OrdOri, 3)

écris tes données retravaillées dans une autre feuille ou dans d'autres colonnes.

Super merci !

Rechercher des sujets similaires à "interpolation valeurs"