VBA - Mini si

Bonjour,

je cherche désespéremment comment faire une fonction de type mini si dans laquelle je pourrais obtenir la date mini selon la référence d'un produit.

merci de votre aide

Bonsoir,

une solution via une fonction personnalisée

appel de la fonction mini_si(plage1,condition,plage2) où

plage1 est la plage sur laquelle s'applique la condition

condition est la valeur à rechercher

plage2 la valeur à afficher si la condition est vraie

Function mini_si(r1 As Range, v As String, r2 As Range)
    minsi = 1000000000#
    For Each c In r1
        If Not Left(v, 1) Like "[<,>,=]" Then
            If c = v Then If r2.Cells(c.Row, 1) < minsi Then minsi = r2.Cells(c.Row, 1)
        ElseIf Application.Evaluate(c.Value & v) Then
            If r2.Cells(c.Row, 1) < minsi Then minsi = r2.Cells(c.Row, 1)
        End If
    Next c
    If minsi <> 1000000000# Then mini_si = minsi Else minsi = "#n/a"
End Function

Version corrigée car pleine de bugs.

Bonsoir le fil, bonsoir le forum,

Une autre proposition :

Public Function Min_Si(Plage_Criteres As Range, Plage_Valeurs As Range, Critere As String) As Long
Dim TC As Variant 'déclare la variable TC (Tableau de cellules)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TV() As Variant 'déclare la variable TV (Tableau des Valeurs)

TC = Application.Union(Plage_Criteres, Plage_Valeurs) 'définit le tableau de cellules TC
For I = 1 To UBound(TC, 1) 'boucles sur toutes les lignes du tabelau de cellules TC
    If TC(I, 1) = Critere Then 'condition : si la valeur ligne I colonne 1 de TC est égale à la valeur du Critere
        ReDim Preserve TV(J) 'redimensionne le tableau des valeurs TV
        TV(J) = CInt(TC(I, 2)) 'récupère la valeur ligne I colonne 2 de TC
        J = J + 1 'incrémente J
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
'TV contient mainetenant toutes les valeurs du Critère désigné
Min_Si = Application.WorksheetFunction.Min(TV) 'renvoie la valeur mini du tableau TV
End Function

Il faut commencer par sélectionner la plage qui contient les références, puis la plage contenant les dates et pour finir, cliquer sur la référence qui définit le Critère. La cellule contenant la formule doit ête au format date sinon elle renvoie le numéro de série de la date...

Bonjour,

merci de vos réponses, par contre, pouvez-vous me donner le code afin d'appeler la fonction?

Voila la formule que j'utilise :

{=MIN(SI([FBREFS]=[@FBREFS];[DATE RUPTURE]))}

ou FBREFS est la colonne B

et DATE RUPTURE est la colonne L au format "Date"

Mon tableau comporte 2600 lignes

Merci encore de votre aide

Bonjour le fil, bonjour le forum,

Pour ma proposition,

• tu te places dans la cellule où tu veux obtenir le résultat

• tu tapes : =Min.Si(

• tu sélectionnes la colonne B

• tu tapes : ; (point,virgule)

• tu sélectionnes la colonne L

• tu tapes : ; (point,virgule)

• dans la colonne B, tu cliques sur la cellule (ou une des cellules) contenant la référence (ou tu tapes sa valeur)

• tu tapes : )

• tu valides avec la touche [entrée]

Ce n'est pas une formule matricielle.

Si ça ne fonctionne pas il nous faudra un petit fichier exemple pour comprendre ou est l'erreur...

Rechercher des sujets similaires à "vba mini"