Valeur MAX pour chaque colonne d'un tableau

Résolu/Fermé
debutante - 21 oct. 2013 à 11:37
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 - 24 oct. 2013 à 10:00
Bonjour,

je bloque sur un point et j'aimerais avoir votre aide la dessus svp, voici mon soucis:

dans une macro je fais la difference entre les valeurs de TCD et je stock le résultat dans une table DIFFTAB par devise(en colonne et par scenario ID en lignes comme ci-dessous


'On stocke dans un tableau les diff entre prod et test
Dim diffTab() As Double

ReDim diffTab(prodLastLine - 6, prodLastColumn - 2)

For i = 6 To prodLastLine - 1
For j = 2 To prodLastColumn - 1
diffTab(i - 5, j - 1) = Abs(prodTab(i - 5, j - 1) - testTab(i - 5, j - 1))
Next j
Next i



AU fait j'aimerais afficher dans un tableau final la valeur maximale par devise ( donc par colonne )


j'ai essayé certaines syntaxe genre max(range("A"))

mais ca ne me donne pas le résultat souhaité


qlq un aurait il une idée pour que je puisse inserer la fonction max dans ma boucle



merci d'avance


A voir également:

1 réponse

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
21 oct. 2013 à 11:54
Bonjour,

la valeur maximale par devise ( donc par colonne ):
ex:
x=Application.WorksheetFunction.Max(Range("A1:A12"))
0
bonjour

je vous remercie du retour

en effet j'avais essayé cette syntaxe mais ca répond pas parfaitement a ce dont j'ai besoin car la on fait le max dans un worksheet

moi je souhaite applique ce max sur le tableau DiffTab() don,t j'ai mis le code dans mon topic


au fait ce tableau fait la difference entre les valeurs de 2TCD et donc dans une boucle

je souhaiterais avant de faire un affichage de faire le MAX de la valeur trouvé dans chaque colonne du tableau DIFFtab()
en partant de cela application.worksheetfunction ne marche pas :(


merci pour l'aide
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
21 oct. 2013 à 13:37
Re,

A voir et adapter en fonction de ce que vous appelez colonne pour un tableau

Sub test()
Dim diffTab() As Double, Table_max()

ReDim diffTab(prodLastLine - 6, prodLastColumn - 2)
ReDim Table_max(prodLastLine - 6)

Erase Table_max

For i = 6 To prodLastLine - 1
For j = 2 To prodLastColumn - 1
diffTab(i - 5, j - 1) = Abs(prodTab(i - 5, j - 1) - testTab(i - 5, j - 1))
Next j
Next i

'recheche max par colonne tableau
For i = 6 To prodLastLine - 1
For j = 2 To prodLastColumn - 1
If diffTab(i - 5, j - 1) >= Table_max(j - 1) Then
Table_max(j - 1) = diffTab(i - 5, j - 1)
End If
Next j
Next i
End Sub
0
j'ai modifié votre code a ce niveau parce qu'au debut de la boucle le tableau table_max n'est pas encore initialisé

'recheche max par colonne tableau
For i = 6 To prodLastLine - 1
For j = 2 To prodLastColumn - 1
If diffTab(i - 5, j - 1) >= Table_max(j - 1) Then
Table_max(j - 1) = diffTab(i - 4, j - 1)
End If
Next j Next i
End Sub

vous en pensez quoi ?

'On stocke dans un tableau les diff entre prod et test
Dim diffTab() As Double
Dim Table_max() As Double

ReDim diffTab(prodLastLine - 6, prodLastColumn - 2)
ReDim Table_max(prodLastLine - 6, prodLastColumn - 2)
Erase Table_max

For i = 6 To prodLastLine - 1
For j = 2 To prodLastColumn - 1
diffTab(i - 5, j - 1) = Abs(prodTab(i - 5, j - 1) - testTab(i - 5, j - 1))
Next j
Next i

'recheche max par colonne tableau
For i = 6 To prodLastLine - 1
For j = 2 To prodLastColumn - 1
If diffTab(i - 4, j - 1) >= diffTab(i - 5, j - 1) Then
Table_max(i - 5, j - 1) = diffTab(i - 4, j - 1) ' erreur a ce niveau

End If
Next j
Next i

'Il reste à afficher le tout dans la feuille GENERAL

Dim generalWorksheet As Worksheet
Set generalWorksheet = ThisWorkbook.Worksheets("GENERAL")

generalWorksheet.Select
generalWorksheet.Range("B2").Resize(UBound(Table_max, 1), UBound(Table_max, 2)) = Table_max
generalWorksheet.Range("B1").Resize(1, UBound(ccyTab)) = ccyTab
generalWorksheet.Range("A2").Resize(UBound(scenarioTab), 1) = Application.Transpose(scenarioTab)
End Sub

du coup il me mets un msg dérreur 9 : l'indice n'appartient pas à la sélection
vous auriez une idée d'ou peut venir une erreur pareil svp

merci
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
21 oct. 2013 à 16:26
Re,

pourquoi

ReDim Table_max(prodLastLine - 6, prodLastColumn - 2)

alors que pour moi

ReDim Table_max(prodLastLine - 6) suffit !!!!!!!

l'indice n'appartient pas à la sélection Sur quelle ligne ???


A+
0
salut

j'ai fais le ReDim Table_max(prodLastLine - 6, prodLastColumn - 2) après l'affichage de l'erreur

car j'ai pensée que le tableau de resultat devrait etre de 2dimensions et contient plusieurs colonnes


la table initiale difftab() ressemble a cela :


devise / eur / dollars ..... ...... ....
scenarioID1 / 156 / 83
scenarioID2 / 25 / 90
scenarioID3 / 14 / 55
scenarioID4 / 96 / 30
scenarioID5 / 145 / 42
scenarioID6 / 2 / 13
..... ... .... /
..... ... ...
..... .... ..
scenarioID19 / 654 / 19


sinon l'erreur s'affiche au niveau de la ligne suivante :

'recheche max par colonne tableau
For i = 6 To prodLastLine - 1
For j = 2 To prodLastColumn - 1
If diffTab(i - 4, j - 1) >= diffTab(i - 5, j - 1) Then
Table_max(i - 5, j - 1) = diffTab(i - 4, j - 1) ' erreur a ce niveau End If
Next j
Next i


meme avec table_max(j-1) l'erreur s'affiche


merci bcp
0