Maj liaisons dans formule décaler

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #19063271
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" :
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
ttcpp
Le #19063751
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" :
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




MichDenis
Le #19064311
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" :
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" :
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




ttcpp
Le #19064261
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" :
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" > :
> 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
>
>



MichDenis
Le #19064561
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" :
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" :
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" > 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
>
>



MichDenis
Le #19065011
Dans la procédure, supprime cette ligne : Mise_à_jour
c'est un résidu d'un copier-coller.
Désolé.
ttcpp
Le #19070541
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.






Publicité
Poster une réponse
Anonyme