web-dev-qa-db-fra.com

Comment faire une référence relative à un autre classeur dans Excel?

Je produis une feuille pour calculer les prix. La feuille doit faire référence à plusieurs autres cahiers pour obtenir les prix des différents composants. Cela fonctionne bien sur mon ordinateur, mais lorsque je les déplace vers le serveur ou un autre ordinateur, les références ne sont pas trouvées.

Mon dossier est structuré comme suit:

Folder
|-- prices.xlsx
|-- Fixed Components
|   |-- ComponentsA.xlsx
|   +-- ComponentsB.xlsx
|
+-- Variable Components
    |-- ComponentsC.xlsx
    +-- ComponentsD.xlsx

prices.xlsx est la feuille principale qui fait référence aux autres feuilles. Sur mon ordinateur, il crée les références avec un chemin absolu. Ainsi, lorsque je copie les fichiers, le chemin reste fixe sur ma machine, au lieu de référencer les fichiers sur l’autre PC.

Y at-il un moyen de rendre les références relatives afin que je puisse mettre dans la feuille principale quelque chose comme ='\Variable Components\[ComponentsC.xlsx]Sheet1'!A1. Je ne voudrais pas utiliser VBA pour cela car les gens n'ont pas tendance à faire confiance aux macros et se plaignent ensuite que les fonctions ne fonctionnent pas.

16
Stijnvdk

Les seules solutions que j'ai pu voir pour organiser les fichiers externes en sous-dossiers ont nécessité l'utilisation de VBA pour résoudre un chemin d'accès complet au fichier externe dans les formules. Voici un lien vers un site avec plusieurs exemples que d'autres ont utilisés:

http://www.teachexcel.com/Excel-help/Excel-how-to.php?i=415651

Sinon, si vous pouvez placer tous les fichiers dans le même dossier au lieu de les diviser en sous-dossiers, Excel résoudra les références externes sans nécessiter l'utilisation de VBA même si vous déplacez les fichiers vers un emplacement réseau. Vos formules deviennent alors simplement ='[ComponentsC.xlsx]Sheet1'!A1 sans nom de dossier à parcourir.

6
James L.

J'ai eu un problème similaire que j'ai résolu en utilisant la séquence suivante:

  1. utilisez la fonction CELL("filename") pour obtenir le chemin d'accès complet à la feuille en cours du fichier en cours.

  2. utilisez la fonction SEARCH() pour rechercher le début de la chaîne [NomFichier] SheetName de votre fichier Excel actuel et de la feuille.

  3. utilisez la fonction LEFT pour extraire le chemin complet du répertoire contenant votre fichier actuel. 

  4. Concaténez le nom du chemin de répertoire trouvé à l'étape 3 avec le nom du fichier, le nom de la feuille de calcul et la référence de cellule à laquelle vous souhaitez accéder.

  5. utilisez la fonction INDIRECT() pour accéder à la CellPathName que vous avez créée à l'étape 4.

Remarque: ces mêmes étapes peuvent également être utilisées pour accéder aux cellules de fichiers dont les noms sont créés dynamiquement. A l'étape 4, utilisez une chaîne de texte créée dynamiquement à partir du contenu des cellules, de la date ou de l'heure actuelles, etc.

Un exemple de référence de cellule (avec chaque pièce assemblée séparément) comprenant toutes ces étapes est:

=INDIRECT("'" & LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "[" & "OtherFileName" & "]" & "OtherSheetName" & "'!" & "$OtherColumn$OtherRow" & "'")

Notez que LibreOffice utilise une syntaxe légèrement différente pour CellPatnName, comme dans l'exemple suivant:

=INDIRECT(LEFT(CELL("filename"),SEARCH("[MyFileName]MySheetName",CELL("filename")) - 1) & "OtherFileName" & "'#$" & "OtherSheetName" & "." & "$OtherColumn$OtherRow")
5
RSDIXON

plus facile et plus court via indirect: INDIRECT("'..\..\..\..\Supply\SU\SU.ods'#$Data.$A$2:$AC$200")

toutefois, indirect () présente des inconvénients en termes de performances si beaucoup de liens dans le classeur

Je manque de construire comme: ['../Data.ods']#Sheet1.A1 dans LibreOffice. L'intention est la suivante: si je crée un ensemble de classeurs principaux et des classeurs de rapport dépendants dans un sous-arbre limité de répertoires dans le système de fichiers source, je peux compresser un sous-répertoire complet avec un ensemble complet de classeurs et l'envoyer à une autre personne coopérant par e-mail. Il sera sauvegardé dans un autre système absolu sur le système cible, mais la liaison fonctionnera à nouveau dans le nouveau chemin absolu car elle était codée relativement à la racine du sous-arbre.

3
Rostro

Utiliser les fonctions = worksheetname () et = Indirect (), et nommer les feuilles de calcul dans le fichier Excel parent avec le nom du fichier Excel référencé en externe. Chaque fichier Excel référencé de manière externe se trouvait dans leurs propres dossiers portant le même nom. Ces sous-dossiers étaient seulement pour créer plus de clarté.


Ce que j'ai fait était la suivante: -

| ---- Colonne B --------------- | ---- Colonne C ------------ |

R2) Dossier parent --------> "C:\TEMP\Excel \"

R3) Nom du sous-dossier ---> = nom de la feuille de travail ()

R5) Chemin complet --------------> = "'" & C2 & C3 & "[" & C3 & ". Xlsx] Sheet1'! $ A $ 1" 

R7) Fonction indirecte -----> = INDIRECT (C5, TRUE)

Dans le fichier principal, j'avais 5 feuilles de travail intitulées Ext-1, Ext-2, Ext-3, Ext-4, Ext-5. Copie a collé les formules ci-dessus dans les cinq feuilles de calcul. Ouvert tous les fichiers Excel nommés respectivement en arrière-plan. Pour une raison quelconque, les résultats ne calculaient pas automatiquement, il fallait donc forcer un changement en modifiant une cellule. Volla, la valeur dans la cellule A1 de chaque fichier Excel référencé extérieurement était dans le fichier principal.

1
user2312319

Vous supposez que vous vous connectez à un lecteur partagé, par exemple le lecteur S? Si tel est le cas, d’autres personnes ont peut-être mappé le lecteur différemment. Vous devez probablement utiliser le nom de lecteur "officiel" // euhkj002/previsions/bla bla. Au lieu de S // dans votre lien

0
Dr Amazing