Renommer les feuilles de calcul en fonction d’une liste (Microsoft Excel)
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.