Max value in named range

Bonjour,
J'essaie désespéremment de créer une fonction qui me permet de retrouver la valeur maximale attachée derrière un string (qui est une aire nommée). Dans mon workbook, je travaille avec beaucoup d'aires nommées et toutes commencent par un string similaire et terminent par un numéro qui permet d'identifier les différentes aires. J'ai donc créer la fonction ci-dessous. L'idée est d'insérer le string désiré comme argument afin de retrouver le numéro maximal.

Function max_index_name(areaname As String) As Integer
    For Each wname In ThisWorkbook.Names 'Looping through workbook names dictionnary
        lengthname = Len(areaname) 'Retrieve length of desired Name Area
        If Left(wname.Name, lengthname) = areaname Then 'If left side of the name = what we look for
            'then retrieve the maximum value from the right part of the name which contains the index value
            max_index_name = WorksheetFunction.Max(CInt(Right(wname.Name, Len(wname.Name) - lengthname)))
        End If
    Next wname
End Function

Pour une raison que je ne parviens toujours pas à identifier, la fonction ne me permet pas d'identifier les strings allant au delà de 9.

Est-ce que quelqu'un aurait une idée?

Merci d'avance,

Nathan

Bonjour,

Il ne manque pas quelques chose dans la fonction max, car sauf erreur de ma part, le max d'une seule valeur est égal à cette valeur ? Il faudrait plutôt faire le max entre le dernier max et la nouvelle valeur :

max_index_name = WorksheetFunction.Max(max_index_name, CInt(Right(wname.Name, Len(wname.Name) - lengthname)))

Une fois cette incohérence corrigée, ça fonctionne correctement. J'ai testé sur une fonction dérivée, qui s'applique sur le contenu des cellules d'une plage plutôt que des noms de plages nommées :

A
1Bonjour1
2Bonjour12
3Bonjour5
4Bonjour8
5Bonjour10
Function max_index_name(ByVal areaname As String, ByVal Rng As Range) As Integer
    For Each wname In Rng 'Looping through workbook names dictionnary
        lengthname = Len(areaname) 'Retrieve length of desired Name Area
        If Left(wname.Value, lengthname) = areaname Then 'If left side of the name = what we look for
            'then retrieve the maximum value from the right part of the name which contains the index value
            max_index_name = WorksheetFunction.Max(max_index_name, CInt(Right(wname.Value, Len(wname.Value) - lengthname)))
        End If
    Next wname
End Function
Sub Test()

MsgBox max_index_name("Bonjour", Range("A1:A5"))

End Sub

En l'absence de la modification indiquée, le résultat est 10 au lieu de 12 (le dernier numéro balayé).

En effet! Merci pour la contribution :)

Rechercher des sujets similaires à "max value named range"