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
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 0jai 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