Accélération d'un Algo pour recherche d'occurrences de sommes entre 2 tableaux

  • Initiateur de la discussion @+Thierry
  • Date de début
@

@+Thierry

Guest
Bonsoir, ou plutôt Bonjour mes Amis et Amies, les Forumeurs et Forumeuses !

Une fois n'est pas coutume, mais je vais demander votre assistance car je pense que je peux trouver ici, si ce n'est une solution, en tout cas un autre regard sur la façon de rédiger un Algo, dont le but est très simple :

Réconciliation automatique entre deux états constituéS de seulement quelques informations en clefs d'enregistrements, mais hélas pas suffisamment et bien sûr aucune clef unique par enregistrement à "matcher". Et le pire reste à venir !!! lol

En effet, le Statement "DataC" contient moins d'enregistrements que le Statement "DataW". En fait cet état "DataW" contient le détails de transactions qui seront groupées sur l'état "DataC", exemple :

Sur DataW : en date d'entrée du 1er Mars on a acheté :
CHF 1,000.00 Valeur 2/03 qui vont coûter USD 809.45
EUR 1,500.00 Valeur 2/03 qui vont coûter USD 1,915.35
GBP 1,000.00 Valeur 2/03 qui vont coûter USD 1,907.40

Sur DataC : : en date d'entrée du 4 Mars on verra une seule ligne :
USD 4,632.20 débit Valeur 4/03

J'ai bien sûr différents comptes et aussi différentes currencies sur les deux Etats (là n'est pas la difficulté). Je gère aussi les plus/moins deux jours...

Mon problème réside dans la structure de mon algo. Pour les 3 occurences de l'exemple ci-dessus çà va rapidement.... pour 4 çà va encore sur un petit tableau...

Mais plus... alors là, je crains de monopoliser un PC toute une semaine !!! lol

Dans l'exemple démo ci-joint réduit au plus petit possible à 50 ko, je fais écrire des commentaires par VBA qui identifient les écritures qui "matchent" avec le détail nécessaire en commentaire...

Même si vous n'avez pas d'idée, la pièce ci-jointe est déjà un outil pratique pour faire des réconcilitations de un à quatres montants en calculant toutes les combinaison possible...

Mais si vous avez une idée....... ce Fil est à vous !!!

Merci d'avance et bonne nuit
@+Thierry
 

Pièces jointes

  • Thierry-Reconciliation-Occurrences.zip
    0 bytes · Affichages: 20
Z

Zon

Guest
Salut à tous,

MagicTi, c'est même pas marrant, je rentre trop tard ce soir, cela me donne pas l'envie de me creuser la tête en cette nuit d'insomnie pour améliorer l'algo car tu nous sers sur un plateau un truc ENORME, tout simplement bravo, difficile de faire aussi bien...

@Thierry c'est quoi qui te pose problème sur les tableaux à 2 dimensions, car je ne peux récupérer ta piéce jointe elle ne fait qu'1 Ko ? => Pourquoi pas faire un petit tuto sur les tableaux VBA mais je ne sais pas par où commencer ?=>contactez moi par courriel si vous avez des idées.


A+++
 
T

Ti

Guest
Petit bug, si on part d'un tableau non trié, il faut modifier la procédure ChercheOccurences comme ceci (ici les tableaux sont créés après le tri) :


Sub ChercheOccurences()
Dim TimeStart&
Dim IndexC&, IndexW&, DepC&, DepW&
Dim PlageC As Range, PlageW As Range
Dim SsPlageC As Range, SsPlageW As Range
Dim TabC, TabW

DataC.Activate
Application.ScreenUpdating = False
Reset
TimeStart = Timer

With DataW
Set PlageW = .Range("A2", .Range("H65536").End(xlUp))
End With

With DataC
Set PlageC = .Range("A2", .Range("F65536").End(xlUp))
End With
TriPlage PlageC
TriPlage PlageW

TabW = PlageW.Value
TabC = PlageC.Value

IndexC = 1: DepC = 1
IndexW = 1: DepW = 1

Do While DepC <= UBound(TabC)

IndexC = FinPlage(TabC, DepC, TabC(DepC, 1))
IndexW = FinPlage(TabW, DepW, TabC(DepC, 1))

Set SsPlageC = DataC.Range(PlageC.Rows(DepC), PlageC.Rows(IndexC))
Set SsPlageW = DataW.Range(PlageW.Rows(DepW), PlageW.Rows(IndexW))
FindOccurences SsPlageC, SsPlageW

DepC = IndexC + 1
DepW = IndexW + 1
Loop

Application.ScreenUpdating = True
MsgBox "Durée " & Format(Timer - TimeStart, "##0.00")

'**********
'NonMatchingList ne marche plus
'NonMatchingList

End Sub
 
@

@+Thierry

Guest
Bonjour à tous et toutes,

Que dire... ce forum est extraordinaire, je veux vraiment que vous le sachiez !

M E R C I !!!


Tout d'abord je suis désolé de ne pas avoir eu de réation plus tôt car hier soir je me suis retrouvé embringué pour le match !

Je te remercie, toi Bernard pour ton embryon, toi Mytå pour ton idée, toi Pascal pour ta suggestion, toi Didier pour tes excellentes corrections (qui ne sont pas ridicules du tout), toi Zon pour tes propositions... Mais alors pour Ti que dois-je dire !!! WOW TI (le mot clef pour retrouver les trucs pas possible de Ti) !!!!!!

Je ne pourrais jamais te remercier suffisamment pour tout ce que tu m'a déjà appris, mais sur ce coup là, je suis vraiment dans un rêve ! Comme dit très bien Zon c'est Magic Ti heureusement que nous t'avons sur ce Forum, car tu es vraiment unique et même inqualifiable tant tu maîtrises la programmation et le VBA !

J'ai travaillé ce matin sur ton programme avec des bases de données réélles (plus de 250 lignes d'un coté contre le double de l'autre, c'est incroyablement rapide, pratiquement instantané... Vraiment c'est Magic Ti

J'avais noté la nécessité du tri préalable, et aussi un petit plantage si un numéro de compte n'existe que dans la base "DataC" et pas dans "DataW", mais ce n'est pas grave, puisque si celà arrive c'est un problème d'intégrité des données et non de ton programme.

Enfin voilà, je suis carrément comblé, ce Forum est vraiment une mine d'or grace à tous les gens comme vous. Je vous remercie d'être là.

Bon Appétit
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 352
Messages
2 087 525
Membres
103 576
dernier inscrit
Pilliars