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
4ID Date Valeur1 Valeur2 a a a a b b b b ...
Ci dessous le code entier ...
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
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 pasje 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
Partager