Bonjour Greg, re Monique, Rénato, Gérard
Je veux bien t'expliquer en détail, mais je ne pense pas que tu analyses d'un trait un truc pareil. Non pas que je ne dévoile pas mes secrets
(sinon je n'aurais pas fait autant de démos en "full coments détails" ici) mais ce que j'ai peur c'est que ce soit un peu trop pour être assimiller d'un coup par quelqu'un qui ne connait pas les bases du VBA.
Juste pour ta compréhension de quelques trucs :
Construction de ColData Clefs Uniques (Objet New Collection)
ColData.Add TabData(i, 1) & "#" & TabData(i, 3) & "#" & TabData(i, 10) & "#" & CLng(TabData(i, 9)) & "#", _
Ceci signifie que je construis des Clefs Uniques avec la Concaténation de différents Champs de la Feuille "Data" :
Class (col 1) / Base CCY (col 3) / Class CCY (Col 10) / Value Date (Col 9)
Scan Comparitif des Données (Deux Boucles Imbriquées)
For Each Item In ColData
For i = 1 To UBound(TabData)
If Item = TabData(i, 1) & "#" & TabData(i, 3) & "#" & TabData(i, 10) & "#" & CLng(TabData(i, 9)) & "#" Then
Balance = Balance + TabData(i, 7)
Ceci signifie que je fais un comparatif pour chaque Item (Item) dans (ColData) avec chaque Concaténation Similaire de chaque ligne (i) de la Feuille "Data" qui ont été envoyées dans un Tableau Variant (TabData).
Cette Concaténation est la même qu'avant...
Class (col 1) / Base CCY (col 3) / Class CCY (Col 10) / Value Date (Col 9)
Si le résultat est Positif "If Item = Concaténation de TabData sur la Ligne i" alors je récupère la somme des montants de cette manière:
Balance = Balance + Amount (Col 7)
Construction d'une Dynamique Array (TabResult) (Tableau Indéxé Séquentiellement)
ReDim Preserve TabResult(9, X)
TabResult(0, X) = TabData(i, 1)
TabResult(1, X) = TabData(i, 10)
TabResult(2, X) = TabData(i, 3)
TabResult(3, X) = TabData(i, 6)
TabResult(4, X) = Balance
TabResult(5, X) = TabData(i, 10)
TabResult(6, X) = "vs"
TabResult(7, X) = TabData(i, 3)
TabResult(8, X) = TabData(i, 9)
End If
Ceci signifie que tant que l'on est dans la Boucle i (toutes les Lignes de "Datas") et si la condition matche, alors j'incrémente les données dans ce Tableau.
Passage à la seconde Boucle Imbriquée (Boucle For Each))
Next i
X = X + 1
Balance = 0
Next Item
Ceci signifie que l'on a finit le Scan des ligne (i) et donc j'incrémente (X) et je remets la somme à zéro (Balance) pour passer au prochain Item (Item)...
===> Question à ce stade .... (hihihihi) pour voir si tu arraives à suivre !!!!
Que représente un Item ?
A) les Données Concaténées d'une des Lignes de "Datas" (i)
B) la Ligne Suivante des Données Concaténées de Data
D) le prochain résultat du Keno
C) une des Clefs Uniques des enregistrements concaténés de "Datas"
????? Top Chrono
5
4
3
2
1
0.... Fini !!
Si tu a répondu autre chose que D, alors je te conseille de me relire attentivement !!! lol
Car maintenant on passe au Scan du second Item (Item) qui est donc la seconde Clef Unique trouvée dans l'Objet New Collection (ColData) et on va lire les lignes (i) une a une (de nouveau) avec
For i = 1 To UBound(TabData)
et construire une nouvelle ligne dans (TabResult) avec un numéro de Ligne X (incrémenté juste avant... si la condition IF est remplie....
Et ainsi de suite jusqu'à ce qu'il n'y ait plus d'Item... OK ?
Report de donnée en Feuille "VBA-Results" (Boucle For / Next)
With Worksheets("VBA-Results")
For L = LBound(TabResult, 2) To UBound(TabResult, 2)
Ceci signifie que je "lis" ma Dynamic Array en mesurant sa taille avec une Boucle qui va connaitre le plus petit numéro de Ligne (LBound) au plus grand (Ubound)...
Ensuite avec ceci :
.Range("A" & L + 3) = TabResult(0, L)
Je dis simplement que la Cellule "A" & L (L est le numéro de la ligne scannée par ma boucle) + 3 car il y a un décalage entre un Tableau qui démarre à Zéro et la Feuille qui démarre à la Cellule A3.... donc je dis que cette Cellule(Ligne / Colonne) = mon Tableau(Colonne / Ligne) (attention il est inversé)
Et ainsi de suite...
Voilà pour une première approche... c'est assez hardu à comprendre mais j'ai essayé d'être le plus simpliste possible dans mes explication car tu sembles sympathique.
Je vais maintenant regarder ton nouveau fichier mais de là à te dire qu'avec ces expliaction tu seras capable de recréer une procédure identique, tu risque de passer pas mal de nuits blanches, mais si il y a une qualité qui prime en VBA c'est la Patience et la Persévérance...
Bon Courage et Welcome in the VBA's World
@+Thierry
Ah Oui aussi j'oubliais ...