Liaison entre 2 classeurs excel

bobtoison

XLDnaute Nouveau
Bonjour à tous,

Je cherche à automatiser une saisie de données en créant des liaisons entre 2 classeurs excel, l'un (que l'on appellera classeur A) que je reçois tous les jours avec des données brutes, chaque jour classeur A rajoute un onglet supplémentaire avec un nouveau tableau de données.
L'autre classeur, que j'ai créé (classeur B) incorpore les données de classeur A et les met en forme. Ce classeur B me sert pour un troisieme classeur et il en est une etape indispensable.

Je vous expose mon problème :

Nous sommes le 1er decembre

le classeur A n'a qu'un seul onglet le 1er decembre
Chaque jour classeur A ajoute un onglet correspondant au jour supplémentaire. Au 31 décembre il contient donc 31 onglets.

je conçois classeur B pour tout le mois de décembre
il contient 31 onglets qui correspondent aux 31 jours du mois
Dans le 1er onglet je crée un lien tout simple en A1 "=ClasseurA/onglet1/plage de cellules"
Nous sommes le 1er decembre donc tout fonctionne, l'onglet 1 existe bel et bien dans le classeur A donc les données sont rappatriées sans problème.

Dans les onglets 2,3,4,5,...,31 de mon classeur B, je crée des liaisons avec le classeur A type "=ClasseurA/onglet2,3,4,....31/plage de données" en anticipant leurs arrivées les jours suivants.
Je ferme classeur B.

Le 2 décembre

je reçois classeur A qui contient maintenant 2 onglets
J'ouvre classeur B, il actualise onglet 1 et onglet 2 sans problème.
Alors bien sûr il n'actualise pas onglet 3,4,5,6.....,31 puisque ces derniers n'existent pas encore dans classeur A. A la rigueur, ça n'est pas grave. Le problème est que classeur B a remplacé dans les 29 onglets restant tous mes liens type "=ClasseurA/onglet3,4,5...,31/plage de données" par "=ClasseurA/#REF/plage de données".
Je suis donc obligé, tous les jours, de remplacer tous les "#REF" par "onglet 3,4,5....,31".

Je me demandais donc, au terme de ce long développement (merci pour votre patience), s'il existait un moyen pour que les liens de classeur B sur les onglets de classeur A qui n'existent pas encore, restent tels quels ?
Une solution existe-t-elle ?
Est-ce que c'est peine perdue ?

Je ne cherche pas spécialement une solution toute faite, mais juste savoir si une solution existe.

Merci beaucoup à ceux qui auront eu la patience de lire ce casse tête.

Bonne journée

Cordialement,

Bob

ci dessous des images pour illsutrer mes propos...

Classeur B


Classeur B anticipant l'onglet 03-01-2009


Classeur A au 2 decembre donc sans onglet 03-01-2009


Classeur B au 2 decembre, récupère les données des onglets 01-01-2009 et 02-01-2009 du classeur A mais dans l'onglet 03-01-2009 remplace mon lien vers l'onglet à venir du classeur A par "#REF" (entouré en rouge)
 

pierrejean

XLDnaute Barbatruc
Re : Liaison entre 2 classeurs excel

Re

Pour aider a comprendre la fonction

Code:
Function Valeur(classeur As String, feuille As String, ligne, colonne)
'pour que le recalcul soit fait en toute circonstance
Application.Volatile
'initialisation de ab
ab = False
'gestion d'erreur : en cas d'erreur passer a la ligne suivante
On Error Resume Next
' pour provoquer l'erreur si la feuille n'existe pas
 f = Workbooks(classeur).Sheets(feuille).Name
'on note s'il y a erreur
 If Err.Number <> 0 Then ab = True
'reinitialiser la gestion d'erreur
On Error GoTo 0
'si la feuille n'existe pas
If ab Then
  Valeur = ""
Else
'si elle existe
'cells(ligne,colonne).address= l'adresse designée par ligne et colonne
  Valeur = Workbooks(classeur).Sheets(feuille).Range(Cells(ligne, colonne).Address)
End If
End Function
 

bobtoison

XLDnaute Nouveau
Re : Liaison entre 2 classeurs excel

@ PierreJean,

Si j'ai bien compris, le passage de "A3" à LIGNE();COLONNE() va rechercher
non pas une cellule en particulier dans le classeur A, mais l'intersection d'une ligne et d'une colonne qui se situe aux mêmes endroits dans mes tableaux dans classeur A et B ?

Lorsque tu dis que "compte tenu du fait que l'adresse dans la feuille A est la même que dans la feuille B" tu veux dire que ta formule ne marche que si et seulement si les tableaux de classeur A et classeur B sont identiques et localisés au même endroit sur ma feuille ? c'est bien celà ?

Car si c'est la seule restriction/contrainte que j'ai, moi je suis aux anges !!!

Très sincèrement, je te remercie de ton aide !
ça va vraiment me faire gagner un temps fou !

Merci à tous pour votre temps !

Passez tous une bonne soirée et un bon week end !

A la prochaine !

Bob

edit :
@PJ
Je decouvre ton decryptage de la macro, merci ! (un de plus :-D)
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Liaison entre 2 classeurs excel

Re

C'est bien ce que je voulais dire
Si la formule est en A3 en classeur B elle ira chercher A3 en classeur A avec LIGNE() et COLONNE()
Mais on pourrait imaginer des decalages avec (par exemple) LIGNE()-1 et COLONNE()+1 qui irait chercher B2 (nota: je n'ai pas testé)
 

JCGL

XLDnaute Barbatruc
Re : Liaison entre 2 classeurs excel

Bonjour à tous,

Suite au nouveau code déposé par PJ, j'ai tenté une possibilité d'avoir la même formule pour toutes les feuilles.

En A1 de chaque feuille :
Code:
=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;32)
Et la fonction de PJ en A3 et à droite et vers le bas des feuilles du 'Classeur B.xls' :
Code:
=Valeur("Classeur A.xls";$A$1;LIGNE();COLONNE())
Un format personnalisé pour masquer les 0 :




Le fichier 'Classeur A.xls' doit être ouvert

A+ à tous

PS : tu peux faire de même pour le nom du classeur source :

En B1 : Classeur A.xls
La fonction devient :
Code:
=Valeur($B$1;$A$1;LIGNE();COLONNE())
 

Pièces jointes

  • Classeurs A et B.zip
    14.2 KB · Affichages: 44
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Liaison entre 2 classeurs excel

Bonjour a tous

Excellent JC
Ainsi la formule devient universelle

Mais comme je suis un fan de Vba et nullissime en formule je propose la fonction personnalisée suivante (qui n'est pas de mon cru)

Code:
Function MonNom() As String
Application.Volatile
MonNom = Application.Caller.Parent.Name
End Function

ce qui donnerait:

=Valeur("Classeur A.xls";MonNom();LIGNE();COLONNE())
 

Discussions similaires

Réponses
5
Affichages
434

Statistiques des forums

Discussions
315 079
Messages
2 115 979
Membres
112 631
dernier inscrit
lapieuvre530