Sur vos conseils, j'ai utilisé la fonction "INDIRECT.EXT" de Laurent Longre,
mais je n'arrive pas a la faire fonctionner lorsque le fichier lié est fermé
.
Pouvez vous m'aider à résoudre ce problème
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Starwing
Bonjour Robert,
Sur vos conseils, j'ai utilisé la fonction "INDIRECT.EXT"
Je n'étais pas là, mais bon....
La fonction INDIRECT.EXT de Laurent Longré fonctionne de cette maniere: =INDIRECT.EXT("'c:Excel[Excel.xls]Feui1'!$A$1") ou =INDIRECT.EXT("'c:Excel[Excel.xls]Feui1'!$A$1";VRAI) Renvoie la valeur de la cellule A1 d'un classeur fermé.
=INDIRECT.EXT("'c:Excel[Excel.xls]Feui1'!$A$1";FAUX) Ne renvoie pas la mise à jour de la valeur de la cellule A1 d'un classeur fermé. Pour ce faire, il faut appuyer sur Ctrl + Alt + F9
De plus, la fonction SOMMEPROD ( qui est déjà existante dans Excel )fait le même genre de truc: =SOMMEPROD(('c:Excel[Excel.xls]Feuil1'!$A$1)) Renvoie la valeur de la cellule A1 d'un classeur fermé...
A toi de voir...
Starwing
Bonjour Robert,
Sur vos conseils, j'ai utilisé la fonction "INDIRECT.EXT"
Je n'étais pas là, mais bon....
La fonction INDIRECT.EXT de Laurent Longré
fonctionne de cette maniere:
=INDIRECT.EXT("'c:Excel[Excel.xls]Feui1'!$A$1") ou
=INDIRECT.EXT("'c:Excel[Excel.xls]Feui1'!$A$1";VRAI)
Renvoie la valeur de la cellule A1 d'un classeur fermé.
=INDIRECT.EXT("'c:Excel[Excel.xls]Feui1'!$A$1";FAUX)
Ne renvoie pas la mise à jour de la valeur de la cellule
A1 d'un classeur fermé. Pour ce faire, il faut appuyer sur
Ctrl + Alt + F9
De plus, la fonction SOMMEPROD ( qui est déjà existante
dans Excel )fait le même genre de truc:
=SOMMEPROD(('c:Excel[Excel.xls]Feuil1'!$A$1))
Renvoie la valeur de la cellule A1 d'un classeur fermé...
Sur vos conseils, j'ai utilisé la fonction "INDIRECT.EXT"
Je n'étais pas là, mais bon....
La fonction INDIRECT.EXT de Laurent Longré fonctionne de cette maniere: =INDIRECT.EXT("'c:Excel[Excel.xls]Feui1'!$A$1") ou =INDIRECT.EXT("'c:Excel[Excel.xls]Feui1'!$A$1";VRAI) Renvoie la valeur de la cellule A1 d'un classeur fermé.
=INDIRECT.EXT("'c:Excel[Excel.xls]Feui1'!$A$1";FAUX) Ne renvoie pas la mise à jour de la valeur de la cellule A1 d'un classeur fermé. Pour ce faire, il faut appuyer sur Ctrl + Alt + F9
De plus, la fonction SOMMEPROD ( qui est déjà existante dans Excel )fait le même genre de truc: =SOMMEPROD(('c:Excel[Excel.xls]Feuil1'!$A$1)) Renvoie la valeur de la cellule A1 d'un classeur fermé...
A toi de voir...
Starwing
Robert
Oui, mais j'ai des problème lorsque on fait référence a une plage, la fonction ne marche que si le fichier lié est ouvert ex:
Avec D2 qui contient le chemin "c:monrepertoiremonfichier[monOnglet]'!A1 =INDIRECT.EXT(D2) FONCTIONNE mais
Avec D20 qui contient : "c:monrepertoiremonfichier[monOnglet]'!$A$3:$E$34" =RECHERCHEV(G1;INDIRECT.EXT(D20);2) ne fonctionne pas lorsque le fichier n'est pas ouvert
Evidemment c'est le deuxieme exemple que j'ai besoin d'effectuer. qu'en pensez vous
Robert
Oui, mais j'ai des problème lorsque on fait référence a une plage, la
fonction ne marche que si le fichier lié est ouvert
ex:
Avec D2 qui contient le chemin "c:monrepertoiremonfichier[monOnglet]'!A1
=INDIRECT.EXT(D2) FONCTIONNE mais
Avec D20 qui contient :
"c:monrepertoiremonfichier[monOnglet]'!$A$3:$E$34"
=RECHERCHEV(G1;INDIRECT.EXT(D20);2) ne fonctionne pas lorsque le fichier
n'est pas ouvert
Evidemment c'est le deuxieme exemple que j'ai besoin d'effectuer.
qu'en pensez vous
Oui, mais j'ai des problème lorsque on fait référence a une plage, la fonction ne marche que si le fichier lié est ouvert ex:
Avec D2 qui contient le chemin "c:monrepertoiremonfichier[monOnglet]'!A1 =INDIRECT.EXT(D2) FONCTIONNE mais
Avec D20 qui contient : "c:monrepertoiremonfichier[monOnglet]'!$A$3:$E$34" =RECHERCHEV(G1;INDIRECT.EXT(D20);2) ne fonctionne pas lorsque le fichier n'est pas ouvert
Evidemment c'est le deuxieme exemple que j'ai besoin d'effectuer. qu'en pensez vous
Robert
Starwing
Bonsoir Robert,
Malheureusement, pour ce que tu veux faire, la fonction INDIRECT.EXT ET SOMMEPROD sont inefficaces. Tu ne pourras donc pas utiliser INDIRECT.EXT et RECHERCHEV.
Pour contrer ce genre de problème, Harlan Grove a écrit ce code qui fonctionne très bien... Pour ce genre de problème, utilise plutôt ceci.
'----- begin VBA ----- Function pull(xref As String) As Variant 'inspired by Bob Phillips and Laurent Longre 'but written by Harlan Grove '-------------------------------------------------------- --------- 'Copyright (c) 2003 Harlan Grove. ' 'This code is free software; you can redistribute it and/or modify 'it under the terms of the GNU General Public License as published 'by the Free Software Foundation; either version 2 of the License, 'or (at your option) any later version. '-------------------------------------------------------- --------- '2004-05-30 'still more fixes, this time to address apparent differences between 'XL8/97 and later versions. Specifically, fixed the InStrRev call, 'which is fubar in later versions and was using my own hacked version 'under XL8/97 which was using the wrong argument syntax. Also either 'XL8/97 didn't choke on CStr(pull) called when pull referred to an 'array while later versions do, or I never tested the 2004-03-25 fix 'against multiple cell references. '-------------------------------------------------------- --------- '2004-05-28 'fixed the previous fix - replaced all instances of 'expr' with 'xref' 'also now checking for initial single quote in xref, and if found 'advancing past it to get the full pathname [dumb, really dumb!] '-------------------------------------------------------- --------- '2004-03-25 'revised to check if filename in xref exists - if it does, proceed; 'otherwise, return a #REF! error immediately - this avoids Excel 'displaying dialogs when the referenced file doesn't exist '-------------------------------------------------------- ---------
Dim xlapp As Object, xlwb As Workbook Dim b As String, r As Range, C As Range, n As Long
'** begin 2004-05-30 changes ** '** begin 2004-05-28 changes ** '** begin 2004-03-25 changes ** n = InStrRev(xref, "")
If n > 0 Then If Mid(xref, n, 2) = "[" Then b = Left(xref, n) n = InStr(n + 2, xref, "]") - n - 2 If n > 0 Then b = b & Mid(xref, Len(b) + 2, n)
Else n = InStrRev(Len(xref), xref, "!") If n > 0 Then b = Left(xref, n - 1)
End If
'** key 2004-05-28 addition ** If Left(b, 1) = "'" Then b = Mid(b, 2)
On Error Resume Next If n > 0 Then If Dir(b) = "" Then n = 0 Err.Clear On Error GoTo 0
End If
If n <= 0 Then pull = CVErr(xlErrRef) Exit Function End If '** end 2004-03-25 changes ** '** end 2004-05-28 changes **
pull = Evaluate(xref)
'** key 2004-05-30 addition ** If IsArray(pull) Then Exit Function '** end 2004-05-30 changes **
If CStr(pull) = CStr(CVErr(xlErrRef)) Then On Error GoTo CleanUp 'immediate clean-up at this point
Set xlapp = CreateObject("Excel.Application") Set xlwb = xlapp.Workbooks.Add 'needed by .ExecuteExcel4Macro
On Error Resume Next 'now clean-up can wait
n = InStr(InStr(1, xref, "]") + 1, xref, "!") b = Mid(xref, 1, n)
Set r = xlwb.Sheets(1).Range(Mid(xref, n + 1))
If r Is Nothing Then pull = xlapp.ExecuteExcel4Macro(xref)
Else For Each C In r C.Value = xlapp.ExecuteExcel4Macro(b & C.Address (1, 1, xlR1C1)) Next C
pull = r.Value
End If
CleanUp: If Not xlwb Is Nothing Then xlwb.Close 0 If Not xlapp Is Nothing Then xlapp.Quit Set xlapp = Nothing
Malheureusement, pour ce que tu veux faire, la fonction
INDIRECT.EXT ET SOMMEPROD sont inefficaces. Tu ne pourras
donc pas utiliser INDIRECT.EXT et RECHERCHEV.
Pour contrer ce genre de problème, Harlan Grove a écrit ce
code qui fonctionne très bien...
Pour ce genre de problème, utilise plutôt ceci.
'----- begin VBA -----
Function pull(xref As String) As Variant
'inspired by Bob Phillips and Laurent Longre
'but written by Harlan Grove
'--------------------------------------------------------
---------
'Copyright (c) 2003 Harlan Grove.
'
'This code is free software; you can redistribute it
and/or modify
'it under the terms of the GNU General Public License as
published
'by the Free Software Foundation; either version 2 of
the License,
'or (at your option) any later version.
'--------------------------------------------------------
---------
'2004-05-30
'still more fixes, this time to address apparent
differences between
'XL8/97 and later versions. Specifically, fixed the
InStrRev call,
'which is fubar in later versions and was using my own
hacked version
'under XL8/97 which was using the wrong argument syntax.
Also either
'XL8/97 didn't choke on CStr(pull) called when pull
referred to an
'array while later versions do, or I never tested the
2004-03-25 fix
'against multiple cell references.
'--------------------------------------------------------
---------
'2004-05-28
'fixed the previous fix - replaced all instances
of 'expr' with 'xref'
'also now checking for initial single quote in xref, and
if found
'advancing past it to get the full pathname [dumb,
really dumb!]
'--------------------------------------------------------
---------
'2004-03-25
'revised to check if filename in xref exists - if it
does, proceed;
'otherwise, return a #REF! error immediately - this
avoids Excel
'displaying dialogs when the referenced file doesn't
exist
'--------------------------------------------------------
---------
Dim xlapp As Object, xlwb As Workbook
Dim b As String, r As Range, C As Range, n As Long
'** begin 2004-05-30 changes **
'** begin 2004-05-28 changes **
'** begin 2004-03-25 changes **
n = InStrRev(xref, "")
If n > 0 Then
If Mid(xref, n, 2) = "[" Then
b = Left(xref, n)
n = InStr(n + 2, xref, "]") - n - 2
If n > 0 Then b = b & Mid(xref, Len(b) + 2, n)
Else
n = InStrRev(Len(xref), xref, "!")
If n > 0 Then b = Left(xref, n - 1)
End If
'** key 2004-05-28 addition **
If Left(b, 1) = "'" Then b = Mid(b, 2)
On Error Resume Next
If n > 0 Then If Dir(b) = "" Then n = 0
Err.Clear
On Error GoTo 0
End If
If n <= 0 Then
pull = CVErr(xlErrRef)
Exit Function
End If
'** end 2004-03-25 changes **
'** end 2004-05-28 changes **
pull = Evaluate(xref)
'** key 2004-05-30 addition **
If IsArray(pull) Then Exit Function
'** end 2004-05-30 changes **
If CStr(pull) = CStr(CVErr(xlErrRef)) Then
On Error GoTo CleanUp 'immediate clean-up at this
point
Set xlapp = CreateObject("Excel.Application")
Set xlwb = xlapp.Workbooks.Add 'needed
by .ExecuteExcel4Macro
On Error Resume Next 'now clean-up can wait
n = InStr(InStr(1, xref, "]") + 1, xref, "!")
b = Mid(xref, 1, n)
Set r = xlwb.Sheets(1).Range(Mid(xref, n + 1))
If r Is Nothing Then
pull = xlapp.ExecuteExcel4Macro(xref)
Else
For Each C In r
C.Value = xlapp.ExecuteExcel4Macro(b & C.Address
(1, 1, xlR1C1))
Next C
pull = r.Value
End If
CleanUp:
If Not xlwb Is Nothing Then xlwb.Close 0
If Not xlapp Is Nothing Then xlapp.Quit
Set xlapp = Nothing
Malheureusement, pour ce que tu veux faire, la fonction INDIRECT.EXT ET SOMMEPROD sont inefficaces. Tu ne pourras donc pas utiliser INDIRECT.EXT et RECHERCHEV.
Pour contrer ce genre de problème, Harlan Grove a écrit ce code qui fonctionne très bien... Pour ce genre de problème, utilise plutôt ceci.
'----- begin VBA ----- Function pull(xref As String) As Variant 'inspired by Bob Phillips and Laurent Longre 'but written by Harlan Grove '-------------------------------------------------------- --------- 'Copyright (c) 2003 Harlan Grove. ' 'This code is free software; you can redistribute it and/or modify 'it under the terms of the GNU General Public License as published 'by the Free Software Foundation; either version 2 of the License, 'or (at your option) any later version. '-------------------------------------------------------- --------- '2004-05-30 'still more fixes, this time to address apparent differences between 'XL8/97 and later versions. Specifically, fixed the InStrRev call, 'which is fubar in later versions and was using my own hacked version 'under XL8/97 which was using the wrong argument syntax. Also either 'XL8/97 didn't choke on CStr(pull) called when pull referred to an 'array while later versions do, or I never tested the 2004-03-25 fix 'against multiple cell references. '-------------------------------------------------------- --------- '2004-05-28 'fixed the previous fix - replaced all instances of 'expr' with 'xref' 'also now checking for initial single quote in xref, and if found 'advancing past it to get the full pathname [dumb, really dumb!] '-------------------------------------------------------- --------- '2004-03-25 'revised to check if filename in xref exists - if it does, proceed; 'otherwise, return a #REF! error immediately - this avoids Excel 'displaying dialogs when the referenced file doesn't exist '-------------------------------------------------------- ---------
Dim xlapp As Object, xlwb As Workbook Dim b As String, r As Range, C As Range, n As Long
'** begin 2004-05-30 changes ** '** begin 2004-05-28 changes ** '** begin 2004-03-25 changes ** n = InStrRev(xref, "")
If n > 0 Then If Mid(xref, n, 2) = "[" Then b = Left(xref, n) n = InStr(n + 2, xref, "]") - n - 2 If n > 0 Then b = b & Mid(xref, Len(b) + 2, n)
Else n = InStrRev(Len(xref), xref, "!") If n > 0 Then b = Left(xref, n - 1)
End If
'** key 2004-05-28 addition ** If Left(b, 1) = "'" Then b = Mid(b, 2)
On Error Resume Next If n > 0 Then If Dir(b) = "" Then n = 0 Err.Clear On Error GoTo 0
End If
If n <= 0 Then pull = CVErr(xlErrRef) Exit Function End If '** end 2004-03-25 changes ** '** end 2004-05-28 changes **
pull = Evaluate(xref)
'** key 2004-05-30 addition ** If IsArray(pull) Then Exit Function '** end 2004-05-30 changes **
If CStr(pull) = CStr(CVErr(xlErrRef)) Then On Error GoTo CleanUp 'immediate clean-up at this point
Set xlapp = CreateObject("Excel.Application") Set xlwb = xlapp.Workbooks.Add 'needed by .ExecuteExcel4Macro
On Error Resume Next 'now clean-up can wait
n = InStr(InStr(1, xref, "]") + 1, xref, "!") b = Mid(xref, 1, n)
Set r = xlwb.Sheets(1).Range(Mid(xref, n + 1))
If r Is Nothing Then pull = xlapp.ExecuteExcel4Macro(xref)
Else For Each C In r C.Value = xlapp.ExecuteExcel4Macro(b & C.Address (1, 1, xlR1C1)) Next C
pull = r.Value
End If
CleanUp: If Not xlwb Is Nothing Then xlwb.Close 0 If Not xlapp Is Nothing Then xlapp.Quit Set xlapp = Nothing
Merci pour ta participation a la résolution de mon problème
J'ai essayé la fonction PULL, mais l'exécution me semble très longue (j'ai env 60 cellule qui vont utiliser cette fonction), la je l'ai essayée sur 2 cellule. N'y a t-il pas moyen d'accélérer le traitement, (je n'utilise peut-etre pas la bonne méthode, je l'ai collée dans un module VB)
Autre question : Dans l'exemple que tu m'as indiqué ci dessous, pour le parametre "Valeur_Proche" de la fonction RECHERCHEV tu a mis 0, je ne comprend pas pourquoi . Ce qui est sur sans ce parametre l'ensemble de la formule ne fonctionne pas et me retourne une mauvaise valeur.
Merci pour ta participation a la résolution de mon problème
J'ai essayé la fonction PULL, mais l'exécution me semble très longue (j'ai
env 60 cellule qui vont utiliser cette fonction), la je l'ai essayée sur 2
cellule.
N'y a t-il pas moyen d'accélérer le traitement, (je n'utilise peut-etre pas
la bonne méthode, je l'ai collée dans un module VB)
Autre question :
Dans l'exemple que tu m'as indiqué ci dessous, pour le parametre
"Valeur_Proche" de la fonction RECHERCHEV tu a mis 0, je ne comprend pas
pourquoi .
Ce qui est sur sans ce parametre l'ensemble de la formule ne fonctionne pas
et me retourne une mauvaise valeur.
Merci pour ta participation a la résolution de mon problème
J'ai essayé la fonction PULL, mais l'exécution me semble très longue (j'ai env 60 cellule qui vont utiliser cette fonction), la je l'ai essayée sur 2 cellule. N'y a t-il pas moyen d'accélérer le traitement, (je n'utilise peut-etre pas la bonne méthode, je l'ai collée dans un module VB)
Autre question : Dans l'exemple que tu m'as indiqué ci dessous, pour le parametre "Valeur_Proche" de la fonction RECHERCHEV tu a mis 0, je ne comprend pas pourquoi . Ce qui est sur sans ce parametre l'ensemble de la formule ne fonctionne pas et me retourne une mauvaise valeur.
J'ai essayé la fonction PULL, mais l'exécution me semble très longue
C'est très possible que l'éxécution de la procédure prenne un certain temps, malheureusement, il n'existe pas de solution plus rapide. A moins, peut-être, dépendamment du résultat souhaité... Une formule telle que:
la bonne méthode, je l'ai collée dans un module VB)
C'est exactement là qu'il fallait mettre le code!
Dans l'exemple que tu m'as indiqué ci dessous, pour le parametre
"Valeur_Proche" de la fonction RECHERCHEV tu a mis 0, je ne comprend pas
pourquoi .
La valeur 0 ou FAUX dans cette formulation, exige un résultat EXACT de la valeur cherchée. Si elle ne le trouve pas, la formule retourneras #NA!. Normalement, la valeur 1 ou VRAI, n'exigera pas un résultat EXACT de la valeur cherchée mais permettra de trouver le résultat le plus proche. Mais avec la fonction PULL, il est possible que l'on ne peut pas utiliser la valeur 1 ou VRAI. Il faudrait vérifier.
Starwing
Bonsoir Robert,
J'ai essayé la fonction PULL, mais l'exécution me semble
très longue
C'est très possible que l'éxécution de la procédure prenne
un certain temps, malheureusement, il n'existe pas de
solution plus rapide. A moins, peut-être, dépendamment du
résultat souhaité... Une formule telle que:
la bonne méthode, je l'ai collée dans un module VB)
C'est exactement là qu'il fallait mettre le code!
Dans l'exemple que tu m'as indiqué ci dessous, pour le
parametre
"Valeur_Proche" de la fonction RECHERCHEV tu a mis 0, je
ne comprend pas
pourquoi .
La valeur 0 ou FAUX dans cette formulation, exige un
résultat EXACT de la valeur cherchée. Si elle ne le trouve
pas, la formule retourneras #NA!.
Normalement, la valeur 1 ou VRAI, n'exigera pas un
résultat EXACT de la valeur cherchée mais permettra de
trouver le résultat le plus proche. Mais avec la fonction
PULL, il est possible que l'on ne peut pas utiliser la
valeur 1 ou VRAI. Il faudrait vérifier.
J'ai essayé la fonction PULL, mais l'exécution me semble très longue
C'est très possible que l'éxécution de la procédure prenne un certain temps, malheureusement, il n'existe pas de solution plus rapide. A moins, peut-être, dépendamment du résultat souhaité... Une formule telle que:
la bonne méthode, je l'ai collée dans un module VB)
C'est exactement là qu'il fallait mettre le code!
Dans l'exemple que tu m'as indiqué ci dessous, pour le parametre
"Valeur_Proche" de la fonction RECHERCHEV tu a mis 0, je ne comprend pas
pourquoi .
La valeur 0 ou FAUX dans cette formulation, exige un résultat EXACT de la valeur cherchée. Si elle ne le trouve pas, la formule retourneras #NA!. Normalement, la valeur 1 ou VRAI, n'exigera pas un résultat EXACT de la valeur cherchée mais permettra de trouver le résultat le plus proche. Mais avec la fonction PULL, il est possible que l'on ne peut pas utiliser la valeur 1 ou VRAI. Il faudrait vérifier.