Microsoft 365 Liaison entre deux cellulles dans les deux sens

Piaf79

XLDnaute Junior
Bonjour le forum,
Je ne sais pas si cela est possible en VBA mais je cherche a créer une liaison entre deux cellules dans les deux sens.
Ex : Feuil1 A1 liée dans les deux sens avec Feuil2 A2 que je modifie la cellule en Feuil1 ou en Feuil2 l'autre est actualisée automatiquement.
Merci d'avance pour vos remarques/retours.
Piaf79
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
L'avez vous néanmoins installé, le classeur que j'ai joint ?
Il contient des outils permettant de simplifier certaines programmations. Essentiellement une fonction qui s'appelle Gigogne parce qu'elle permet d'organise des données sous forme de collections imbriquées. C'est assez normal que vous ayez un peu de mal à voir quel rôle elle pourra jouer. Ce sera essentiellement lors de l'éclatement du fichier de synthèse, avant sa fermeture, vers les différents fichiers clients. Si toutefois ce principe vous parait bien suffisant pour vos besoins, bien qu'un fichier client ne pourrait pas être actualisé s'il est ouvert quand le fichier de synthèse sera en cours de fermeture.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Décidez vous. Ça sera suffisant comme ça ?
Ce serait une mauvaise politique de votre part d'attendre de voir ce que je vais vous proposer pour me dire ce qui n'ira pas.
Je vais commencer à développer quelque chose dans ce sens, puisque qui ne dit mot consent. Mais si vos critiques ultérieurs devaient impliquer de repartir de zéro dans une autre direction, ce sera tant pis, vous n'aurez que ça puisqu'ayant raté l'occasion d'y réfléchir avec moi auparavant.
Vous pouvez quand même me dire une chose: Quelle serait les réactions souhaitées du code, celle lors de l'ouverture et celle lors de la fermeture du fichier de synthèse, s'il s'avérait qu'un des fichiers clients est ReadOnly lors de son ouverture, c'est à dire ouvert par quelqu'un d'autre ?
Et puis vous avez à me renvoyer un modèle un peu plus propre, avec des titres de colonnes, le tout de préférence sous forme de tableaux régis par Excel c'est à dire dont les éléments se désignent normalement par références structurées dans les formules.
On pourrait aussi éviter le nom du fichier en colonne A de chaque fichier client.

Les deux procédures devraient ressembler à ça, sans tenir compte pour le moment des dispositifs à ajouter en cas de Wbk.ReadOnly juste après leur ouverture :
VB:
Option Explicit
Sub Regroupement()
   Dim TSyn(), LSyn&, NomFic As String, Wbk As Workbook, CodeCli As String, TCli(), LCli&, CMax&, C&, LOt As ListObject
   ChDrive ThisWorkbook.Path: ChDir ThisWorkbook.Path
   ReDim TSyn(1 To 1500, 1 To 10)
   NomFic = Dir("*.xlsm")
   Do While NomFic <> ""
      Set Wbk = Workbooks.Open(NomFic)
      TCli = Wbk.Worksheets(1).ListObjects(1).DataBodyRange.Value
      CMax = UBound(TCli, 2): If CMax + 1 > UBound(TSyn, 2) Then ReDim Preserve TSyn(1 To 1500, 1 To CMax + 1)
      For LCli = 1 To UBound(TCli, 1)
         LSyn = LSyn + 1: TSyn(LSyn, 1) = CodeCli
         For C = 1 To CMax: TSyn(LSyn, C + 1) = TCli(LCli, C): Next C, LCli
      Wbk.Close SaveChanges:=False
      Loop
   Set LOt = ThisWorkbook.Worksheets(1).ListObjects(1)
   If LOt.ListRows.Count > LSyn Then LOt.ListRows(LSyn + 1).Range.Resize(LOt.ListRows.Count - LSyn).Delete xlShiftUp
   LOt.HeaderRowRange.Offset(1).Resize(LSyn, UBound(TSyn, 2)).Value = TSyn
   End Sub
Sub Eclatement()
   Dim LOt As ListObject, CMax&, Client As SsGr, TCli(), LCli&, Détail, C&, Wbk As Workbook
   ChDrive ThisWorkbook.Path: ChDir ThisWorkbook.Path
   Set LOt = ThisWorkbook.Worksheets(1).ListObjects(1)
   CMax = LOt.ListColumns.Count - 1
   For Each Client In Gigogne(LOt, 1, Null, 2, 3)
      ReDim TCli(1 To Client.Count, 1 To CMax): LCli = 0
      For Each Détail In Client.co
         LCli = LCli + 1: For C = 1 To CMax: TCli(LCli, C) = Détail(C + 1): Next C, Détail
      Wbk = Workbooks.Open(Client.ID & ".xlsm")
      Set LOt = Wbk.Worksheets(1).ListObjects(1)
      If LOt.ListRows.Count > LCli Then LOt.ListRows(LCli + 1).Range.Resize(LOt.ListRows.Count - LCli).Delete xlShiftUp
      LOt.HeaderRowRange.Offset(1).Resize(LCli, CMax).Value = TCli
      Wbk.Close SaveChanges:=True: Next Client
   End Sub
Édition: Et vous n'avez toujours pas répondu non plus quant à l'éventualité que les modif apportées dans les fichiers clients et dans celui de synthèse portent en réalité sur des colonnes différentes, auquel cas il conviendrait, plutôt qu'un remplacement pur et simple de chaque ensemble dans sa totalité, d'appliquer une utilisation plus poussée de la fonction Gigogne, même dans le Regroupement cette fois, visant à marier les élément des deux sources se rapportant à la même chose (les deux 1ères colonnes, c'est bien ça ?).
 
Dernière édition:

Piaf79

XLDnaute Junior
Bonjour,
Désolé pour mon manque de clarté au niveau de mes réponses.
N'arrivant pas à être clair dans ma demande, je voudrais ne pas vous faire perdre du temps inutilement...
Je vais donc songer à faire autrement... ou au final si vraiment je n'arrive pas à obtenir ce que je souhaite... à ne pas faire.
En vous remerciant pour le temps que vous m'avez consacré depuis quelques jours.
Avec mes excuses.
Piaf79
 

Discussions similaires