Valeur d'un test en fonction de la date et du nom de l'échantillon

Bonjour,

Il s'agit de mon premier post sur le forum, j'espère que ma question sera compréhensible.

Cela fait 2 jours que je bloque sur une formule Excel.

Pour que ce soit plus simple, vous trouverez mon fichier ci-dessous.

Je recherche une formule pour me prendre le test 3 à la date la plus récente en fonction d'un nom choisi.

Actuellement, j'arrive à retrouver la date la plus récente en fonction du nom choisi avec une fonction MAX(SI()) mais je ne vois pas comment récupérer le test 3 qui se trouve sur la même ligne que cette date.

J'ai essayé avec une fonction INDEX() et EQUIV() mais je me retrouve coincé lorsque j'ai plusieurs noms qui correspondent à la même date.

Exemple : Pour OB-A01, je dois retrouver la valeur 448 et la date 02/01/2021.

Merci d'avance.

5fichier-1.xlsx (133.54 Ko)

Bonjour,

Si ta version d'Excel est 2019 tu ne devrais pas avoir besoin de valider tes formules matricielles avec Ctrl+Shift+Enter, il me semble. Tu pouvais aussi utiliser MAX.SI.ENS()

Pour ta question, essaie en J2 :

=INDEX($E$2:$E$3740;EQUIV(H2&I2;$A$2:$A$3740&$B$2:$B$3740;0))

et teste la validation "normale", tant qu'à faire
Convertir ta plage A1:E3740 en tableau évitera de devoir modifier la formule en cas d'ajout de lignes

Merci pour ta réponse, ça fonctionne parfaitement

Bonjour le fil, bonjour le forum,

Par formule je ne sais pas faire. Si une proposition VBA t'intéresse, en pièce jointe ton fichier modifié avec le code ci-dessous :

Sub ThauTheme()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (tableau des Lignes)
Dim DR As Long 'déclare la variable DR (Date de référence)

Set O = Worksheets("Feuil2") 'définit l'onglet O
O.Range("H1").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes données
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 1)) = "" 'alimente le dictionnre D avec les données en colonne 1 de TV (nom)
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments de D sans doublons (les clés)
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
    DR = 0 'définit la date de référence DR (en entier long)
    K = K + 1 'incrémente K
    ReDim Preserve TL(1 To 3, 1 To K) 'redimensionne le tableau des lignes (3 lignes ,K colonnes)
    TL(1, K) = TMP(J) 'récupère dans la ligne 1 de TL l'élément J de TMP (le nom)
    For I = 2 To UBound(TV, 1) 'boucle 2 sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If TMP(J) = TV(I, 1) Then 'condition : si la donnée ligne I colonne 1 de TV est égale à l'élément J de TMP (même nom)
            If CLng(TV(I, 2)) > DR Then 'condition 2 : si la donnée ligne I colonne 2 de TV (la date convertie en entier long) est supérieure à DR
                DR = CLng(TV(I, 2)) 'DR devient la date ligne I colonne 2 de TV
                TL(2, K) = DR 'récupère DR dans la ligne 2 de TL
                TL(3, K) = TV(I, 5) 'récupère dans la ligne 3 de TL le "test 3" ligne I colonne 5 de TV
            End If 'fin de la condition'2
        End If 'fin de la condition 1
    Next I 'prochaine ligne de la boucle 2
Next J 'prochain élément de la boucle 1
'si K est supérieure à zéro, renvoie le tableau TL transposé dans H2 redimensionnée
If K > 0 Then O.Range("H2").Resize(K, 3).Value = Application.Transpose(TL)
With O.Columns(9) 'prend en compte la colonne 9 de l'onglet O(=> colonne I)
    .HorizontalAlignment = xlRight 'alignement
    .NumberFormat = "dd/mm/yyy" 'format date
End With 'fin de la prose en compte de la colonne 9 de l'onglet O
End Sub

Cique sur le bouton Action.

Le fichier :

Rechercher des sujets similaires à "valeur test fonction date nom echantillon"