Bonjour,
Merci les gars, merci de vous attarder sur mon cas.
Boisgontier, j'ai testé ton code. Il fonctionne très bien sur le fichier sample que tu m'as retourné mais sur mon fichier le code se lance mais il ne m'écrit rien en retour dans les cellules des années, pas de volumes, les cellules N17:AL17 restent vides.. Sur le fichier sample, ce sont bien les bons volumes. Je me demande qu'est ce qui ne va pas. J'ai ajouté quelques commentaires à ton code, pour essayer de comprendre. Les champs sont identiques, les noms des feuilles aussi. Le temps retourné est 0,015625 (du coup je ne sais pas s'il a analysé toute ma base de données).
Le tableau que tu as ajouté en AP1:AT1 est-il utile dans le code ?
Il faut lancer le code avec la feuille analysis sinon ça me supprime des cellules en N17 de la base de donnée.
Sub Essai1()
tt = Timer
Set f = Sheets("database") 'nom du fichier où se trouvent les données
TBl = f.Range("A2:AN" & f.[A65000].End(xlUp).Row).Value 'première ligne où se trouvent les nombres jusqu'à dernière colonne de la feuille database
tblAn = [P1:AN1].Value 'colonnes et première ligne où se trouvent les années dans la feuille database
Set d = CreateObject("scripting.dictionary")
ReDim TblS(1 To 1, 1 To UBound(tblAn, 2)) '??? je ne sais pas
crit = [E17:M17].Value 'Retour dans la feuille analysis, zone des critères sélectionnés
For i = 1 To UBound(TBl)
If TBl(i, 1) = crit(1, 1) And TBl(i, 3) = crit(1, 2) And TBl(i, 7) = crit(1, 6) And TBl(i, 11) = crit(1, 7) Then
For k = 1 To UBound(TblS, 2)
TblS(1, k) = TblS(1, k) + TBl(i, 15 + k)
Next k
End If
Next i
[N17].Resize(, UBound(tblAn, 2)) = TblS 'Feuille analysis, N17 est la cellule où commence le retour de calcul
MsgBox Timer - tt
End Sub
@bof. C'est vrai que j'utilise BDSomme dans un autre fichier, en très grande quantité et ça fonctionne bien. Mais la base de donnée est beaucoup plus courte. Ici elle fait 208000 lignes.
Merci les gars.