Bonjour à tous,
J'ai un code qui permet d'obtenir des pourcentage sur plusieurs critères à partir d'une grosse base de données.
Mon code utilise ce genre de formules :
Range("AV7") = "=(COUNTIFS(C38,2019,C39,3,C41,1))/(COUNTIFS(C38,2019,C39,3))"
Qui sont sous excel : =(NB.SI.ENS($AL:$AL;2019;$AM:$AM;3;$AO:$AO;1))/(NB.SI.ENS($AL:$AL;2019;$AM:$AM;3))
J'utilise ce genre de formule pour beaucoup de cases (au moins 150) et la base de données fait plus de 55000lignes.
Mon code dure donc 3 minutes et j'aimerais abaisser ce temps.
Pour ce faire, j'ai vu que l'utilisation de tableau pouvait être un bon compromis.
J'ai donc créé ce code :
Sub Macro1()
'
' Macro1 Macro
'
Application.ScreenUpdating = False
'Range("AV7") = "=(COUNTIFS(C38,2019,C39,3,C41,1))/(COUNTIFS(C38,2019,C39,3))"
derniere_ligne = Range("AL1").End(xlDown).Row 'Dernière ligne du tableau
Dim tabloex
ReDim tabloex(derniere_ligne - 2, 8) 'On ne peut pas donner de variables directement au tableau donc on doit le redimensionner juste après
For i = 0 To derniere_ligne - 2
tabloex(i, 0) = Range("B" & i + 2)
tabloex(i, 1) = Range("E" & i + 2)
tabloex(i, 2) = Range("N" & i + 2)
tabloex(i, 3) = Range("S" & i + 2)
tabloex(i, 4) = Range("AL" & i + 2)
tabloex(i, 5) = Range("AM" & i + 2)
tabloex(i, 6) = Range("AN" & i + 2)
tabloex(i, 7) = Range("AO" & i + 2)
tabloex(i, 8) = Range("AP" & i + 2)
Next
'MsgBox tabloex(0, 0)
Range("AV7") = "=(COUNTIFS(C38,R1C45,C39,MONTH(R6C),C41,1))/(COUNTIFS(C38,R1C45,C39,MONTH(R6C)))"
End Sub
Ma question est donc de savoir, comment transformer ma formule en AV7 avec mon tableau.
Merci beaucoup, si ce n'est pas assez clair, n'hésitez pas à me poser des questions.
Simon