Lawrence a besoin d’un moyen de déterminer le numéro d’une feuille de calcul même si la feuille de calcul a été renommée. Par exemple, si une feuille de calcul est nommée Sheet11, il est assez facile de comprendre qu’il s’agit de la feuille 11. S’il renomme la feuille en janvier, Lawrence a encore besoin d’un moyen de savoir qu’il s’agit de la feuille 11.

La solution à ce problème est mieux réalisée avec une fonction définie par l’utilisateur (une macro). Il y a, en réalité, deux nombres que la macro pourrait renvoyer pour chaque feuille de calcul. Le premier est le numéro d’index de la feuille de calcul. Ce nombre représente l’index de l’objet Worksheet de la feuille de calcul dans la collection Worksheets. Cette valeur peut être renvoyée par une macro similaire à la suivante:

Function SheetNumber1(shtname As String)

Dim sht As Worksheet

Application.Volatile     For Each sht In ThisWorkbook.Worksheets          If LCase(sht.Name) = LCase(shtname) Then               SheetNumber1 = sht.Index               Exit Function          End If     Next     SheetNumber1 = -1 End Function

Cette fonction, lorsqu’elle est utilisée dans une feuille de calcul, renverra le numéro d’index de toute feuille de calcul dont le nom est passé à la fonction. Si le nom passé à la fonction n’existe pas dans la collection de feuilles de calcul, la valeur -1 est renvoyée par la fonction. Par exemple, les éléments suivants utilisés dans une cellule renverraient la valeur d’index de la feuille de calcul nommée « Janvier » dans la collection:

=SheetNumber("January")

Le problème avec cette approche est que l’ordre des objets Worksheet dans la collection Worksheets peut changer au fil du temps. Ainsi, vous ne pouvez pas toujours supposer que la onzième feuille de la collection est la feuille qui était à l’origine Sheet11.

Un moyen plus cohérent de déterminer le nom d’origine d’une feuille de calcul (quelle que soit la façon dont il est renommé) consiste à utiliser ce que Visual Basic fait référence à «CodeName» de la feuille. Il s’agit d’une propriété de la feuille de calcul et peut être déterminée de la manière suivante:

Function SheetNumber2(shtname As String)

Dim sht As Worksheet     Dim sTemp As String

Application.Volatile     For Each sht In ThisWorkbook.Worksheets          If LCase(sht.Name) = LCase(shtname) Then               sTemp = sht.CodeName               SheetNumber2 = Val(Mid(sTemp, 6, 4))

Exit Function          End If     Next     SheetNumber2 = -1 End Function

La propriété CodeName est en lecture seule dans une macro. Il est attribué au moment de la création de la feuille de calcul, mais il est possible qu’il soit modifié manuellement dans Visual Basic Editor. Le CodeName est toujours une chaîne, représentant le tout premier nom qui a été appliqué à la feuille de calcul, donc ce sera quelque chose comme « Sheet11 ». Une fois que le CodeName est défini, même si la feuille de calcul est renommée (par exemple en «janvier»), elle restera stable («Sheet11»).

Dans l’exemple de macro (SheetNumber2), la propriété CodeName est affectée à la variable sTemp. Ce sera, la plupart du temps, quelque chose comme « Sheet3 » ou « Sheet11 ». Ainsi, la macro saisit alors la valeur numérique de tout ce qui commence par le sixième caractère (juste après « Feuille »). Il s’agit de la valeur renvoyée par la fonction.

_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 (11103) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

link: / excel-Determining_a_Worksheets_Number [Détermination du numéro d’une feuille de travail].