Indirect vers un classeur fermé

Est-il normal que je ne puisse pas utiliser INDIRECT pour établir une liaison vers un classeur fermé ?

Oui c'est normal. En gros : quand le classeur est en mode recalcul, Excel n'effectue aucune opération susceptible d'interférer avec les calculs en cours. En l'occurence, aller chercher le contenu d'un classeur fermé supposerait qu'il établisse d'abord une liaison temporaire, lise la cellule, et détruise ensuite cette liaison. Comme ce type d'action est verrouillé en mode recalcul, INDIRECT échoue. C'est pour la même raison qu'il est impossible, par exemple, d'ouvrir un nouveau classeur ou de modifier le contenu d'une plage à l'intérieur d'une Function appelée par une formule de cellule. Une parade toutefois, à l'aide de VBA :

Function RECUP(Fichier As String, Feuille As String, _
 Ligne As Long, Col As Integer)
 With CreateObject("Excel.Application").Workbooks.Open(Fichier)
 RECUP = .Worksheets(Feuille).Cells(Ligne, Col)
 .Close False
 End With
 End Function

Ensuite, par exemple =RECUP("C:\Test.xls";"Feuil1";5;10) pour récupérer la cellule Feuil1!J5 de ce classeur fermé (note qu'il est quand-même temporairement ouvert par la fonction...) Ca marche pour la seule raison que la fonction lit le contenu du classeur fermé par l'intermédiaire d'une nouvelle instance d'Excel. Celle-ci étant indépendante de la session active, le "verrouillage" n'a plus lieu. Attention, chaque appel de RECUP lançant une nouvelle instance d'Excel, cette fonction n'est pas très rapide à l'exécution... à utiliser donc avec modération!

Auteur :

Mots clefs associés à cette page : , , , , ,