VBA Calcul matricielle Minimum positif

vivi4561

XLDnaute Junior
Bonjour,

Actuellement sous excel, j'utilise la formule ci contre pour récupérer la valeur minimum positif d'une liste :

Code:
{= MIN(SI((A1:A5>0)*(A1:A5);(A1:A5)))}


Savez vous comment je pourrais coder cela en VBA ? (je souhaite avoir directement le résultat dans une variable)


Merci d'avance pour votre aide,


Vince
 

david84

XLDnaute Barbatruc
Re : VBA Calcul matricielle Minimum positif

Re
pourquoi ne pas effectuer ton test conditionnel avant, par exemple en chargeant les valeurs de la plage dans un tableau en excluant les valeurs < ou = à 0, et ensuite tu utilises la fonction pour faire ta recherche.
As-tu un fichier exemple ?
A+
 

JNP

XLDnaute Barbatruc
Re : VBA Calcul matricielle Minimum positif

Bonjour le fil :),
pourquoi ne pas effectuer ton test conditionnel avant, par exemple en chargeant les valeurs de la plage dans un tableau en excluant les valeurs < ou = à 0, et ensuite tu utilises la fonction pour faire ta recherche.
David l'a pensé, je l'ai fait :p...
Code:
Sub Test()
Dim Tableau(), I As Integer, J As Integer
For I = 1 To 5
If Range("A" & I) > 0 Then
ReDim Preserve Tableau(J)
Tableau(J) = Range("A" & I).Value
J = J + 1
End If
Next I
MsgBox Application.WorksheetFunction.Min(Tableau)
End Sub
Bonne soirée :cool:
PS : c'est beau la communeauté de pensé ;)
 

JNP

XLDnaute Barbatruc
Re : VBA Calcul matricielle Minimum positif

Re :),
je n'aurais pas mieux fait (et pour cause vu que c'est toi qui me l'a expliqué:) (pensée également pour kjin à ce sujet)...).
Finalement, suite à ton MP, c'est toi qui aura le dernier mot :p...
Effectivement, j'avais toujours fui la fonction Evaluate (qui peut être syntaxée []), car je la trouve un peu imprécise, mais Ce lien n'existe plusque tu m'as envoyé m'a permis de tester, et effectivement, dans ce cas de figure, le code devrait encore mieux convenir à vivi4561 :rolleyes:...
Code:
Sub Test()
MsgBox [MIN(IF((A1:A7>0)*(A1:A7),(A1:A7)))]
End Sub
Dificile de faire plus compact :eek:...
Bonne soirée :cool:
 

vivi4561

XLDnaute Junior
Re : VBA Calcul matricielle Minimum positif

Salut JNP,

J'ai tenté ta nouvelle méthode et elle marche bien. Mais lorsque je veux stocker le résultat dans une variable cela ne marche pas :S

Code:
x = [MIN(IF(AF53:AF55>0)*(AF53:AF55),(AF53:AF55)))]

Étrange ....


Vince
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : VBA Calcul matricielle Minimum positif

Re
pas sûr de te comprendre (le VBA c'est nouveau pour moi:confused:) mais :
Code:
Sub test2()
x = [MIN(IF((A1:A7>0)*(A1:A7),(A1:A7)))]
MsgBox x
End Sub
te ramène bien 10...
Quel type de variable veux-tu récupérer ? Si c'est une variable Tableau, c'est vrai qu'avec Evaluate, cela est plus compliqué mais le tuto indiqué par JNP:) te donne une solution, sinon le plus simple est de placer ton exemple sur le fichier que tu as posté en expliquant ce que tu cherches à faire.
A+
 

JNP

XLDnaute Barbatruc
Re : VBA Calcul matricielle Minimum positif

Re :),
J'ai tenté ta nouvelle méthode et elle marche bien. Mais lorsque je veux stocker le résultat dans une variable cela ne marche pas
Bizarre, chez moi
Code:
Sub Test()
Dim X As Integer
X = [MIN(IF((A1:A7>0)*(A1:A7),(A1:A7)))]
MsgBox X
End Sub
fonctionne très bien (j'ai mis Integer vu que tu as des entiers). Tu peux essayer
Code:
Sub Test()
Dim X As Integer
X = [MIN(IF((A1:A7>0)*(A1:A7),(A1:A7)))] * 1
MsgBox X
End Sub
pour être sûr d'avoir du numérique :rolleyes:...
A moins que tu n'ai pas déclaré ta variable, mais même ainsi, ça marche chez moi :p...
Bon courage :cool:
 

vivi4561

XLDnaute Junior
Re : VBA Calcul matricielle Minimum positif

C'est vraiment bizarre car ça fonctionne très bien:
Code:
MsgBox [MIN(IF((AF53:AF55>0)*(AF53:AF55),(AF53:AF55)))]

mais lorsque je dis :

Code:
X = [MIN(IF(AF53:AF55>0)*(AF53:AF55),(AF53:AF55)))]

Cela m'affiche : Incompatibilité de type 13 (ma variable est bien définie en Integer):mad:.
 

david84

XLDnaute Barbatruc
Re : VBA Calcul matricielle Minimum positif

Re, salut JNP:),
Quelle type de données as-tu en AF53:AF55 ? es-tu sûr que ce sont des nombres ?
As-tu vérifié leur format ?
Peut-être à côté de la plaque mais au cas où, extrait de l'aide d'Excel :
Les arguments qui comportent des valeurs d'erreur ou du texte qui ne peuvent pas être convertis en nombres génèrent des erreurs.
Pour inclure des valeurs logiques et des transcriptions textuelles de nombres dans une référence dans le cadre du calcul, utilisez la fonction MINA.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 548
Messages
2 089 495
Membres
104 186
dernier inscrit
SEven22