Valeur MAX pour chaque colonne d'un tableau

Résolu
debutante -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
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

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    la valeur maximale par devise ( donc par colonne ):
    ex:
    x=Application.WorksheetFunction.Max(Range("A1:A12"))
    0
    1. debutante
       
      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
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    3. debutante
       
      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
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    5. debutante
       
      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