Je veux faire référence à une valeur de cellule dans un autre classeur closed avec une formule (pas VBA!). Le le nom de la feuille est stocké sous forme de variable} (dans l'exemple suivant, C13 est "Feuille2").
Si l'autre fichier est ouvert, alors les travaux suivants:
=INDIRECT("[myExcelFile.xlsm]" & C13 & "!$A$1")
Si le fichier est fermé, la formule ci-dessus ne fonctionne pas car il n'y a pas de chemin absolu. Mais je dois travailler avec ce qui suit (prêter attention à 'au lieu de ":
='C:\data\[myExcelFile.xlsm]Sheet2'!$A$1
Maintenant, je souhaite remplacer la "Feuille2" codée en dur par une valeur de référence dynamique, c'est-à-dire C13 (comme indiqué dans le premier extrait de code).
Est-ce que quelqu'un connaît une solution sans utiliser VBA ou d'autres bibliothèques?
Il n'y a définitivement aucun moyen de le faire avec des formules standard. Cependant, une sorte de réponse folle peut être trouvée ici . Cela évite toujours VBA, et cela vous permettra d’obtenir votre résultat de manière dynamique.
Commencez par créer la formule qui générera votre formule, mais n’ajoutez pas le =
au début!
Supposons que vous ayez créé cette formule dans la cellule B2
de Sheet1
et que vous souhaitiez que la formule soit évaluée dans la colonne c
.
Maintenant, allez dans l'onglet Formules et choisissez "Définir le nom". Donnez-lui le nom myResult
(ou celui que vous choisissiez), et sous Se réfère à, écrivez =evaluate(Sheet1!$B2)
(remarquez le $
Enfin, allez à C2
et écrivez =myResult
. Faites glisser le curseur vers le bas et ... le tour est joué!
Vérifier la fonction INDEX:
=INDEX('C:\path\[file.xlsm]Sheet1'!A10:B20;1;1)
= INDIRECT ("'C:\Data [" & A8 & "] SheetNAME"! $ G9 ")
où A8 contient myExcelFile.xlsm
et G9 contient les précieuses données de votre classeur source.
Dans Excel 2016 au moins, vous pouvez utiliser INDIRECT avec une référence de chemin d'accès complète. la référence complète (y compris le nom de la feuille) doit être entourée de '
caractères.
Donc, cela devrait fonctionner pour vous:
= INDIRECT("'C:\data\[myExcelFile.xlsm]" & C13 & "'!$A$1")
Notez le '
de fermeture dans la dernière chaîne (c'est-à-dire '!$A$1
entouré de ""
)
Le problème est qu’un lien vers un fichier fermé fonctionne avec index (mais pas avec index (indirect (
Il me semble que c’est un problème de programmation de la fonction d’indexation… .. Je l’ai résolu avec une ligne de clause if
C2=sheetname
if(c2=Sheet1,index(sheet1....),if(C2="Sheet2",index(sheet2....
Je l'ai fait sur cinq feuilles, c'est une longue formule, mais je fais ce dont j'ai besoin.