Bonjour,

je charge dans un DGV le contenu d'un fichier texte de 891 lignes.
Ensuite, j'effectue un traitement par groupe de 3 lignes : j'applique différentes conditions de couleurs et de mise en forme sur les cellules de la première ligne en fonction du contenu de la seconde

Le temps de chargement est trop long principalement à cause de la boucle ci-dessous qui dure 15 secondes (sur 18). Que puis-je faire pour accélérer ce traitement ? Peut-on le faire en arrière plan ? Merci


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
30
31
32
33
34
35
36
37
38
39
40
41
 
 
'cette boucle dure 15s
For i As Integer = 0 To DGV1.RowCount - 1 Step 3 'la première ligne d'une réf est identique à celle des manquants sans confirmation
 
                DGV1.Rows(i).Height = 40
                DGV1.Rows(i + 1).Visible = False  'je masque cette ligne, seulement utile à la mise en forme de la ligne "i", inutile de l'afficher dans le dgv.
                DGV1.Rows(i + 2).DefaultCellStyle.BackColor = Color.Gray
                DGV1.Rows(i + 2).Height = 30
 
'cette partie dure 12s
                For j As Integer = 15 To DGV1.Columns.Count - 1
                    If DGV1.Rows(i).Cells(j).Value < 0 And DGV1.Rows(i + 1).Cells(j).Value < 0 Then
                        DGV1.Rows(i).Cells(j).Style.BackColor = Color.OrangeRed
                        DGV1.Rows(i).Cells(j).Style.ForeColor = Color.White
                    ElseIf DGV1.Rows(i).Cells(j).Value < 0 And DGV1.Rows(i + 1).Cells(j).Value > 0 Then 'en fonction du contenu de la 2e ligne, on modifie la couleur de ces cellules de la premiere
                        DGV1.Rows(i).Cells(j).Style.BackColor = Color.OliveDrab
 
                    Else
 
                        DGV1.Rows(i).Cells(j).Style.BackColor = Color.LightGreen
                    End If
 
                    DGV1.Rows(i + 2).Cells(j).Style.BackColor = Color.White  'coloration de la 3e ligne à partir de la colonne 15
                    If (DGV1.Rows(i + 2).Cells(j).Value <> "0 / 0") Then
                        DGV1.Rows(i + 2).Cells(j).Style.ForeColor = Color.Blue
                    Else
                        DGV1.Rows(i + 2).Cells(j).Style.ForeColor = Color.Gray
                    End If
 
                Next
 
'cette partie dure 3s
                For j As Integer = 4 To 13
                    DGV1.Rows(i + 2).Cells(j).Style.BackColor = Color.Black
                    DGV1.Rows(i + 2).Cells(j).Style.ForeColor = Color.White
                    DGV1.Rows(i + 2).Cells(j).Value = "" 'on vide la cellule
                    DGV1.Rows(i + 2).Cells(j).ReadOnly = True
                Next
                DGV1.Rows(i + 2).Cells(DGV1.Columns.Count - 1).Value = ""   'je vide le contenu de la dernière cellule de la ligne.
next