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 :


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
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.
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