PatCatNat’s
Faire de son négatif un positif !

Site personnel de Patrice MOREL.

Incrémentation de lignes avec un classeur lié.
Article mis en ligne le 4 janvier 2018
dernière modification le 1er mai 2018

par Patrice MOREL
LibreOffice_Calc
Libre Office - Calc

Problématique :
Un classeur de données de références est créé et doit servir à alimenter d’autres classeurs.
Ces autres classeurs actualisent les liens vers ce classeur de données de références.
L’avantage est qu’un seul fichier est alimenté et sert à toutes autres "bases" avec des données de références identiques.

Exemple :

  • Le chemin pour accéder à mon fichier est [P :/AdministratifPhotos]
  • Mon fichier de données de références se nomme [DonneesReference.ods]
  • La feuille comportant mes données se nomme [References]
  • Ma première donnée liée est en cellule [E4]

Le liens prends alors cette forme :
='file:///P:/AdministratifPhotos/DonneesReference.ods'#$References.$E4

Si je déplace mon classeur de données (ou transmet à autrui mon "application"), le lien est à refaire !

Pour éviter çà, il faut alors décomposer de lien :
Mettre le chemin de votre fichier de travail dans une cellule (dans l’exemple [B2]), soit P :/AdministratifPhotos/DonneesReference.ods

Le lien peut alors être écrit comme ceci avec la fonction CONCATENER() (ici j’utilise les esperluette (&) et les guillemets à la place de la fonction ; ce qui revient au même...) et utiliser la fonction INDIRECT() :
=INDIRECT("'file:///"&$B$2&"'#$References.$E4")
Note : $B$2 remplace le chemin P :/AdministratifPhotos/DonneesReference.ods. Les signes dollars permettent de "bloquer" la cellule (ligne et colonne) pour éviter qu’elle s’incrémente.

Cette formule fonctionne bien, et renvoi la bonne valeur, mais si j’essaie d’incrémenter la colonne, cela ne le fait pas et me renvoie toujours la valeur de ma cellule [$E4].

La première cellule à lier se trouve dans la même colonne [E] que dans votre fichier de données de références. Par contre la ligne se trouve en ligne [5], alors, comme on le voit dans l’exemple, la donnée à lier se trouve en ligne [4] !

Il faut donc utiliser la fonction LIGNE() soit :
=INDIRECT("'file:///"&$B$2&"'#References.$C"&LIGNE()-1)
Note : La ligne est ) -1 de la ligne de référence donc [LIGNE()-1]