Afficher la date la plus récente en fonction de critères

Bonjour, je cherche une formule qui affiche la date la plus récente de livres dont certains ont plusieurs éditions -(chainage jusqu'à 3).

Le tableau se compose de 5 colonnes , avec :

-En A :la liste des codes actuels,- en B , l'ancien code, qui correspond à l'ouvrage précédent

- en colonne C la désignation (se termine toujours par une date au format texte)

en D la date extraite de la désignation. Je voudrais le résultat en colonne E

J'ai utilisé la formule conditionnelle = max (si _

mais j'ai une erreur sur le livre qui comporte 3 éditions. Comment faire ? Utiliser MAX.SI.ENS ? Un code VBA ?

Voici le détail pour illustrer cette demande en P.J .

Merci !

Bonsoir,

ceci m'a l'air de fonctionner, à mettre en ligne 2 et étirer vers le bas ;

=MAX(SI((A$2:A$13=SIERREUR(INDEX($A$2:$A$13;PETITE.VALEUR(SI((A$2:A$13=A2)+(B$2:B$13=A2);LIGNE($A$2:$A$13)-1);1));"X"))+(B$2:B$13=SIERREUR(INDEX($A$2:$A$13;PETITE.VALEUR(SI((A$2:A$13=A2)+(B$2:B$13=A2);LIGNE($A$2:$A$13)-1);1));"X"))+(A$2:A$13=SIERREUR(INDEX($A$2:$A$13;PETITE.VALEUR(SI((A$2:A$13=A2)+(B$2:B$13=A2);LIGNE($A$2:$A$13)-1);2));"X"))+(B$2:B$13=SIERREUR(INDEX($A$2:$A$13;PETITE.VALEUR(SI((A$2:A$13=A2)+(B$2:B$13=A2);LIGNE($A$2:$A$13)-1);2));"X"));D$2:D$13))

Bonjour à tous !

Une approche avec Power Query :

La requête détermine, à partir du tableau structuré ("tSource") l'année de parution et l'année la plus récente de l'ouvrage.

Notes :

  1. J'ai un doute quant à l'intégration de l'opérateur de coalescence dans Excel 2019. Son absence nécessiterait une petite modification du code.
  2. Concernant l’obsolescence de votre Excel 2019, Microsoft a récemment indiqué cesser tout support (technique et sécurité) dans les mois à venir (septembre ou octobre ?).

Bonjour GENEU, à tous,

Une fonction VBA appelée par =DerniereEdition(DES, PLAGE) où DES est la désignation d'une édition et PLAGE est la plage de l'ensemble des désignations. Exemple en D2 : =DerniereEdition(C2;$C$2:$C$13)

Le code (un peu commenté) de la fonction est dans Module1 :

Function DerniereEdition(ByVal DES As String, PLAGE As Range) As Long
Dim t, titre As String, i As Long, annee As String, derED As Long
   DES = Trim(UCase(DES))        ' passage en majuscule sans espace ni devant ni derrière
   If DES Like "*N°#*" Then      ' si le mot comporte un N° d'édition
      titre = Trim(Left(DES, InStr(1, DES, "N°", vbTextCompare) - 1))   ' le titre
   ElseIf DES Like "*ED.*" Then  ' sinon si le mot comporte une année d'édition
      titre = Trim(Left(DES, InStr(1, DES, "ED.", vbTextCompare) - 1))  ' le titre
   Else
      DerniereEdition = 0: Exit Function ' aucun des 2 cas précédents
   End If

   With PLAGE                 ' avec la plage des désignations
      t = PLAGE.Value         ' array des désignations
      For i = 1 To UBound(t)  ' boucle sur la tableau des désignations
         t(i, 1) = Trim(UCase(t(i, 1)))   ' passage en majuscule sans espace ni devant ni derrière
         ' si le bon titre, on regarde si l'année est plus récente, si oui on la mémorise
         If Left(t(i, 1), Len(titre)) = titre Then If CLng(Right(t(i, 1), 4)) > derED Then derED = CLng(Right(t(i, 1), 4))
      Next i
   End With
   DerniereEdition = derED    ' affectation du résultat
End Function

Bonjour,

TT d'abord un grand merci pour votre support et le temps que vous y avez consacré La première solution est OK, la formule fonctionne bien sur les 13 lignes, mais , ma feuille totalisant près de 400 lignes , j'ai du l'adapter en remplaçant $13 par $ 385 , cependant elle affiche 0 pour les cas qui n'ont qu'une seule version. Concernant la mise à jour de mon Excel 2019, je préfère me rapprocher de mon support informatique JFL . Pour la solution via l'éditeur Power query , pour la mise à jour Excel 2019 , je vois que les résultats sont OK ça m'a donné l'occasion de découvrir une fonctionnalité que je ne connais pas . Merci pour la solution 3 avec le code en fonction explicite. Elle fonctionne parfaitement sur toute la longueur du fichier Grâce à tes commentaires , j'essaie de m'approprier le code ! Bonne journée à tous

Bonjour,

TT d'abord un grand merci pour votre support et le temps que vous y avez consacré La première solution est OK, la formule fonctionne bien sur les 13 lignes, mais , ma feuille totalisant près de 400 lignes , j'ai du l'adapter en remplaçant $13 par $ 385 , cependant elle affiche 0 pour les cas qui n'ont qu'une seule version. (...)

Bonjour,

étonnant, vous ne voyez donc pas 2008 pour la première ligne ? Le code LIVRE-003492 n'est pourtant présent qu'une seule fois.

excel date la plus recente par geneu c

bonjour

pour le fun

cordialement

18geneu.xlsm (22.16 Ko)

Bonjour à tous de nouveau !

Bien...

Je vous remercie de ce retour.

Re bonjour à tous et à DR, Je viens de prendre connaissance de votre message. Excellente remarque ! Oupps ! Autant pour moi, mais oui vous avez raison le code 003492 n'est présent qu'une seule fois en + en première ligne

je viens de reprendre le tableau d'hier soir, n'ayant pas conservé la version vérif. de ce matin et ait étendu la sélection en ligne 26 voir en P.J

=>Tout est nickel !

La seule erreur constatée est de mon côté? si la désignation en C n'est pas complétée par l'année en fin de chaine, alors l’expression "valeur !" s'affiche en D et E mais pas de valeur 0. Il devait donc y avoir des incohérences dans mon fichier source de mon côté et m'en excuse ! Dans le cas où je retrouve des occurences de 0

en retravaillant le fichier par la suite je pourrais toujours partager cette cause d'erreur.

Encore merci pour votre solution et le gain de temps ainsi généré

Merci aussi Tulipe_4 oui c vraiment le fun, je crois que je place votre formule en N° de ma liste ! mais en tout cas merci à tous

bonne soirée à tous

Merci aussi Tulipe_4 oui c vraiment le fun, je crois que je place votre formule en N° de ma liste ! mais en tout cas merci à tous

bonne soirée à tous

merci

mes connaîssances moyennes m'obligent à être créatif

Salut,

bonjour

pour le fun

cordialement

18geneu.xlsm (22.16 Ko)

Alors celle-là j'ai bien du mal à la comprendre, tu pourrais l'expliquer ?

Je vois que la partie CHERCHE({"N°"."ED"};TRANSPOSE(C$2:C$13)) renvoie toujours 11 en 2ème position, je ne comprends pas pourquoi.

Ni comment ça renvoie le bon résultat au final sans tenir compte des colonnes A et B.

edit : en la revoyant, je pense la comprendre : on exclut les parties différentes des noms et on compare les lignes ayant le même nom. Bien vu mais ça me semble un peu risqué dans la mesure où les éditions d'un même ouvrage peuvent avoir des noms commençant par un mot différent (sans doute très rare, j'admets).

Bonjour à tous !

.......mais ça me semble un peu risqué dans la mesure où les éditions d'un même ouvrage peuvent avoir des noms commençant par un mot différent......

J'avais exploré une requête basée sur la similitude des titres. Piste abandonnée pour la raison évoquée sans parler des éventuels titres équivalents mais concernant des ouvrages différents.

Salut,

bonjour

pour le fun

cordialement

18geneu.xlsm (22.16 Ko)

Alors celle-là j'ai bien du mal à la comprendre, tu pourrais l'expliquer ?

Je vois que la partie CHERCHE({"N°"."ED"};TRANSPOSE(C$2:C$13)) renvoie toujours 11 en 2ème position, je ne comprends pas pourquoi.

Ni comment ça renvoie le bon résultat au final sans tenir compte des colonnes A et B.

edit : en la revoyant, je pense la comprendre : on exclut les parties différentes des noms et on compare les lignes ayant le même nom. Bien vu mais ça me semble un peu risqué dans la mesure où les éditions d'un même ouvrage peuvent avoir des noms commençant par un mot différent (sans doute très rare, j'admets).

c'est vrai , en tablant sur les textes en col C ; c'est risqué

pour l'affaire "mystérieuse"

tu saisis à part le tronçon INDEX(...... ;; et là tu vas voir que ça sort 2 colonnes ; mais selon la position de N° et ED dans la formule CHERCHE, ça ne pète plus les mêmes résultats

dans l'exemple ,mon but était de virer les N° dans désignation

néanmois , je pense qu'en indexant( colonne +ligne() /1000) les colonnes Aet B ,on doit pouvoir sortir une matrice colonne unique ,qui servirait de base pour recuperer le Max en col D ,,,, faisable mais "sportif"

Salut,

pour l'affaire "mystérieuse"

tu saisis à part le tronçon INDEX(...... ;; et là tu vas voir que ça sort 2 colonnes ; mais selon la position de N° et ED dans la formule CHERCHE, ça ne pète plus les mêmes résultats

Même en faisant ça, je reste étonné du résultat de la partie CHERCHE qui ne renvoie qu'un chiffre pour toutes les lignes, toujours 11 pour la 2è ligne.

Je pensais qu'il y aurait un chiffre pour chaque ligne puisqu'elles contiennent toutes soit N° soit ED.

Salut,

pour l'affaire "mystérieuse"

tu saisis à part le tronçon INDEX(...... ;; et là tu vas voir que ça sort 2 colonnes ; mais selon la position de N° et ED dans la formule CHERCHE, ça ne pète plus les mêmes résultats

Même en faisant ça, je reste étonné du résultat de la partie CHERCHE qui ne renvoie qu'un chiffre pour toutes les lignes, toujours 11 pour la 2è ligne.

Je pensais qu'il y aurait un chiffre pour chaque ligne puisqu'elles contiennent toutes soit N° soit ED.

ben non ; parfois il y en a deux ;;; si N° et ED

Re,

Une formule (matricielle) en ligne 2 à recopier vers le bas :

=MAX(SI((GAUCHE(C2;SIERREUR(CHERCHE("N°";C2);CHERCHE("ED.";C2))-1))=GAUCHE(C$2:C$13;SIERREUR(CHERCHE("N°";C$2:C$13);CHERCHE("ED.";C$2:C$13))-1);1*DROITE(C$2:C$13;4);""))

ben non ; parfois il y en a deux ;;; si N° et ED

Oui, mais donc au moins un des deux, ce qui devrait renvoyer un n° de position pour chaque ligne. Mais voilà ce que je vois quand j'évalue J11 ;

excel date la plus recente par tulipe 4 pour geneu b eval j11

Et c'est pareil pour les autres lignes, ici J9 ;

excel date la plus recente par tulipe 4 pour geneu b eval j9

CHERCHE renvoie toujours 11.

Rechercher des sujets similaires à "afficher date recente fonction criteres"