Liaison entre fichier avec mise à jour vers une feuille variable (la première?)

Circark

XLDnaute Nouveau
Bonjour à vous,

J'ai un fichier Excel (classeur.xls) avec des feuilles sous cette forme :
D05 D04 D03 D02 D01

A chaque fois, je copie une feuille, la D05 par exemple, que je renomme en D06, et place en début de chaine (dans l'ordre des feuilles) :
D06 D05 D04 D03 D02 D01

J'effectue ensuite dans D06 mes modifications (je change quelques valeurs).

Je désire faire un classeur récapitulatif à part (récap.xls) qui ouvre en liaison toujours la première feuille (la plus récente donc, le D06 dans notre cas). Et quand, un jour, je décide de faire le D07 (et D08, D09, D10, etc.) (en copiant le D06 et en y apportant des modifs et en le plaçant en bout de chaîne : D07 D06 D05 D04 D03 D02 D01), je veux que la mise à jour soit fait automatiquement dans le fichier récap.xls sur la première feuille du classeur. :confused:

J'ai essayer de copier avec liaison entre les fichiers, mais le soucis est que la mise à jour ne se fait pas dans récap.xls (lorsque D07 est présent et que j'ai copier D06, et bien la liaison se fait (logiquement) toujours avec D06 et non D07.

Merci par avance pour votre aide.
Sincères salutations
 
Dernière édition:

Odesta

XLDnaute Impliqué
Re : Liaison entre fichier avec mise à jour vers une feuille variable (la première?)

Bonjour

Voici un code qui, à l'ouverture, remplace, sur la feuille active, les références à la feuilles par la suivante.
C'est une possibilité, il y en a d'autre

Et il faut l'adapter à vos fichiers :

Attention, le code reprend comme ancienne feuille, la nouvelle -1. Donc si il y a deux nouvelles feuilles avant de mettre à jour, le code ne fonctionne plus. D'où peut être l'utilité de récupérer la variable indice_ancien dans le fichier recap !!
VB:
Sub auto_open()
Dim indice, indice_ancien  As Integer
indice = 0

For Each feuille In Workbooks("classeur.xls").Sheets
    If CInt(Right(feuille.Name, 2) > indice) Then
        indice = CInt(Right(feuille.Name, 2))
    End If
Next
indice_ancien = indice - 1
remplacer_par = "]D" & Format(indice, "00") & "!"
remplacer_quoi = "]D" & Format(indice_ancien, "00") & "!"

Cells.Select
Selection.Replace What:="remplacer_quoi", Replacement:="remplacer_par", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

End Sub

Cordialement

Olivier
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 020
dernier inscrit
Mzghal