Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 RESOLU Remontée une valeur avec 2 critères dont une date max

chris6999

XLDnaute Impliqué
Bonjour

Je souhaiterais afficher le contenu d'une cellule correspondant à un critère commun pour la date la plus récente
J'essaye d'utiliser la fonction SOMMEPROD qui ne donne pas de résultat

Explications:
Dans mon onglet "Recherche" j'ai une liste de critères.
Je souhaiterais dans cet onglet faire remonter colonne C, le dernier commentaire annoté dans la feuille "Listes traitements" pour le critère commun (colonne REF) .

Car lorsque je fais une fonction recherchev c'est le premier commentaire de la liste qui s'affiche.

Là je cale..Je ne sais même pas si c'est possible.

Autre contrainte j'aimerais éviter les formules matricielles car je vais utiliser cette formule dans un code VBA
Merci par avance pour votre aide
Bonne soirée
 

Pièces jointes

  • test sommeprod avec date max.xlsx
    11 KB · Affichages: 14
Dernière édition:

Dugenou

XLDnaute Barbatruc
Bonjour,
Une proposition avec une formule matricielle en pj
A votre disposition si besoin de plus d'explication que ce qui est dans le fichier.
Cordialement
 

Pièces jointes

  • chris6999 date max.xlsx
    11.9 KB · Affichages: 15

R@chid

XLDnaute Barbatruc
Supporter XLD
Bonsoir @ tous,
Salut Dugenou,

T'es sous Excel 365, alors pourquoi pas cette simple formule, en C5 :
VB:
=RECHERCHEX(B5:B15;'Listes traitements'!B3:B45;'Listes traitements'!C3:C45;"--Neant--";0;-1)

Tu n'as pas besoin d'incrémenter ni vers le bas ni vers le haut.


Cordialement
 

chris6999

XLDnaute Impliqué
Bonjour,
Une proposition avec une formule matricielle en pj
A votre disposition si besoin de plus d'explication que ce qui est dans le fichier.
Cordialement

Bonjour et merci pour cette proposition intéressante mais comme le précisait mon mon message je souhaitais éviter les matricielles même si je savais que ce c'était difficile à faire sans pour ce type de recherche.
Je garde votre formule dans ma bibliothèque car elle pourras sans doute me servir dans un autre projet.
Merci encore pour votre aide
Bonne journée
 

chris6999

XLDnaute Impliqué
Bonsoir @ tous,
Salut Dugenou,
T'es sous Excel 365, alors pourquoi pas cette simple formule, en C5 :
VB:
=RECHERCHEX(B5:B15;'Listes traitements'!B3:B45;'Listes traitements'!C3:C45;"--Neant--";0;-1)

Alors là que dire? Juste un énorme merci pour m'avoir orienté vers cette nouvelle évolution d'Excel qui répond non seulement à mon besoin actuel mais qui va sans doute bouleverser mes recherches de valeurs en tous genres.

C'est un peu de magie que tu m'envoies aujourd'hui..J'adore
Très bonne journée à toi
 

job75

XLDnaute Barbatruc
En VBA on n'utilisera surtout pas des formules Excel.

Voyez le fichier joint et le code dans la feuille "Recherche" :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [B:C] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B5:C" & Rows.Count)) Is Nothing Then Exit Sub
Dim r As Range, d As Object, dd As Object, tablo, i&, dat, x$
Set r = Intersect(Target.EntireRow, Range("B5:C" & Rows.Count), UsedRange)
If r Is Nothing Then Exit Sub
'---analyse de la 1ère feuille---
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set dd = CreateObject("Scripting.Dictionary")
dd.CompareMode = vbTextCompare 'la casse est ignorée
tablo = Feuil1.[A2].CurrentRegion.Resize(, 3) 'matrice, plus rapide
For i = 2 To UBound(tablo)
    dat = tablo(i, 1)
    If IsDate(dat) Then
        dat = CDate(dat)
        x = tablo(i, 2)
        If dat > d(x) Then d(x) = dat: dd(x) = tablo(i, 3)
    End If
Next i
'---tableau de cette 2ème feuille---
Application.EnableEvents = False 'désactive les évènements
For Each r In r.Areas 'si entrées/effacements multiples (copier-coller)
    tablo = r 'matrice, plus rapide, sur cellules jointives
    For i = 1 To UBound(tablo)
        tablo(i, 2) = dd(tablo(i, 1))
    Next i
    r = tablo 'restitution
Next r
Application.EnableEvents = True 'réactive les évènements
End Sub
La macro Worksheet_Change s'exécute quand on modifie des cellules en colonnes B ou C ou quand on active la feuille.

Utilisant un tableau VBA et 2 Dictionary elle est très rapide.
 

Pièces jointes

  • date max VBA(1).xlsm
    21.7 KB · Affichages: 10
Dernière édition:

Discussions similaires

Réponses
40
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…