OVH Cloud OVH Cloud

Références externes variables: pallier le problème de la fonction INDIRECT()

1 réponse
Avatar
Jerry Khann
X-No-archive: yes

Bonjour,

Donc INDIRECT ne fonctionne que si les fichiers liés sont
ouverts, et son clone INDIRECT.EXT ne peut être installé
partout (!).

Avec une macro, comment simuler cette fonction?

Merci d'avance
Cordialement

^o^
--



Jerry Khann

Adresse invalide: retirer le bouchon _O_ et .invalid

1 réponse

Avatar
Croquignol
Salut Jerry,

Voici un "workaround" :

- Dans un module standard :

Public XL As Object
Dim TempCell As Object

Function INDIRECT2(CellRef As String)
' Croquignol, MPFE 2003
Application.Volatile
If XL Is Nothing Then
Set XL = CreateObject("Excel.Application")
Set TempCell = XL.Workbooks.Add.Sheets(1).Range("A1")
End If
TempCell.Formula = "=" & CellRef
INDIRECT2 = TempCell
End Function

- Dans le module ThisWorkbook :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
XL.Quit
End Sub

Exemple d'utilisation : =INDIRECT2("'C:[Test.xls]Feuil1'!$A$1")

N'essaie pas de remplacer CreateObject par New même si ça semble tentant, la
fonction ne marcherait plus (elle serait bloquée par le mécanisme d'Excel
qui empêche tout appel de méthode à partir d'une fonction perso de feuille
de calcul).

On peut imaginer plusieurs variantes à partir de cette technique: passer par
XL.ExecuteExcel4Macro au lieu d'une cellule temporaire, refermer XL après
chaque appel de la fonction pour libérer les ressources, etc.

NB : c'est l'auteur de la fonction INDIRECT.EXT (merci à lui) qui m'a
indiqué cette technique, je l'ai juste appliquée ici en VBA.

Amicalement,

Croquignol




X-No-archive: yes

Bonjour,

Donc INDIRECT ne fonctionne que si les fichiers liés sont
ouverts, et son clone INDIRECT.EXT ne peut être installé
partout (!).

Avec une macro, comment simuler cette fonction?

Merci d'avance
Cordialement

^o^
--

Jerry Khann

Adresse invalide: retirer le bouchon _O_ et .invalid