
Formule générique
=GET.WORKBOOK(1)&T(NOW())
Sommaire
Pour répertorier les feuilles de calcul dans un classeur Excel, vous pouvez utiliser une approche en deux étapes: (1) définir une plage nommée appelée «noms de feuille» avec une ancienne macro-commande et (2) utiliser la fonction INDEX pour récupérer les noms de feuille à l'aide de la plage nommée. Dans l'exemple illustré, la formule en B5 est:
=INDEX(MID(sheetnames,FIND(")",sheetnames)+1,255),ROWS($B$5:B5))
Remarque: je suis tombé sur cette formule sur le forum de MrExcel dans un message de T. Valko.
Explication
La plage nommée "noms de feuilles" est créée avec ce code:
=GET.WORKBOOK(1)&T(NOW())
GET.WORKBOOK est une macro-commande qui récupère un tableau de noms de feuille dans le classeur actuel. Le tableau résultant ressemble à ceci:
("(workbook.xlsm)Sheet1","(workbook.xlsm)Sheet2","(workbook.xlsm)Sheet3","(workbook.xlsm)Sheet4","(workbook.xlsm)Sheet5")
Une expression cryptique est concaténée au résultat:
&T(NOW())
Le but de ce code est de forcer le recalcul pour prendre en compte les modifications apportées aux noms de feuille. Étant donné que MAINTENANT est une fonction volatile, il recalcule à chaque modification de feuille de calcul. La fonction NOW renvoie une valeur numérique représentant la date et l'heure. La fonction T renvoie une chaîne vide ("") pour les valeurs numériques, de sorte que la concaténation n'a aucun effet sur les valeurs.
De retour sur la feuille de calcul, la cellule B6 contient cette formule copiée:
=INDEX(MID(sheetnames,FIND(")",sheetnames)+1,255),ROWS($B$5:B5))
Travaillant de l'intérieur vers l'extérieur, la fonction MID est utilisée pour supprimer les noms de feuille de calcul. Le tableau résultant ressemble à ceci:
("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5")
Cela entre dans la fonction INDEX comme "tableau". La fonction ROW utilise une plage en expansion pour générer un numéro de ligne incrémenté. À chaque nouvelle ligne, INDEX renvoie la valeur suivante du tableau. Lorsqu'il n'y a plus de noms de feuille à sortir, la formule renvoie une erreur #REF.
Remarque: comme cette formule repose sur une macro-commande, vous devrez enregistrer en tant que classeur prenant en charge les macros si vous souhaitez que la formule continue de mettre à jour les noms de feuille après la fermeture et la réouverture du fichier. Si vous enregistrez en tant que feuille de calcul normale, le code du nom de la feuille sera supprimé.