Optimiser mon code avec des tableaux

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

Bonjour,

Joins un fichier à ta demande.

Cdlt.

Bonjour,

J'ai juste une question, pourquoi ne pas faire la requête sur l'énorme base de données en SQL ?

Bonjour Jean-Eric,

Oui bien sûr au temps pour moi.

J'ai dû le modifier pour vous l'envoyer donc les colonnes ont changé.

Simon

7test.xlsx (75.21 Ko)

Pour être plus clair, je calcule le nombre de date "Is On Time" divisé par le nombre de date totale (Late et On Time) pour les 6 derniers mois et pour les commandes directes et indirectes et l'ensemble des commandes (je créé à coté des données un tableau à 3 lignes et 6 colonnes donc)

Je vous rejoins le fichier avec mon début de tableau pour que vous compreniez mieux.

Oxydum, car ma boss veut du excel et non pas du PowerBI ou autres... Je sais c'est compliqué.

6test.xlsx (67.77 Ko)

Bonjour,

Un début de réponse à étudier.

Cdlt.

4test.xlsx (40.66 Ko)

Re Jean-Eric,

Merci pour cette proposition mais je ne peux pas utiliser de TCD...

Ma chef est catégorique et veut un tableau fait main.

C'est pour cela que j'ai créé une macro et c'est pour cela que je souhaite l'optimiser

Pourrais-tu m'aider sur la transformation de ma formule avec la variable tableau s'il-te-plait ?

En te remerciant,

Simon

Rechercher des sujets similaires à "optimiser mon code tableaux"