excel-vba Feuille de calcul .Name, .Index ou .CodeName


Exemple

Nous savons que la «meilleure pratique» dicte qu'un objet de plage doit avoir sa feuille de travail parente explicitement référencée. Une feuille de calcul peut être désignée par sa propriété .Name, sa propriété .Index numérique ou sa propriété .CodeName, mais un utilisateur peut réorganiser la file d'attente de la feuille de calcul en faisant simplement glisser un onglet de nom ou en double-cliquant sur le même onglet et taper dans un classeur non protégé.

Considérons une feuille de travail standard trois. Vous avez renommé les trois feuilles de calcul lundi, mardi et mercredi dans cet ordre et codé les sous-procédures VBA qui font référence à celles-ci. Considérez maintenant qu'un utilisateur arrive et décide que le lundi appartient à la fin de la file d'attente de la feuille de calcul, tandis qu'un autre intervient et décide que les noms des feuilles de calcul ont l'air mieux en français. Vous avez maintenant un classeur avec une file d'attente d'onglets de nom de feuille de calcul qui ressemble à ce qui suit.

worksheet_tab_queue

Si vous aviez utilisé l'une des méthodes de référence de feuille de calcul suivantes, votre code serait désormais rompu.

'reference worksheet by .Name
with worksheets("Monday")
    'operation code here; for example:
    .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) = 1
end with

'reference worksheet by ordinal .Index
with worksheets(1)
    'operation code here; for example:
    .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) = 1
end with

L'ordre d'origine et le nom de la feuille de calcul d'origine ont été compromis. Toutefois, si vous aviez utilisé la propriété .CodeName de la feuille de calcul, votre sous-procédure serait toujours opérationnelle

with Sheet1
    'operation code here; for example:
    .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) = 1
end with

L'image suivante montre la fenêtre Projet VBA ([Ctrl] + R) qui répertorie les feuilles de calcul par .CodeName puis par .Name (entre parenthèses). L'ordre dans lequel ils sont affichés ne change pas; l'ordinal .Index est pris par l'ordre dans lequel ils sont affichés dans la file d'attente de l'onglet Nom dans la fenêtre de la feuille de calcul.

worksheet_project_window

Bien qu'il soit rare de renommer un nom de code, ce n'est pas impossible. Ouvrez simplement la fenêtre Propriétés de VBE ([F4]).

feuille de calcul_propriétés_window

La feuille de calcul .CodeName est dans la première ligne. La feuille de calcul .Name est dans le dixième. Les deux sont modifiables.