Disons sheet3.name = "d"
Existe-t-il un moyen de mettre dans une cellule sur sheet2
la formule =sum(sheet3!b:b)
où 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.
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.
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"))
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"))
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).