Bonjour,
Je voulais vous exposer mon soucis ... je débute quelque peut en VBA et je pense qu'il y a moyen d'optimiser le tout ...

J'ai deux fichiers Excels. L'un comportant le tableau de données et l'autre appelant (via un formulaire) le traitement souhaité.

Tableau de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
ID      Date    Valeur1   Valeur2
a       a         a           a
b       b         b           b
...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
i = Sheets("DONNEES").Range("A65536").End(xlUp).Row
For m = 1 to 12
    For a = 2 to i
        If Month(Sheets("DONNEES").Range("B" & a)) = m And Month(Sheets("DONNEES").Range("C" & a)) = "valeur a tester" Then
        ' action à réaliser
        End If
    Next a
Next m
Ci dessous le code entier ...

1) je récupère le nombre de lignes (non vides) dans le tableau de données
i = Sheets("DONNEES").Range("A65536").End(xlUp).Row

2) Avec ces boucles For To ... Next, je dois remplir un tableau de statistiques avec une colonne par mois ... (d'où le For m = 1 To 12)

3) Dans cette boucle, je parcours toutes les lignes de mon tableau Excel pour chercher dans la colonne Date, la date correspondant au mois "a" ainsi que si la valeur de la colonne 3 correspond à un critère donné.

Sachant que mon tableau comporte donc 12 colonnes ... et autant de ligne qu'il y a de critères (soit environ 6) ... qu'en moyenne il y a 30 opérations par jour ... ca me génère a la fin de l'année un tableau de données de près de 10 000 lignes ... autant vous dire que parcourir 12 x 6 x 10 000 fois le tableau excel ... le sablier il tourne ... il tourne ...

Existe il une solution me permettant dans un tableau excel de plus de 10 000 lignes, de récupérer des valeurs par mois et par critères sans faire tourner le ventilo a plein régime :p

D'autre part, je souhaitais mettre un système de progressbar ... mais j'arrive pas je pensais qu'en appelant un Form ... qui contenait le code de mon extraction je pouvais afficher une progressbar "maison" (changer la width d'un textbox en sortie de boucle) ... mais le Form se fige et les données se chargent ...

Faut-il que je lance mon extraction directement dans le fichier ou se trouve les données ?

Merci pour votre aide !!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
i = Sheets("DONNEES").Range("A65536").End(xlUp).Row
ProgressBarValue = 0
Defil.ProgressBar.Width = 0
Dim a01 As Integer, a02 As Integer, a03 As Integer
    For m = 1 To 12
        a01 = 0
        a02 = 0
        a03 = 0
        For a = 2 To i
            ' ON NE RECUPERE QUE LES a01
            If Month(Sheets("DONNEES").Range("B" & a)) = m And Sheets("DONNEES").Range("C" & a) = "a01" And Then
                a01 = a01 + 1
            Sheets("STATS").Cells(2, m + 1).Value = a01          

            ' ON NE RECUPERE QUE LES a02
            If Month(Sheets("DONNEES").Range("B" & a)) = m And Sheets("DONNEES").Range("B" & a) = "a02" Then
                a02 = a02 + 1
            End If
            Sheets("STATS").Cells(7, m + 1).Value = a02
            
            ' ON NE RECUPERE QUE LES a03
            If Month(Sheets("DONNEES").Range("B" & a)) = m And Sheets("DONNEES").Range("B" & a) = "a03" Then
                a03 = a03 + 1
            End If
            Sheets("STATS").Cells(12, m + 1).Value = a03
        Next a
        Defil.ProgressBar.Width = ProgressBarValue + 12
        ' A la fin la taille totale est de 240
    Next m