Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Maj liaisons dans formule décaler

7 réponses
Avatar
ttcpp
Bonjour,

J'ai un petit problème. J'essaye en vain de mettre à jour des liaisons dans
un classeur en vba. Cela fonctionne trés bien pour les liaisons 'simples',
c'est à dire vers une cellule d'un autre classeur.
Par contre impossible de mettre à jour la liaison vers un classeur externe
quand celle -ci se trouve dans une une formule DECALER(...). Pourtant le
classeur dans lequel je veux récupérer les valeurs est bien ouvert. La seule
solution que j'ai touver c'est de mettre à jour la liaison via le menu
"Editions-Liaisons..". Mais ce n'est pas ce que je souhaite.
Le programme ci-dessous change le nom du chemin ainsi que le nom du fichier.
Le chemin est bien mis à jour, par contre le nom du fichier ne change pas
(sauf pour les liaisons"simples").

Sub Traitement_Liaisons()
On Error Resume Next
Anc_Chemin_Rep = Sheets("Donnees").Range("D" & nl & "").Value
New_Chemin_Rep = Sheets("Donnees").Range("B" & nl & "").Value
A_N_F = Sheets("Donnees").Range("E" & nl & "").Value
N_N_F = Sheets("Donnees").Range("C" & nl & "").Value

ActiveWorkbook.ChangeLink Name:="" & Anc_Chemin_Rep & "\" & A_N_F & "",
NewName:="" & New_Chemin_Rep & "\" & N_N_F & "", Type:=xlExcelLinks

End Sub

Merci pour votre aide
Thierry

7 réponses

Avatar
MichDenis
Bonjour.

Il manque un petit quelque chose à ta procédure.
Tu oublies après ta modification du lien de demander
une mise à jour du lien. Ajoute une ligne de code à ta
procédure :


Pour mettre à jour les données avec un fichier source bien identifié,
on peut utiliser ceci :
'------------------------
With ThisWorkbook
.UpdateLink Name:=" C : AtravailClasseur1.xls", Type:=xlExcelLinks
End With
'------------------------

Pour mettre à jours tous les liens du classeur
'-------------------------
With ThisWorkbook
Liens =. LinkSources(xlExcelLinks)
For Each lelien In Liens
.UpdateLink Name:=lelien, Type:=xlExcelLinks
Next
End With




"ttcpp" a écrit dans le message de groupe de discussion
:
Bonjour,

J'ai un petit problème. J'essaye en vain de mettre à jour des liaisons dans
un classeur en vba. Cela fonctionne trés bien pour les liaisons 'simples',
c'est à dire vers une cellule d'un autre classeur.
Par contre impossible de mettre à jour la liaison vers un classeur externe
quand celle -ci se trouve dans une une formule DECALER(...). Pourtant le
classeur dans lequel je veux récupérer les valeurs est bien ouvert. La seule
solution que j'ai touver c'est de mettre à jour la liaison via le menu
"Editions-Liaisons..". Mais ce n'est pas ce que je souhaite.
Le programme ci-dessous change le nom du chemin ainsi que le nom du fichier.
Le chemin est bien mis à jour, par contre le nom du fichier ne change pas
(sauf pour les liaisons"simples").

Sub Traitement_Liaisons()
On Error Resume Next
Anc_Chemin_Rep = Sheets("Donnees").Range("D" & nl & "").Value
New_Chemin_Rep = Sheets("Donnees").Range("B" & nl & "").Value
A_N_F = Sheets("Donnees").Range("E" & nl & "").Value
N_N_F = Sheets("Donnees").Range("C" & nl & "").Value

ActiveWorkbook.ChangeLink Name:="" & Anc_Chemin_Rep & "" & A_N_F & "",
NewName:="" & New_Chemin_Rep & "" & N_N_F & "", Type:=xlExcelLinks

End Sub

Merci pour votre aide
Thierry
Avatar
ttcpp
Merci pour ta réponse , mais cela ne fonctionne pas. En fait quand j'écrits
que la mise ne s'éffectue pas , il faut comprendre que le nouveau nom du
fichier sur lequel je veux pointer ne change pas, je n'arrivea pas àl
modifier par le code VBA mais seulement en actualisant manuellement la
liaison . Sinon pour les autres liaisons tout est ok.


"MichDenis" a écrit :

Bonjour.

Il manque un petit quelque chose ta procdure.
Tu oublies aprs ta modification du lien de demander
une mise jour du lien. Ajoute une ligne de code ta
procdure :


Pour mettre jour les donnes avec un fichier source bien identifi,
on peut utiliser ceci :
'------------------------
With ThisWorkbook
.UpdateLink Name:=" C : AtravailClasseur1.xls", Type:=xlExcelLinks
End With
'------------------------

Pour mettre jours tous les liens du classeur
'-------------------------
With ThisWorkbook
Liens =. LinkSources(xlExcelLinks)
For Each lelien In Liens
.UpdateLink Name:=lelien, Type:=xlExcelLinks
Next
End With




"ttcpp" a crit dans le message de groupe de discussion
:
Bonjour,

J'ai un petit problme. J'essaye en vain de mettre jour des liaisons dans
un classeur en vba. Cela fonctionne trs bien pour les liaisons 'simples',
c'est dire vers une cellule d'un autre classeur.
Par contre impossible de mettre jour la liaison vers un classeur externe
quand celle -ci se trouve dans une une formule DECALER(...). Pourtant le
classeur dans lequel je veux rcuprer les valeurs est bien ouvert. La seule
solution que j'ai touver c'est de mettre jour la liaison via le menu
"Editions-Liaisons..". Mais ce n'est pas ce que je souhaite.
Le programme ci-dessous change le nom du chemin ainsi que le nom du fichier.
Le chemin est bien mis jour, par contre le nom du fichier ne change pas
(sauf pour les liaisons"simples").

Sub Traitement_Liaisons()
On Error Resume Next
Anc_Chemin_Rep = Sheets("Donnees").Range("D" & nl & "").Value
New_Chemin_Rep = Sheets("Donnees").Range("B" & nl & "").Value
A_N_F = Sheets("Donnees").Range("E" & nl & "").Value
N_N_F = Sheets("Donnees").Range("C" & nl & "").Value

ActiveWorkbook.ChangeLink Name:="" & Anc_Chemin_Rep & "" & A_N_F & "",
NewName:="" & New_Chemin_Rep & "" & N_N_F & "", Type:=xlExcelLinks

End Sub

Merci pour votre aide
Thierry




Avatar
MichDenis
Si c'est possible, publie à cette adresse Cjoint.com (500 Ko maximum)
un bout de ton fichier illustrant une plage de cellules avec les
formules et les liens qu'elles possèdent. De plus, mentionne par quoi
tu veux remplacer le lien que le fichier possède !

IL ne faut pas oublier de publier ici l'adresse obtenue.




"ttcpp" a écrit dans le message de groupe de discussion
:
Merci pour ta réponse , mais cela ne fonctionne pas. En fait quand j'écrits
que la mise ne s'éffectue pas , il faut comprendre que le nouveau nom du
fichier sur lequel je veux pointer ne change pas, je n'arrivea pas àl
modifier par le code VBA mais seulement en actualisant manuellement la
liaison . Sinon pour les autres liaisons tout est ok.


"MichDenis" a écrit :

Bonjour.

Il manque un petit quelque chose ta procdure.
Tu oublies aprs ta modification du lien de demander
une mise jour du lien. Ajoute une ligne de code ta
procdure :


Pour mettre jour les donnes avec un fichier source bien identifi,
on peut utiliser ceci :
'------------------------
With ThisWorkbook
.UpdateLink Name:=" C : AtravailClasseur1.xls", Type:=xlExcelLinks
End With
'------------------------

Pour mettre jours tous les liens du classeur
'-------------------------
With ThisWorkbook
Liens =. LinkSources(xlExcelLinks)
For Each lelien In Liens
.UpdateLink Name:=lelien, Type:=xlExcelLinks
Next
End With




"ttcpp" a crit dans le message de groupe de discussion
:
Bonjour,

J'ai un petit problme. J'essaye en vain de mettre jour des liaisons dans
un classeur en vba. Cela fonctionne trs bien pour les liaisons 'simples',
c'est dire vers une cellule d'un autre classeur.
Par contre impossible de mettre jour la liaison vers un classeur externe
quand celle -ci se trouve dans une une formule DECALER(...). Pourtant le
classeur dans lequel je veux rcuprer les valeurs est bien ouvert. La seule
solution que j'ai touver c'est de mettre jour la liaison via le menu
"Editions-Liaisons..". Mais ce n'est pas ce que je souhaite.
Le programme ci-dessous change le nom du chemin ainsi que le nom du fichier.
Le chemin est bien mis jour, par contre le nom du fichier ne change pas
(sauf pour les liaisons"simples").

Sub Traitement_Liaisons()
On Error Resume Next
Anc_Chemin_Rep = Sheets("Donnees").Range("D" & nl & "").Value
New_Chemin_Rep = Sheets("Donnees").Range("B" & nl & "").Value
A_N_F = Sheets("Donnees").Range("E" & nl & "").Value
N_N_F = Sheets("Donnees").Range("C" & nl & "").Value

ActiveWorkbook.ChangeLink Name:="" & Anc_Chemin_Rep & "" & A_N_F & "",
NewName:="" & New_Chemin_Rep & "" & N_N_F & "", Type:=xlExcelLinks

End Sub

Merci pour votre aide
Thierry




Avatar
ttcpp
Voici un exemple de fichier que je dois mettre à jour.
http://cjoint.com/?eioThFkVac

Merci d'avance

"MichDenis" a écrit :

Si c'est possible, publie cette adresse Cjoint.com (500 Ko maximum)
un bout de ton fichier illustrant une plage de cellules avec les
formules et les liens qu'elles possdent. De plus, mentionne par quoi
tu veux remplacer le lien que le fichier possde !

IL ne faut pas oublier de publier ici l'adresse obtenue.




"ttcpp" a crit dans le message de groupe de discussion
:
Merci pour ta rponse , mais cela ne fonctionne pas. En fait quand j'crits
que la mise ne s'ffectue pas , il faut comprendre que le nouveau nom du
fichier sur lequel je veux pointer ne change pas, je n'arrivea pas l
modifier par le code VBA mais seulement en actualisant manuellement la
liaison . Sinon pour les autres liaisons tout est ok.


"MichDenis" a crit :

> Bonjour.
>
> Il manque un petit quelque chose ta procdure.
> Tu oublies aprs ta modification du lien de demander
> une mise jour du lien. Ajoute une ligne de code ta
> procdure :
>
>
> Pour mettre jour les donnes avec un fichier source bien identifi,
> on peut utiliser ceci :
> '------------------------
> With ThisWorkbook
> .UpdateLink Name:=" C : AtravailClasseur1.xls", Type:=xlExcelLinks
> End With
> '------------------------
>
> Pour mettre jours tous les liens du classeur
> '-------------------------
> With ThisWorkbook
> Liens =. LinkSources(xlExcelLinks)
> For Each lelien In Liens
> .UpdateLink Name:=lelien, Type:=xlExcelLinks
> Next
> End With
>
>
>
>
> "ttcpp" a crit dans le message de groupe de discussion
> :
> Bonjour,
>
> J'ai un petit problme. J'essaye en vain de mettre jour des liaisons dans
> un classeur en vba. Cela fonctionne trs bien pour les liaisons 'simples',
> c'est dire vers une cellule d'un autre classeur.
> Par contre impossible de mettre jour la liaison vers un classeur externe
> quand celle -ci se trouve dans une une formule DECALER(...). Pourtant le
> classeur dans lequel je veux rcuprer les valeurs est bien ouvert. La seule
> solution que j'ai touver c'est de mettre jour la liaison via le menu
> "Editions-Liaisons..". Mais ce n'est pas ce que je souhaite.
> Le programme ci-dessous change le nom du chemin ainsi que le nom du fichier.
> Le chemin est bien mis jour, par contre le nom du fichier ne change pas
> (sauf pour les liaisons"simples").
>
> Sub Traitement_Liaisons()
> On Error Resume Next
> Anc_Chemin_Rep = Sheets("Donnees").Range("D" & nl & "").Value
> New_Chemin_Rep = Sheets("Donnees").Range("B" & nl & "").Value
> A_N_F = Sheets("Donnees").Range("E" & nl & "").Value
> N_N_F = Sheets("Donnees").Range("C" & nl & "").Value
>
> ActiveWorkbook.ChangeLink Name:="" & Anc_Chemin_Rep & "" & A_N_F & "",
> NewName:="" & New_Chemin_Rep & "" & N_N_F & "", Type:=xlExcelLinks
>
> End Sub
>
> Merci pour votre aide
> Thierry
>
>



Avatar
MichDenis
J'ai fait le test suivant en utilisant cette macro.

Le fichier source étant fermé.

Après l'enregistrement du fichier, si j'ouvre
le nouveau fichier source, les liens affichent le résultat espéré.

Le Hic, c'est lorsque le fichier est ouvert, dans la formule, la référence
au fichier source n'est pas la même lorsque le fichier est fermé.

Ce que tu désires est peut être autre chose... mais l'usage de "Decaler"
est limitatif dans ce cas-ci.
'------------------------------
Sub test()

ancienLien = "C:UsersDMDocumentsExercice.xls"
NouveauLien = "C:UsersDMDocumentstest.xls"

With ThisWorkbook
.ChangeLink ancienLien, NouveauLien, xlExcelLinks
End With
Mise_à_jour

End Sub
'------------------------------------------




"ttcpp" a écrit dans le message de groupe de discussion
:
Voici un exemple de fichier que je dois mettre à jour.
http://cjoint.com/?eioThFkVac

Merci d'avance

"MichDenis" a écrit :

Si c'est possible, publie cette adresse Cjoint.com (500 Ko maximum)
un bout de ton fichier illustrant une plage de cellules avec les
formules et les liens qu'elles possdent. De plus, mentionne par quoi
tu veux remplacer le lien que le fichier possde !

IL ne faut pas oublier de publier ici l'adresse obtenue.




"ttcpp" a crit dans le message de groupe de discussion
:
Merci pour ta rponse , mais cela ne fonctionne pas. En fait quand j'crits
que la mise ne s'ffectue pas , il faut comprendre que le nouveau nom du
fichier sur lequel je veux pointer ne change pas, je n'arrivea pas l
modifier par le code VBA mais seulement en actualisant manuellement la
liaison . Sinon pour les autres liaisons tout est ok.


"MichDenis" a crit :

> Bonjour.
>
> Il manque un petit quelque chose ta procdure.
> Tu oublies aprs ta modification du lien de demander
> une mise jour du lien. Ajoute une ligne de code ta
> procdure :
>
>
> Pour mettre jour les donnes avec un fichier source bien identifi,
> on peut utiliser ceci :
> '------------------------
> With ThisWorkbook
> .UpdateLink Name:=" C : AtravailClasseur1.xls", Type:=xlExcelLinks
> End With
> '------------------------
>
> Pour mettre jours tous les liens du classeur
> '-------------------------
> With ThisWorkbook
> Liens =. LinkSources(xlExcelLinks)
> For Each lelien In Liens
> .UpdateLink Name:=lelien, Type:=xlExcelLinks
> Next
> End With
>
>
>
>
> "ttcpp" a crit dans le message de groupe de
> discussion
> :
> Bonjour,
>
> J'ai un petit problme. J'essaye en vain de mettre jour des liaisons dans
> un classeur en vba. Cela fonctionne trs bien pour les liaisons 'simples',
> c'est dire vers une cellule d'un autre classeur.
> Par contre impossible de mettre jour la liaison vers un classeur externe
> quand celle -ci se trouve dans une une formule DECALER(...). Pourtant le
> classeur dans lequel je veux rcuprer les valeurs est bien ouvert. La seule
> solution que j'ai touver c'est de mettre jour la liaison via le menu
> "Editions-Liaisons..". Mais ce n'est pas ce que je souhaite.
> Le programme ci-dessous change le nom du chemin ainsi que le nom du fichier.
> Le chemin est bien mis jour, par contre le nom du fichier ne change pas
> (sauf pour les liaisons"simples").
>
> Sub Traitement_Liaisons()
> On Error Resume Next
> Anc_Chemin_Rep = Sheets("Donnees").Range("D" & nl & "").Value
> New_Chemin_Rep = Sheets("Donnees").Range("B" & nl & "").Value
> A_N_F = Sheets("Donnees").Range("E" & nl & "").Value
> N_N_F = Sheets("Donnees").Range("C" & nl & "").Value
>
> ActiveWorkbook.ChangeLink Name:="" & Anc_Chemin_Rep & "" & A_N_F & "",
> NewName:="" & New_Chemin_Rep & "" & N_N_F & "", Type:=xlExcelLinks
>
> End Sub
>
> Merci pour votre aide
> Thierry
>
>



Avatar
MichDenis
Dans la procédure, supprime cette ligne : Mise_à_jour
c'est un résidu d'un copier-coller.
Désolé.
Avatar
ttcpp
Cela fonctionne.
En fait le problème venait du fait que lorsque je dupliquais le répertoire,
seul le nom du fichier devait être mis à jour.
Cela dit, grace à ton aide j'ai appris une nouvelle manière de coder en VBA
la mise à jour des liaisons.

Merci pour ton aide.

"MichDenis" a écrit :

Dans la procdure, supprime cette ligne : Mise__jour
c'est un rsidu d'un copier-coller.
Dsol.