Gilbert a une feuille de calcul (nommée «Contrôle») qui contient une liste des noms de feuille de calcul souhaités dans les cellules A1: A12. Il a besoin d’un moyen, dans une macro, de renommer chacune des 12 autres feuilles de calcul du classeur en fonction de cette plage de cellules. Les noms de feuille de calcul n’ont pas besoin d’être dynamiques; ils ont juste besoin d’être renommés lorsqu’il exécute la macro.

Le cœur du développement d’une macro pour répondre à ce besoin est de s’appuyer sur la propriété Name de chaque feuille de calcul que vous souhaitez renommer. Par exemple, vous pouvez utiliser une macro très simple comme celle-ci:

Sub RenameSheets()

Dim c As Range     Dim J As Integer

J = 0     For Each c In Range("A1:A12")

J = J + 1         If Sheets(J).Name = "Control" Then J = J + 1         Sheets(J).Name = c.Text     Next c End Sub

La macro parcourt simplement la plage de cellules A1: A12 et, si la feuille de calcul suivante n’est pas nommée «Contrôle», elle renomme la feuille de calcul à la valeur de cellule.

Comme indiqué, cette macro est très simpliste et devrait, selon toute vraisemblance, être beaucoup plus robuste. Par exemple, que doit-on faire s’il y a plus (ou moins) de 13 feuilles de calcul dans le classeur actuel? Que faire s’il y a des cellules vides dans la plage A1: A12? Que faire si quelqu’un exécute la macro et que « Control » n’est pas la feuille de calcul active?

Que faire s’il y a deux valeurs identiques dans A1: A12? Que faire s’il y a des espaces de début ou de fin sur un ou plusieurs noms dans la plage A1: A12? Ces questions et (très probablement) toute une série d’autres questions peuvent affecter l’apparence finale de la macro. Voici une version commentée de la macro qui prend en compte plusieurs des possibilités qui viennent d’être mentionnées:

Sub RenameSheets()

Dim c As Range     Dim J As Integer     Dim K As Integer     Dim sName As String     Dim w(12) As String     Dim bGo As Boolean     Dim sTemp As String

bGo = True     If Worksheets.Count <> 13 Then         ' Check to make sure exactly 13 worksheets in workbook         bGo = False         sTemp = "There are more than 13 worksheets."

End If     If ActiveSheet.Name <> "Control" Then         ' Check to make sure Control is active         bGo = False         sTemp = "Control worksheet is not active."

Else         ' Check for empty and duplicate cells in range         J = 0         For Each c In Range("A1:A12")

sName = Trim(c.Text)

If sName <> "" Then                 For K = 1 to J                     If LCase(w(K)) = LCase(sName) Then                         bGo = False                         sTemp = "Duplicate sheet names in list."

End If                 Next K                 If bGo Then                     ' Everything still good; add name                     J = J + 1                     w(J) = sName                 End If             End If         Next c     End If

If bGo Then         K = 0         For J = 1 To 12             K = K + 1             If Sheets(K).Name = "Control" Then K = K + 1             Sheets(K).Name = w(J)

Next J     Else         MsgBox(sTemp)

End If End Sub

Remarquez combien de temps la deuxième version de la macro est plus longue que la première? Chaque fois que vous commencez à ajouter plusieurs vérifications dans une macro, cela peut vraiment la rendre beaucoup plus longue que sans les vérifications. L’avantage de l’ajout des vérifications, bien sûr, est que votre macro est moins susceptible de rencontrer des problèmes car elle est utilisée par des personnes autres que vous.

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (1506) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.