Fonction arrayMax qui ne fonctionne pas

Bonjour à toutes et à tous,

Je développe un code sur Excel pour automatiser des tests.

Concrètement je calcule des valeurs que je rentre dans un tableau A à double entrée (2 colonnes, plusieurs lignes), ces valeurs sont positives ou négatives. Puis dans une nouvelle table, j'inscris les lignes de la table A pour lesquelles les 2 valeurs de la même ligne sont positives. Dans le Tableau C, j'inscris la valeur min entre chaque duo de la table B. Enfin dans ma variable bestVal je récupère la valeur max du tableau C. J'ai mis en copie un schéma qui précise le process.

Mon problème est que peu importe les valeurs que j'utilise pour mes calculs de départ, la variable bestVal affiche toujours 0.. Je ne vois pas du tout oùest le problème. J'ai checké mon tableau C et j'ai bien des valeurs dedans.

Je précise que j'ai bien installé le pack de fonction XLP et qu'il fonctionne (je l'ai essayé avec un autre tableau).

Je pense que mon problème vient de me boucles mais impossible de voir où ....

Si qqun a un petit peu de temps pour jeter un oeil, je suis preneur ;)

Merci

Sub Moulinette()
'Déclaration variables
Dim i As Integer
Dim j As Integer
Dim r As Integer
Dim s As Integer
Dim t As Integer
Dim u As Integer
Dim v As Integer
Dim w As Integer
Dim table(219, 1) As Double
Dim table_hit(219, 1) As Double
Dim table_hit_valmin(219) As Double
Dim bestVal As Double
'Calculs

'Calculs des gains nets et ajout des résultats dans la table : table (Tableau A)
    For w = 0 To 0
        For i = 0 To 219
            'calculs à partir de séries de données numériques dans le classeur
            table(i, 0) = Worksheets("Exemple").Cells(i + 4, 1) + Worksheets("Exemple").Cells(4, 3) - Worksheets("Exemple").Cells(i + 4, 5) - Worksheets("Exemple").Cells(4, 6)
            table(i, 1) = Worksheets("Exemple").Cells(i + 4, 2) + Worksheets("Exemple").Cells(4, 4) - Worksheets("Exemple").Cells(i + 4, 5) - Worksheets("Exemple").Cells(4, 6)
        Next
    'Envoie des hit (Valeurs positives dans les 2 cas) vers la table tableau_hit (Tableau B)
        Do While s <> 220
            If table(s, 0) > 0 And table(s, 1) > 0 Then
                table_hit(r, 0) = table(s, 0)
                table_hit(r, 1) = table(s, 1)
                r = r + 1
            End If
            s = s + 1
        Loop
        s = 0
    'Envoie des valeurs mini entre les 2 résultats possibles vers la table_hit_valmin (Tableau C)
        For u = 0 To 219
            If table_hit(u, 0) > table_hit(u, 1) Then
                table_hit_valmin(u) = table_hit(u, 1)
            Else
                table_hit_valmin(u) = table_hit(u, 0)
            End If
        Next
    'Envoie la valeur max de la table table_hit_valmin (tableau C) dans la variable bestVal
        bestVal = arrayMax(table_hit_valmin)
        Cells(1, 5) = bestVal 'Sauf qu'ici j'ai toujours la valeur 0...
    Next
End Sub
capture

Bonjour,

Sans le classeur, pas facile de tester... Essayer avec :

    bestVal = WorksheetFunction.Max(table_hit_valmin)

A+

Merci !!!! Ca fonctionne :) Franchement c'est top !

C'est quoi la différence entre WorksheetFunction.Max et arrayMax du coup ?

Pas sûr qu'il y en ait ...

arrayMax n'est pas natif . Cette fonction fait partie d'un addin et est décrite comme ceci:

La fonction VBA arrayMax renvoie la plus grande valeur numérique présente dans le tableau.

voir :https://www.excel-pratique.com/fr/fonctions-complementaires/array-max

WorksheetFunction.Max est l'utilisation VBA de la fonction de feuille de calcul Max. Appliquée à un Tableau elle produit (théoriquement...) le même effet que arrayMax :

extrait de l'aide Excel

Si un argument est une matrice ou une référence, seuls les nombres de cette matrice ou de cette référence sont utilisés. Les cellules vides, les valeurs logiques ou le texte contenus dans la matrice ou la référence ne sont pas pris en compte.

    Ok je vois, je fais fais plusieurs dizaines de test, le temps de traitement risque peut être d'en prendre un coup?

    Axel

    après initialisation d'un tableau de 50000 nombres, la recherche du max, répétée 50 fois, demande un peu plus d'une demie seconde.

    Si le tableau n'est initialisé que de 500 nombres, la recherche du max (50 fois) est quasi instantanée

    Et comme le tableau table_hit_valmin est dimensionné à 220 éléments ça devrait aller plus vite que "instantané"

    Par ailleurs, pas compris :

    For w = 0 To 0

    jai un loupé dans mon dernier message, je fais plusieurs dizaines milliers de test (env 50000).

    le w=0 to 0 évite pour l'instant que je fasse trop de tests et que la macro plante

    Rechercher des sujets similaires à "fonction arraymax qui fonctionne pas"