Je viens de tester votre prosposition et vous remercie pour votre aide sur ce sujet à priori, pas facile à résoudre.
Voici mes remarques : elle résoud le principal problème dans la mise à jour automatique des liens mais comme vous l'avez annoncé, il y a une condition, c'est que le fichier source doit étre ouvert également, sinon la cellule renvoie #REF!.
Peut-on détourner cette condition ??? Quelqu'un aurait-t-il une piste ??
Re : Mise à jour automatique d'un chemin "Sous répertoire"
Bonjour,
J'ai fait une fonction personnalisée qui ne me plaît pas trop car elle l'air de consommer beaucoup de ressources.
Si vous ne l'utilisez qu'en F4 cela devrait quand même aller.
Code à copier dans un module standard
Code:
Function Liaison_pmo(Nom_Fichier_Source As String, _
Nom_Feuille_Source As String, Adresse_Cellule_Source As String) As Variant
On Error GoTo Erreur
If LCase(Right(Nom_Fichier_Source, 4)) <> ".xls" Then
Nom_Fichier_Source = Nom_Fichier_Source & ".xls"
End If
Dim APP As Excel.Application
Dim WB As Workbook
Dim S As Worksheet
Dim R As Range
Set APP = CreateObject("Excel.Application")
Set WB = APP.Workbooks.Open(ActiveWorkbook.Path & "\" & Nom_Fichier_Source)
Set S = WB.Sheets(Nom_Feuille_Source)
Set R = S.Range(Adresse_Cellule_Source)
Liaison_pmo = R
Erreur:
On Error Resume Next
Set R = Nothing
Set S = Nothing
If Not WB Is Nothing Then WB.Close False
Set WB = Nothing
If Not APP Is Nothing Then APP.Quit
Set APP = Nothing
End Function
Cette fonction a 3 paramètres (tous des String)
Dans la cellule de votre choix (F4 dans votre exemple) tapez la formule suivante =Liaison_pmo("zaza";"Feuil1";"b11")
où "zaza" est le nom du classeur source
"Feuil1" est le nom de la feuille source
"b11" est la cellule source dont la valeur sera le résultat de la fonction.
Tous les arguments doivent être mis entre double quotes.
Faites un test avec un nouveau classeur.
Le classeur qui contient la fonction ET le classeur source doivent être dans le même répertoire.
J'ai fait une fonction personnalisée qui ne me plaît pas trop car elle l'air de consommer beaucoup de ressources.
Si vous ne l'utilisez qu'en F4 cela devrait quand même aller.
Code à copier dans un module standard
Code:
Function Liaison_pmo(Nom_Fichier_Source As String, _
Nom_Feuille_Source As String, Adresse_Cellule_Source As String) As Variant
On Error GoTo Erreur
If LCase(Right(Nom_Fichier_Source, 4)) <> ".xls" Then
Nom_Fichier_Source = Nom_Fichier_Source & ".xls"
End If
Dim APP As Excel.Application
Dim WB As Workbook
Dim S As Worksheet
Dim R As Range
Set APP = CreateObject("Excel.Application")
Set WB = APP.Workbooks.Open(ActiveWorkbook.Path & "\" & Nom_Fichier_Source)
Set S = WB.Sheets(Nom_Feuille_Source)
Set R = S.Range(Adresse_Cellule_Source)
Liaison_pmo = R
Erreur:
On Error Resume Next
Set R = Nothing
Set S = Nothing
If Not WB Is Nothing Then WB.Close False
Set WB = Nothing
If Not APP Is Nothing Then APP.Quit
Set APP = Nothing
End Function
Cette fonction a 3 paramètres (tous des String)
Dans la cellule de votre choix (F4 dans votre exemple) tapez la formule suivante =Liaison_pmo("zaza";"Feuil1";"b11")
où "zaza" est le nom du classeur source
"Feuil1" est le nom de la feuille source
"b11" est la cellule source dont la valeur sera le résultat de la fonction.
Tous les arguments doivent être mis entre double quotes.
Faites un test avec un nouveau classeur.
Le classeur qui contient la fonction ET le classeur source doivent être dans le même répertoire.
Merci pour votre code je testerai sur mon fichier pour voir le résultat tout en tentant de le comprendre. Malheureusement, en réalité je devrai appliquer la formule sur plusieurs cellules en F4 + jusqu-à 10 cellules plus bas.
Je verrai ce que ça donne au niveau vitesse de traitement !!