VBA - Lien dynamique

Fermé
gixix - 30 mars 2009 à 10:49
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 31 mars 2009 à 10:37
Bonjour,

J'ai un fichier excel (2003) ayant pour but d'annualiser des données se trouvant sous forme mensuelle dans des fichiers distincts. Ce fichier fait donc référence à 12 fichiers mensuels ayant les noms suivants : XX_janvier_2008.xls / XX_février_2008.xls / ...

J'aimerais pouvoir automatiser le fichier afin de pouvoir le réutiliser pour 2009, 2010, ... sans avoir besoin de changer les références manuellement (Il y a pas mal de liaisons => risque d'oubli...). Les fichiers pour 2009 ont les mêmes noms mais avec 2009 à la fin : XX_janvier_2009.xls / XX_février_2009.xls / ...

Quelqu'un a-t-il une macro VBA (ou autre, mais je pense pas que ce soit faisable sans macro) qui me permettrait d'introduire dans une cellule l'année qui m'intéresse (2008, 2009, ...) et d'adapter automatiquement les liens vers les fichiers en fonction (XX_janvier_2008 ou XX_janvier_2009, ... en fonction de l'année mise dans une cellule).

Merci pour votre aide.

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
30 mars 2009 à 11:33
Bonjour,

sans macro!

ton année est saisie en B2 les noms des classeurs sont simplifiés dans ma proposition "an_2008, an_2009)... et je vais chercher la valeur de D5 dans la feuille 1
essaies:
=INDIRECT("[an_"&B2&".xls]Feuil1!$D$5")
0
Merci Michel,

Ta solution n'est pas mal du tout (je ne connaissais pas cette façon de faire), mais semble nécessiter que tous mes fichiers liés soient ouverts pour que la mise à jour s'opère (si je n'ouvre pas le fichier lié, il m'apparait un #REF et dès que je l'ouvre ça se met à jour). Existe-il un moyen simple de corriger ce problème afin que quand j'ouvre le fichier général, je n'ai pas à ouvrir les 12 fichiers attachés ?

Merci d'avance.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
30 mars 2009 à 12:30
Re,

tous les liens avec d'autres classeurs nécessitent une ouverture de la source (ou de répondre "oui" à la demande)...
mais tu peux passer par des fichiers fermés avec la technologie ADO ou si tu n'as pas beaucoup de transfert
cette macro dite de Walkenbach, par exemple:

chemin="c:\ ...etc"
classeur="janvier_" & range("B2") 'cellule affectée avec millésime
onglet="feuil1"
' modèle pour écrire param='C:\mes documents\riri\[Classeur1.xls]Classeur1Feuil3'!L1C1
param = "'" & chemin & "\[" & classeur & "]" & onglet & "'!R1C1"
' macro dite de John Walkenbach
range("D4") = ExecuteExcel4Macro(param)
0
Hello Michel,

Merci pour tes réponses. Comme c'est la 1ère fois que je programme en VBA, ben suis tout à côté... Mais je me suis amusé ce soir a tenté 2-3 trucs et ben c'est pas si compliqué que ça au final.

Concernant ton algorithme, pourrais-tu me dire à quoi corresond le paramètre R1C1 ? Si je veux copier une cellule spécifique (genre D1), quel code dois-je mettre à la place du R1C1. De même, si je veux copier un bout de colonne (genre D1:D9), que dois-je mettre ?

Désolé pour ces questions basiques et merci pour l'aide, mais faut bien commencer un jour ;-)

Salutations.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
31 mars 2009 à 10:37
Bonjour,

Ce n'est pas mon algo mais celui de John Walkenback, un des grands chefs iroqouis à 3 plumes d'Excel

ta question
RnCn signifie
R: rangée (row)
C colonne (column)
par ex E4 ==> R4C5 B56 ==> R56C2
0