Lors de l’écriture d’une macro, vous pouvez trouver la valeur la plus basse dans une plage de cellules à l’aide de la méthode WorksheetFunction pour appliquer la fonction de feuille de calcul MIN. Vous devrez peut-être, cependant, non seulement trouver la valeur la plus basse de la plage, mais également l’adresse de la première cellule qui contient cette valeur.

Un moyen simple consiste simplement à parcourir la plage que vous souhaitez examiner et à dériver à la fois la valeur la plus basse et l’adresse de la cellule examinée, comme dans l’exemple suivant:

Function FindLowestAddr(pRng As Range) As String     Application.Volatile     MinVal = pRng.Cells(1).Value     MinAddr = pRng.Cells(1).Address     For Each c in pRng         If c.Value < MinVal Then             MinVal = c.Value             MinAddr = c.Address         End If     Next c     FindLowestAddr = MinAddr End Function

Notez que cette approche ne repose pas du tout sur la fonction de feuille de calcul MIN. Il y a cependant un inconvénient: il ne fait pas la différence entre les cellules qui contiennent des valeurs numériques et celles qui n’en contiennent pas. En d’autres termes, si la plage passée à la fonction contient une cellule vide, cette cellule est considérée comme contenant une valeur zéro, qui peut très bien être la valeur la plus basse de la plage.

Une façon de contourner cela consiste à s’appuyer sur des fonctions de feuille de calcul à partir de la macro. La macro suivante utilise les fonctions de feuille de calcul MIN et MATCH pour déterminer l’emplacement de la valeur minimale, puis l’index (décalage) de cette cellule dans la plage.

Function GetAddr(rng As Range) As String     Dim dMin As Double     Dim lIndex As Long     Dim sAddress As String

Application.Volatile     With Application.WorksheetFunction         dMin = .Min(rng)

lIndex = .Match(dMin, rng, 0)

End With     GetAddr = rng.Cells(lIndex).Address End Function

Il convient de noter que si vous utilisez la macro uniquement pour découvrir l’adresse, car vous pensiez qu’il n’y avait aucun moyen de dériver les informations souhaitées sans la macro, vous pouvez supprimer entièrement la macro en utilisant une formule de feuille de calcul. Par exemple, si vous souhaitez déterminer l’adresse de la cellule la plus basse dans la plage nommée MyRange, vous pouvez utiliser ce qui suit:

=ADDRESS(ROW(MyRange)+MATCH(MIN(MyRange),MyRange,0)-1,COLUMN(MyRange))

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (7140) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Finding_the_Address_of_the_Lowest_Value_in_a_Range [Recherche de l’adresse de la valeur la plus basse dans une plage].