synchroniser mon tableau avec un fichier que je reçois

Sheldor

XLDnaute Occasionnel
Supporter XLD
bonjour à tous,

j'ai un fichier de travail ("mon_fichier_de_travail") avec une table qui contient des prix, les données viennent d'un logiciel de compta qui exporte en .xls

pour mettre à jour ma table je refais un export depuis le logiciel de compta j'obtiens: "fichier_a_importer"

dans "fichier_a_importer" je peux avoir des lignes en plus (en vert), des lignes en moins et des différences de prix (en vert aussi)

(le tableau réel fait quelques milliers de lignes sur 50 colonnes)

je souhaite importer ces données dans "mon_fichier_de_travail" sachant que:

- si le prix diffère je prendrais toujours celui du fichier à importer car plus récent
- je ne veux pas importer l'ensemble car ça ferait plein de doublons
- s'il manque des lignes dans "fichier_a_importer" par rapport à la fois précédente je veux les conserver dans mon_fichier_de_travail
- je souhaite ajouter les lignes qui apparaissent comme nouvelle dans fichier_a_importer

ma question est la suivante: comment feriez-vous?

je peux écrire une macro "brutus" qui compare toutes les cellules et décide de quoi faire mais je serais ici très preneur d'un conseil pour m'aiguiller vers une piste plus élégante (pour apprendre des choses nouvelles...)

très grand merci par avance
nico
 

Pièces jointes

  • fichier_a_importer.xlsx
    9.3 KB · Affichages: 17
  • mon_fichier_de_travail.xlsx
    9.4 KB · Affichages: 19

Dranreb

XLDnaute Barbatruc
Bonjour.
Je le ferais en VBA à l'aide de la fonction Gigogne et de la fonction TableUnique.
Elles sont disponible dans le complément à installer et mettre en référence du projet d'application, mais on peut aussi installer les modules de service dans celui-ci.
 

Pièces jointes

  • GigIdx.xlsm
    86.5 KB · Affichages: 23

Dranreb

XLDnaute Barbatruc
Remarque: dans votre classeur de test de travail, la macro de mise à jour telle que vous la décrivez se résumerait alors à ça :
VB:
Sub MiseÀJour()
Dim TR(1 To 10000, 1 To 3), Code As SsGr, Produit As SsGr, L As Long
For Each Code In Gigogne(TableUnique(Feuil1.[A2], _
   Workbooks("fichier_a_importer.xlsx").Worksheets(1).[A2]), 1, 2)
   For Each Produit In Code.Co
      L = L + 1
      TR(L, 1) = Code.Id
      TR(L, 2) = Produit.Id
      TR(L, 3) = Produit.Co(Produit.Count)(3)
      Next Produit, Code
Feuil1.[A2].Resize(L, 3).Value = TR
End Sub
 

Discussions similaires

Réponses
2
Affichages
884
Réponses
16
Affichages
545

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh