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