Bonjour,
afin d'automatiser un reporting, j'extrait des tables de notre système de gestion et les importe sur excel. Je dispose donc d'un onglet "CONTRAT" qui contient environ 15000 lignes (ensemble des contrats depuis 2008).
Pour chaque contrat, on a une colonne "nom (ID)", une colonne "date de début" et une colonne "date de fin".
Pour chaque nom (ID) je souhaiterais connaitre les mois pour lesquels il était présent. Pour cela, un usf me permet de saisir une année et lance la boucle suivante :
Seulement voilà, le temps d'execution de cette boucle est extremement long. Elle me donne le résultat voulu sur des données moins conséquente mais avec le temps le volume des données aura plutot tendance a grossir qu'a réduire.
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 annee = cbox_1.Value taille_essai = Application.WorksheetFunction.CountA(Sheets("TABLEAUX").Range("$A:$A")) taille_contrat = Application.WorksheetFunction.CountA(Sheets("CONTRAT").Range("$A:$A")) For i = 2 To taille_essai ste = Sheets("TABLEAUX").Range("A" & i).Value & Sheets("TABLEAUX").Range("B" & i).Value For j = 2 To taille_contrat societe = Sheets("CONTRAT").Range("T" & j).Value & Sheets("CONTRAT").Range("W" & j).Value annee_debut = Year(Cells(j, 21)) ' test annee date de debut du contrat mois_debut = Month(Cells(j, 21)) ' test mois date de debut du contrat annee_fin = Year(Cells(j, 22)) ' test annee date de fin du contrat mois_fin = Month(Cells(j, 22)) ' test mois date de fin du contrat duree = mois_fin - mois_debut ' on compte combien de mois dure la mission If societe = ste And annee_debut = annee Then Sheets("TABLEAUX").Activate For m = 0 To duree Sheets("TABLEAUX").Cells(i, mois_debut + 2 + m).Value = 1 Next m Sheets("CONTRAT").Activate End If Next j Next i
Je souhaiterais donc avoir des conseils pour optimiser cette boucle voir une autre technique pour arriver a mes fins!
Merci a tout ceux qui s pencheront sur mon problème![]()
Partager