XL 2016 retourner la valeur d'un donnée évoluant dans le temps à une date donnée

OA29

XLDnaute Nouveau
1670082216531.png
 

Pièces jointes

  • ClasseurOA29.xlsx
    11.1 KB · Affichages: 11
Solution
Bonsoir @OA29 :),
  • En colonne J, une formule pour Office 365.
  • En colonne K, une formule pour les autres versions. Formule matricielle à valider par la combinaison des trois touches Ctrl+Maj+Entrée au lieu de la seule touche entrée.
nota : on a supposé qu'une même personne ne pouvait pas emménager dans deux villes différentes le même jour !

Remarque : votre profil indique Excel 2016 mais vous utilisez dans votre classeur la fonction UNIQUE(). Il y a incohérence!

Évitez d'écrire le texte de votre demande tout en police "gras", svp.


1670085142153.png

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @OA29 :),
  • En colonne J, une formule pour Office 365.
  • En colonne K, une formule pour les autres versions. Formule matricielle à valider par la combinaison des trois touches Ctrl+Maj+Entrée au lieu de la seule touche entrée.
nota : on a supposé qu'une même personne ne pouvait pas emménager dans deux villes différentes le même jour !

Remarque : votre profil indique Excel 2016 mais vous utilisez dans votre classeur la fonction UNIQUE(). Il y a incohérence!

Évitez d'écrire le texte de votre demande tout en police "gras", svp.


1670085142153.png
 

Pièces jointes

  • OA29- ville selon date- v1.xlsx
    13.4 KB · Affichages: 9
Dernière édition:

OA29

XLDnaute Nouveau
Bonsoir mapomme ,

merci pour vos propositions qui fonctionnent parfaitement.

j'utilise 365 sur Mac à la maison, et 2016 sous Windows au travail ; les fichiers que je réalise doivent tourner sous 2016.
concernant la fonction "unique", c'est ma prochaine étape : trouver une parade pour obtenir le même résultat sous 2016...

je découvre la puissance des formules matricielles ; je vais approfondir la question.

cordialement
 

job75

XLDnaute Barbatruc
Bonsoir OA29, mapomme, bhbh,

Je n'ai pas Microsoft 365 alors j'utilise ces formules matricielles en I11 et J11 :
Code:
=INDEX(Tableau1[nom];PETITE.VALEUR(SI(NON(NB.SI(I$10:I10;Tableau1[nom]));LIGNE(INDIRECT("1:"&LIGNES(Tableau1))));1))
Code:
=SIERREUR(INDEX(Tableau1[ville];EQUIV(I11&RECHERCHE(J$7;PETITE.VALEUR(SI(Tableau1[nom]=I11;Tableau1[date emménagement]);LIGNE(INDIRECT("1:"&LIGNES(Tableau1)))));Tableau1[nom]&Tableau1[date emménagement];0));"")
A+
 

Pièces jointes

  • ClasseurOA29(1).xlsx
    12.3 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour le forum,

Pour terminer voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim datref As Date, tablo, d As Object, dd As Object, i&, nom$, dat, n&
datref = [DateRef] 'cellule nommée
tablo = [Tableau1].Resize(, 3) 'tableau structurée
Set d = CreateObject("Scripting.Dictionary")
Set dd = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
    nom = tablo(i, 1)
    dat = tablo(i, 3)
    If nom <> "" Then
        If Not d.exists(nom) Then d(nom) = "": dd(nom) = 0
        If IsDate(dat) Then
            dat = CDate(dat)
            If dat <= datref Then If dat > dd(nom) Then d(nom) = tablo(i, 2): dd(nom) = dat
        End If
    End If
Next
'---restitution---
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next
n = d.Count
With [Tableau2] 'tableau structuré
    .Columns(1).Resize(n) = Application.Transpose(d.keys) 'Transpose est limitée à 65536 lignes
    .Columns(2).Resize(n) = Application.Transpose(d.items)
    .Offset(n).Resize(.Rows.Count - n).Delete xlUp 'RAZ en dessous
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
Elle se déclenche quand on modifie ou valide une cellule quelconque.

A+
 

Pièces jointes

  • OA29 VBA(1).xlsm
    20.7 KB · Affichages: 1

Discussions similaires

Réponses
4
Affichages
300
Réponses
11
Affichages
490

Statistiques des forums

Discussions
314 486
Messages
2 110 107
Membres
110 666
dernier inscrit
Yaya123