Indirect 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 FunctionEnsuite, 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 : Laurent Longre
Mots clefs associés à cette page : xls, indirect, file, fichier, fermer, classeur
- Vous devez vous identifier ou créer un compte pour écrire des commentaires
