Salut à tous,
Je suis rendu à un point ou j'ai besoin de votre aide et conseil :
Je souhaite récupérer une valeur issue d'un tableau à trois entrées (en gras). 2 en ordonnée et une en abscisse.
Il m'est nécessaire de faire des interpolations dans ce tableau. J'arrive parfaitement à faire des interpolation linéaire à une dimension et deux dimensions, mais dans ce tableau particulier, il faut que je redimensionne le tableau, pour faire deux interpolation à 2 dimension, puis refaire une interpolation linéaire..4 8 10 14 20 30 45 60 90 120 1 50000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1 100000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1 200000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1 400000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1 2000000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2 50000 0.55 0.65 0.68 0.74 0.82 0.92 1.05 1.10 1.08 1.08 2 100000 0.51 0.61 0.66 0.73 0.81 0.90 1.04 1.09 1.08 1.08 2 200000 0.47 0.57 0.61 0.70 0.79 0.89 1.04 1.09 1.08 1.08 2 400000 0.42 0.50 0.56 0.64 0.76 0.88 1.02 1.07 1.08 1.08 2 2000000 0.42 0.50 0.56 0.64 0.76 0.88 1.02 1.07 1.08 1.08 4 50000 0.38 0.53 0.60 0.69 0.78 0.90 1.02 1.07 1.09 1.09 4 100000 0.33 0.49 0.55 0.66 0.78 0.90 1.02 1.07 1.09 1.09 4 200000 0.27 0.42 0.50 0.62 0.74 0.87 1.00 1.06 1.08 1.08 4 400000 0.22 0.36 0.44 0.56 0.70 0.84 0.99 1.06 1.08 1.08 4 2000000 0.22 0.36 0.44 0.56 0.70 0.84 0.99 1.06 1.08 1.08 6 50000 0.34 0.50 0.57 0.66 0.77 0.91 1.02 1.07 1.08 1.08 6 100000 0.30 0.47 0.54 0.63 0.76 0.98 1.02 1.07 1.08 1.08 6 200000 0.24 0.42 0.48 0.60 0.73 0.88 1.00 1.06 1.08 1.08 6 400000 0.18 0.34 0.44 0.56 0.73 0.86 0.98 1.06 1.08 1.08 6 2000000 0.18 0.34 0.44 0.56 0.73 0.86 0.98 1.06 1.08 1.08 10 50000 0.30 0.45 0.53 0.64 0.74 0.85 0.97 1.10 1.12 1.12 10 100000 0.25 0.40 0.48 0.62 0.73 0.85 0.97 1.10 1.12 1.12 10 200000 0.20 0.34 0.44 0.56 0.69 0.82 0.95 1.10 1.11 1.11 10 400000 0.16 0.28 0.40 0.55 0.67 0.80 0.93 1.09 1.11 1.11 10 2000000 0.16 0.28 0.40 0.55 0.67 0.80 0.93 1.09 1.11 1.11
Je ne suis pas capable de redimensionner les tableaux en passant par vba, pour pouvoir faire chaque interpolation à 2 dimensions dans les tableaux suivants (pour une valeur de première ordonnée de 5 par exemple) tel que souhaité
et4 8 10 14 20 30 45 60 90 120 4 50000 0.38 0.53 0.60 0.69 0.78 0.90 1.02 1.07 1.09 1.09 4 100000 0.33 0.49 0.55 0.66 0.78 0.90 1.02 1.07 1.09 1.09 4 200000 0.27 0.42 0.50 0.62 0.74 0.87 1.00 1.06 1.08 1.08 4 400000 0.22 0.36 0.44 0.56 0.70 0.84 0.99 1.06 1.08 1.08 4 2000000 0.22 0.36 0.44 0.56 0.70 0.84 0.99 1.06 1.08 1.08
Un point important est que ma macro est activée par une FUNCTION et non pas par une SUB ce qui ne me permet pas de faire des copier coller de range dans une autre feuille (ou alors c'est que je n'ai pas réussi)4 8 10 14 20 30 45 60 90 120 6 50000 0.34 0.50 0.57 0.66 0.77 0.91 1.02 1.07 1.08 1.08 6 100000 0.30 0.47 0.54 0.63 0.76 0.98 1.02 1.07 1.08 1.08 6 200000 0.24 0.42 0.48 0.60 0.73 0.88 1.00 1.06 1.08 1.08 6 400000 0.18 0.34 0.44 0.56 0.73 0.86 0.98 1.06 1.08 1.08 6 2000000 0.18 0.34 0.44 0.56 0.73 0.86 0.98 1.06 1.08 1.08
Par exemple avec une macro trouvée sur excellabo, elle marche dans une Sub mais pas dans une fonction après l'avoir réadapter à mes besoins. Cependant, il est encore nécessaire de récupérer la première ligne du tableau ci dessus.
Avez vous des suggestions ?
Merci de votre générosité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Sub TransfertConditionnel() 'Flo Cabon Excelabo 2013 Dim Temp Dim Tblo Dim i As Long, j As Long, k As Long Tblo = Application.WorksheetFunction.Transpose(Range("A1:B8").Value) 'on peut également écrire application.transpose(... 'comme dans la feuille de calcul copier/collage spécial transposer, 'cette fonction inverse les lignes et les colonnes. Donc ici en une seule 'opération, on remplit l'array avec une transposition de la plage j = 0 For i = 1 To UBound(Tblo, 2) 'boucle externe sur la 2° dimension de l'array, correspondant donc aux lignes de la feuille If IsNumeric(Tblo(1, i)) Then 'ou tout autre test de condition de votre choix j = j + 1 For k = 1 To UBound(Tblo, 1) 'boucle sur la 1° dimension de l'array, les colonnes de la feuille Tblo(k, j) = Tblo(k, i) 'cette instruction permet de réindexer les éléments répondant 'à la condition testée et ignore les autres Next End If Next ReDim Preserve Tblo(1 To UBound(Tblo, 1), 1 To j) Temp = Application.Transpose(Tblo) Range("G1").Resize(UBound(Temp, 1), UBound(Temp, 2)).Value = Temp Erase Tblo End Sub
Partager