web-dev-qa-db-fra.com

référencer des feuilles par numéro au lieu de nom dans les cellules

Disons sheet3.name = "d"

Existe-t-il un moyen de mettre dans une cellule sur sheet2 la formule =sum(sheet3!b:b)sheet3 est remplacé par le nom réel de la feuille3? 

Je ne peux obtenir que =sum('d'!b:b) au travail jusqu’à présent. 

Je pourrais probablement utiliser VBA pour cela, mais je suis curieux de savoir comment faire cela dans une cellule afin de ne pas avoir à exécuter de macro à chaque fois.

7
user2872180

Si vous pouvez utiliser une fonction UDF définie par l'utilisateur qui renverra le nom de la feuille 

Function SHEETNAME(number As Long) As String
    SHEETNAME = Sheets(number).Name
End Function

alors une formule comme 

=SUM(INDIRECT(SHEETNAME(3) &"!B:B"))

renverra la somme de la colonne B de la feuille 3.

SHEETNAME(number) renvoie le nom de feuille du numéro index.

Donc, Sheet(1) renvoie Sheet1, etc.

5
user2140173

Utilisez la formule ci-dessous n'importe où dans la feuille pour obtenir le nom de la feuille - la feuille doit avoir un nom de fichier pour que cela fonctionne:

=REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"") 

Vous pouvez référencer cette cellule en utilisant Indirect:

=SUM(Indirect("'"&A1&"'!B:B"))

ou, si vous ne voulez pas avoir une deuxième cellule, vous pouvez combiner les deux formules en une:

=SUM(INDIRECT("'"&REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")&"'!B:B"))
7
SeanC

Je ne suis pas sûr que ce soit une bonne idée, mais c'est le premier auquel je puisse penser.

Je voudrais ajouter une fonction supplémentaire à votre projet VBA qui renverra le nom réel de votre feuille3:

Function Sheet3Name()
    Sheet3Name = Sheet3.Name
End Function

Ensuite, lorsque vous créez la formule de somme de la colonne B: B dans une cellule Excel, procédez comme suit:

=SUM(INDIRECT(Sheet3Name()&"!A:A"))
1
Kazimierz Jawor

Pour ceux qui ne sont pas concernés par l'ordre des feuilles, le message de Biff ici sur mrexcel.com fonctionne bien.

Dans Excel 2013, accédez à l'onglet Formules dans le ruban et attribuez un nom défini:

Name: SheetNames
Refers to: =GET.WORKBOOK(1)&T(NOW())

Ensuite, utilisez une formule comme celle-ci:

=INDIRECT("'"&INDEX(MID(SheetNames,FIND("]",SheetNames)+1,255),A3)&"'!A1")

où A3 correspond au numéro d'index d'une cellule de la feuille en cours et A1 à l'emplacement de la valeur à extraire de l'autre feuille. En d'autres termes, dans la feuille en cours, si A3 = 2, la formule indiquera la cellule A1 de la deuxième feuille du classeur. Je viens d'utiliser une colonne d'index dans ma feuille actuelle, puis faites glisser cette formule vers le bas et il remplit les valeurs de toutes mes autres feuilles.

Vous devrez enregistrer sous forme de fichier prenant en charge les macros (.xlsm).

0
edata