Bonjour,
je viens vers vous, car j'ai un problème de temps de traitement pour un fichier volumineux.

je vous explique le contexte.
je reçois tous les jours un fichier TXT contenant des produits. Ce fichier contient 87037 lignes.
je dois importer le ficher dans une base EBP via le SDK.
le traitement du fichier se déroule en 2 étapes :

Etape 1 :

En parcourant le fichier je regarde si le produits ne correspond pas à une famille/sous famille que je ne dois pas traiter.
Si ce traitement est validé je regarde si le produit existe au pas dans la base.
S'il existe je le stock dans un ConcurrentStack
s'il n'existe pas je le stock dans une autre ConcurrentStack.
Cette étape ce déroule en 6 min environ. Ce qui me semble correct.
Voici le code de cette étape.
Code VB : 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
 
 Public Structure Article
        Public indicateur_action As String
        Public code_fabricant As String
        Public code_SKU As String  
        Public libelle As String
        Public prix_achat As Decimal
        Public categorie As String
        Public sous_categorie As String
        Public poids As String
        Public code_barre As String
        Public nom_marque As String
        Public prix_public As Decimal
        Public article_remplacement As String
    End Structure
 
    Public les_articles_a_creer As New ConcurrentStack(Of Article)
    Public les_articles_a_modifier As New ConcurrentStack(Of Article)
 
Public Sub Get_article()
        Dim dossiertravail As String = System.Configuration.ConfigurationSettings.AppSettings("dossier_travail")
 
 
        les_articles_a_creer.Clear()
        les_articles_a_modifier.Clear()
        'les_code_articles.Clear()
 
        If File.Exists(dossiertravail & fichier_article) = False Then
            Set_Msg_log("Erreur : Fichier Article introuvable")
            Exit Sub
        End If
 
        Dim lecteurfichier As StreamReader
        Dim ligne As String
        lecteurfichier = New StreamReader(dossiertravail & fichier_article)
 
 
        Dim sql_article As String
        sql_article = " Select i.id , i.caption, i.desComclear, TF.reference, xx_Libelles_modifies  " &
                      " from item i " &
                      " left outer join thirdreference Tf on TF.itemID  = I.id And TF.thirdID = '" & id_fournisseur & "' where itemtype =0"
 
        Dim reslut_sql As DataView
        Try
            reslut_sql = SelectBDD_EBP(sql_article)
 
        Catch ex As Exception
            Set_Msg_log("Traitement fichier Article : Erreur SQL " & ex.Message)
            Exit Sub
        End Try
 
        Try
            ligne = lecteurfichier.ReadLine
            Dim ligne1, ligne2, ligne3, ligne4 As String
            Dim nb As Integer = File.ReadAllLines(dossiertravail & fichier_article).Length
            Dim i As Integer = 0
            Form_principal.ProgressBar1.Value = 0
            Form_principal.ProgressBar1.Minimum = 0
            Form_principal.ProgressBar1.Maximum = nb
            While ligne <> Nothing
 
 
                ligne1 = ligne
                ligne2 = lecteurfichier.ReadLine
                ligne3 = lecteurfichier.ReadLine
                ligne4 = lecteurfichier.ReadLine
 
 
                i = i + 4
                Form_principal.ProgressBar1.Increment(4)
 
                Form_principal.Label11.Text = "ligne " & i & " sur " & nb
                Form_principal.Label11.Refresh()
                Console.WriteLine("ligne " & i & " sur " & nb)
 
 
                If ligne2 = Nothing Then
                    Traitement_ligne(ligne1, reslut_sql)
                ElseIf ligne3 = Nothing Then
                    Parallel.Invoke(Sub() Traitement_ligne(ligne1, reslut_sql), Sub() Traitement_ligne(ligne2, reslut_sql))
                ElseIf ligne4 = Nothing Then
                    Parallel.Invoke(Sub() Traitement_ligne(ligne1, reslut_sql), Sub() Traitement_ligne(ligne2, reslut_sql), Sub() Traitement_ligne(ligne3, reslut_sql))
 
                Else
                    Parallel.Invoke(Sub() Traitement_ligne(ligne1, reslut_sql),
                                        Sub() Traitement_ligne(ligne2, reslut_sql),
                                        Sub() Traitement_ligne(ligne3, reslut_sql),
                                        Sub() Traitement_ligne(ligne4, reslut_sql))
                End If
 
 
 
 
                ligne = lecteurfichier.ReadLine
            End While
            lecteurfichier.Close()
            lecteurfichier.Dispose()
 
            Set_Msg_log("Lecture fichier article ok")
        Catch ex As Exception
            Set_Msg_log("Erreur lecture Fichier Article : " & ex.Message)
        End Try
 
 
    End Sub

Code VB : 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
 
 Public Sub Traitement_ligne(ByVal ligne As String, ByVal reslut_sql As DataView)
        Dim un_article As New Article
        ' Dim un_code_article As New Article_code
        Dim ligne_interdit As String = LireINI("Categorie", "Interdit")
        Dim valeur() As String
        Dim result_sql_categorie As DataView
 
        valeur = Split(ligne, seprateur)
 
        If ligne_interdit.Contains(valeur(14).Replace("""", "").Substring(0, 2) & "--") = False Or
        ligne_interdit.Contains(valeur(14).Replace("""", "")) = False Then
 
 
            un_article.indicateur_action = valeur(0).TrimEnd(" ").Replace("""", "")
            un_article.code_fabricant = Validation_code(valeur(7).TrimEnd(" ").Replace("""", ""))
            un_article.code_SKU = Validation_code(valeur(3).Replace("""", ""))
            un_article.libelle = Mise_en_forme_libelle(valeur(4).Replace("""", "").TrimEnd(" ") & " " & valeur(5).Replace("""", "").TrimEnd(" "))
            un_article.prix_achat = CDec(valeur(8).Replace(".", ","))
            un_article.code_barre = valeur(13).Replace("""", "").TrimEnd(" ")
            un_article.poids = valeur(16).Replace("""", "").TrimEnd(" ").Replace(".", ",")
            un_article.nom_marque = Recup_marque(valeur(2).TrimEnd(" ").Replace("""", ""))
            un_article.prix_public = CDec(valeur(9).Replace(".", ","))
            un_article.article_remplacement = Validation_code(valeur(11).TrimEnd(" ").Replace("""", ""))
 
            If valeur(14).Replace("""", "").Length = 4 Then
                un_article.categorie = valeur(14).Replace("""", "").Substring(0, 2)
                un_article.sous_categorie = valeur(14).Replace("""", "").Substring(2, 2)
            Else
                un_article.categorie = valeur(14).Replace("""", "").Substring(0, 2)
                un_article.sous_categorie = ""
 
            End If
            Dim sql_categorie As String
            sql_categorie = "select F.id as famille , SF.id as sfamille " &
                                " from  itemfamily F " &
                                " Left outer join itemsubfamily SF on SF.itemFamilyid  =F.id " &
                                " where F.xx_code_categorie = " & un_article.categorie &
                                " And SF.xx_code_categorie =  " & un_article.sous_categorie
 
            result_sql_categorie = SelectBDD_EBP(sql_categorie)
 
            If result_sql_categorie.Count > 0 Then
                For Each row As DataRowView In result_sql_categorie
                    un_article.categorie = row("famille")
                    un_article.sous_categorie = row("sfamille")
                Next
 
                SyncLock reslut_sql
                    If reslut_sql.Count > 0 Then
                        reslut_sql.RowFilter = "id = '" & CStr(un_article.code_fabricant) & "'"
                        If reslut_sql.Count <> 0 Then
 
                            les_articles_a_modifier.Push(un_article)
                        Else
                            les_articles_a_creer.Push(un_article)
                        End If
 
                        'code qui sert a lister les code_reference en double
                        If les_codes_reference <> "" Then
                            If les_codes_reference.Contains(";" & Validation_code(un_article.code_fabricant) & ";") = True Then
 
                                If les_code_reference_interdit <> "" Then
                                    les_code_reference_interdit = les_code_reference_interdit & ";" & Validation_code(un_article.code_fabricant) & ";"
                                Else
                                    les_code_reference_interdit = ";" & Validation_code(un_article.code_fabricant) & ";"
                                End If
                            Else
                                les_codes_reference = les_codes_reference & ";" & Validation_code(un_article.code_fabricant) & ";"
                            End If
 
                        Else
                            les_codes_reference = ";" & Validation_code(un_article.code_fabricant) & ";"
                        End If
 
                    ElseIf reslut_sql.Count = 0 Then
                        les_articles_a_creer.Push(un_article)
 
                        'code qui sert a lister les code_reference en double
                        If les_codes_reference <> "" Then
                            If les_codes_reference.Contains(";" & Validation_code(un_article.code_fabricant) & ";") = True Then
 
                                If les_code_reference_interdit <> "" Then
                                    les_code_reference_interdit = les_code_reference_interdit & ";" & Validation_code(un_article.code_fabricant) & ";"
                                Else
                                    les_code_reference_interdit = ";" & Validation_code(un_article.code_fabricant) & ";"
                                End If
                            Else
                                les_codes_reference = les_codes_reference & ";" & Validation_code(un_article.code_fabricant) & ";"
                            End If
 
                        Else
                            les_codes_reference = ";" & Validation_code(un_article.code_fabricant) & ";"
                        End If
 
                    End If
 
                End SyncLock
 
                '  un_code_article.code_fabricant = Validation_code(un_article.code_fabricant)
                ' un_code_article.code_reference = Validation_code(un_article.code_sku)
 
                '   les_code_articles.Push(un_code_article)
 
 
 
                un_article = Nothing
                'un_code_article = Nothing
            End If
        End If
    End Sub
Etape 2 :

Lors de cette étape je parcours les deux ConcurrentStack.
Lors du parcours, je fais plusieurs traitements.
1er traitement : je regarde si le code_reference n'existe pas deux fois dans liste (j'utilise une variable de type string qui contient tous les codes en double que je crée dans l'étape 1). si le code est en double je ne créer/modifie pas les produits avec ce code

2nd : traitement : je regarde si le produit possède une marque ou pas. S'il n'a pas de marque je créer/modifie le produit, mais je le signale dans un fichier de log.

c'est 2 traitements sont faits peut importe la ConcurrentStack.
Pour ce qui est de la ConcurrentStack des produits à créer, je l'ajoute dans un string pour que je puisse créer un fichier en vue de l'importer dans le base.
pour ce qui est de la ConcurrentStack des produits en modifier je regarde en bases de données si le produit en question a un boolean qui me dit si je dois modifier ou non son libellé et sa description.
Si le boolean est vrai alors j'ajoute le fichier dans un string pour que je puisse créer un fichier en vue de l'importer dans le base, sinon j'ajoute le produit dans une autre string toujours dans le but de l'importer.

Code VB : 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
 
   Public Sub Traitement_article()
 
 
        Dim nom_fichier As String
 
        Form_principal.Label11.Text = ""
        Form_principal.ProgressBar1.Value = 0
        Form_principal.ProgressBar1.Minimum = 0
        Form_principal.ProgressBar1.Maximum = les_articles_a_creer.Count + les_articles_a_modifier.Count
 
 
 
        If les_articles_a_creer.Count > 0 Then
            Traitement_article_nouveau()
        End If
 
 
        If les_articles_a_modifier.Count > 0 Then
            Traitement_article_update()
        End If
 
        Set_Msg_log("_______________________________________________ Debut import nouveau article _______________________________________________")
 
 
        Try
 
            If ligne_article_new <> "" Then
                nom_fichier = dossiertravail & Date.Now.ToString("yyyyMMddHHmm") & "_import_article_new.txt"
 
                Dim ecriture As New StreamWriter(nom_fichier)
                ecriture.WriteLine("Code article;Libelle;Code Famille Articles;Code sous-famille article;Prix d'achat;Description commerciale en clair;Type d'article;Poids;Etat Article*;Code barre;Statut;Oxatis - Marque;PV HT public conseille;Article de remplacement")
                ecriture.WriteLine(ligne_article_new)
                ecriture.Close()
                ecriture.Dispose()
                Set_Msg_log("Listage article à créer OK")
            Else
                Set_Msg_log("Aucun nouvel article a créer")
            End If
 
            If File.Exists(nom_fichier) Then
                '  Creer_import_article(nom_fichier, 2)
            End If
        Catch ex As Exception
            Set_Msg_log("Erreur import article nouveau " & ex.ToString)
        End Try
 
        Set_Msg_log("_______________________________________________ Fin import nouveau article _______________________________________________")
        Set_Msg_log("") ' rajout ligne pour lecture plus facile du fichier de log general
        Set_Msg_log("") ' rajout ligne pour lecture plus facile du fichier de log general
        Set_Msg_log("_______________________________________________ Debut import  article a modifier _______________________________________________")
        Set_Msg_log("") ' rajout ligne pour lecture plus facile du fichier de log general
 
        Try
            If ligne_article_modifier_hors_libelle <> "" Then
                Set_Msg_log(" _______________________________________________ Article modifier sans le libelle _______________________________________________")
 
                nom_fichier = dossiertravail & Date.Now.ToString("yyyyMMddHHmm") & "_import_article_modifier_hors_libelle.txt"
                Dim ecriture As New StreamWriter(nom_fichier)
                ecriture.WriteLine("Code article;Code Famille Articles;Code sous-famille article;Prix d'achat;Type d'article;Poids;Etat Article*;Code barre;Statut;Oxatis - Marque;PV HT public conseille;Article de remplacement")
                ecriture.WriteLine(ligne_article_modifier_hors_libelle)
                ecriture.Close()
                ecriture.Dispose()
                ' Creer_import_article(nom_fichier, 0)
            Else
                Set_Msg_log("Aucun article modifier sans le libelle")
 
            End If
        Catch ex As Exception
            Set_Msg_log("Traitement article modification sans libelle : erreur lors de l'import " & ex.Message)
        End Try
 
 
        Try
            If ligne_article_modifier_libelle <> "" Then
                Set_Msg_log(" _______________________________________________ Article modifier avec le libelle _______________________________________________")
 
                nom_fichier = dossiertravail & Date.Now.ToString("yyyyMMddHHmm") & "_import_article_modifier_libelle.txt"
                Dim ecriture As New StreamWriter(nom_fichier)
                ecriture.WriteLine("Code article;Libelle;Code Famille Articles;Code sous-famille article;Prix d'achat;Description commerciale en clair;Type d'article;Poids;Etat Article*;Code barre;Statut;Oxatis - Marque;PV HT public conseille;Article de remplacement")
                ecriture.WriteLine(ligne_article_modifier_libelle)
                ecriture.Close()
                ecriture.Dispose()
                '    Creer_import_article(nom_fichier, 1)
            Else
                Set_Msg_log("Aucun article modifier avec le libelle")
 
            End If
        Catch ex As Exception
            Set_Msg_log("Traitement article modification avec libelle : erreur lors de l'import " & ex.Message)
        End Try
 
        Set_Msg_log("_______________________________________________ Fin import article a modifier _______________________________________________")
 
        Set_Msg_log("_______________________________________________ debut import article fournisseur _______________________________________________")
 
        Try
            If ligne_article_fournisseur <> "" Then
                nom_fichier = dossiertravail & Date.Now.ToString("yyyyMMddHHmm") & "_import_article_fournisseur.txt"
                Dim ecriture As New StreamWriter(nom_fichier)
                ecriture.WriteLine("Code article;Code fournisseur;Reference;Prix d'achat public H.T.;Prix d'achat net H.T.;Lier le prix d'achat au prix de vente conseille")
                ecriture.Write(ligne_article_fournisseur)
                ecriture.Close()
                ecriture.Dispose()
                '  Creer_import_article(nom_fichier, 3)
            Else
                Set_Msg_log("Aucune information fournisseur pour les articles")
            End If
        Catch ex As Exception
            Set_Msg_log("Traitement article fournisseur : erreur lors de l'import " & ex.Message)
        End Try
 
 
        Set_Msg_log("_______________________________________________ Fin import article fournisseur _______________________________________________")
 
 
        Try
            For Each fichier As String In Directory.GetFiles(dossiertravail)
                If fichier.Contains("import_article") = True Then
                    File.Move(fichier, dossier_archive & Path.GetFileName(fichier))
                End If
            Next
        Catch ex As Exception
            Set_Msg_log("erreur Traitement article lors de l'archivage du fichier : " & ex.Message)
        End Try
 
        les_articles_a_creer.Clear()
        les_articles_a_modifier.Clear()
 
 
    End Sub
Code VB : 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 
  Public Sub Traitement_article_nouveau()
        Dim sql_categorie As String
        Dim reslut_sql As DataView
 
        Dim nom_fichier As String = dossiertravail & Date.Now.ToString("yyyyMMddHHmm") & "_import_article_new.txt"
 
 
 
        Set_Msg_log("_______________________________________________ Debut traitement nouveau article _______________________________________________")
 
        For i = 0 To les_articles_a_creer.Count
            'For Each item As Article In les_articles_a_creer
            Form_principal.ProgressBar1.Increment(1)
            Console.WriteLine(i & " sur " & les_articles_a_creer.Count & " a " & Date.Now.ToString)
 
            Try
                If les_articles_a_creer(i).code_fabricant = Nothing Then
                    'Set_Msg_log("Erreur : Le code référence est null indice : " & i)
                    Continue For
                End If
                If LireINI("Article", "traitement_code_reference") = 1 Then
                    If Verification_code_reference(les_articles_a_creer(i).code_fabricant, les_articles_a_creer(i).code_sku) = False Then
                        Set_Msg_log("Erreur : Le code référence " & les_articles_a_creer(i).code_fabricant & " existe pour plusieurs produits dans le fichier")
                        Continue For
                    End If
 
                End If
 
                If les_articles_a_creer(i).nom_marque = "" Then
                    Set_Msg_log("Erreur : pas de marque existant pour l'article : " & les_articles_a_creer(i).code_fabricant.TrimEnd(" "))
                End If
 
 
 
                If ligne_article_new = "" Then
                    ligne_article_new = """" & les_articles_a_creer(i).code_fabricant.TrimEnd(" ") & """;""" &
                        les_articles_a_creer(i).libelle & """;""" &
                        les_articles_a_creer(i).categorie & """;""" & les_articles_a_creer(i).sous_categorie & """;""" &
                        les_articles_a_creer(i).prix_achat & """;""" &
                        les_articles_a_creer(i).libelle & """;""B"";""" &
                        les_articles_a_creer(i).poids & """;""" &
                        les_articles_a_creer(i).indicateur_action & """;""" &
                         Verification_code_barre(les_articles_a_creer(i).code_fabricant.TrimEnd(" "), les_articles_a_creer(i).code_barre) & """" & ";""" & status_nouveau & """;""" &
                        les_articles_a_creer(i).nom_marque & """;""" & les_articles_a_creer(i).prix_public & """;""" & les_articles_a_creer(i).article_remplacement & """"
 
 
                Else
                    ligne_article_new = ligne_article_new & vbCrLf & """" & les_articles_a_creer(i).code_fabricant.TrimEnd(" ") & """;""" &
                        les_articles_a_creer(i).libelle & """;""" &
                        les_articles_a_creer(i).categorie & """;""" & les_articles_a_creer(i).sous_categorie & """;""" &
                        les_articles_a_creer(i).prix_achat & """;""" &
                        les_articles_a_creer(i).libelle & """;""B"";""" &
                        les_articles_a_creer(i).poids & """;""" &
                        les_articles_a_creer(i).indicateur_action & """;""" &
                        Verification_code_barre(les_articles_a_creer(i).code_fabricant.TrimEnd(" "), les_articles_a_creer(i).code_barre) & """" & ";""" & status_nouveau & """;""" &
                        les_articles_a_creer(i).nom_marque & """;""" & les_articles_a_creer(i).prix_public & """;""" & les_articles_a_creer(i).article_remplacement & """"
 
                End If
 
                If ligne_article_fournisseur = "" Then
                    ligne_article_fournisseur = """" & les_articles_a_creer(i).code_fabricant.TrimEnd(" ") & """;""" & id_fournisseur & """;""" & les_articles_a_creer(i).code_sku & """;""" &
                            les_articles_a_creer(i).prix_achat & """;""" & les_articles_a_creer(i).prix_achat & """" & ";""" & lier_PA_PV & """"
                Else
                    ligne_article_fournisseur = ligne_article_fournisseur & vbCrLf & """" & les_articles_a_creer(i).code_fabricant.TrimEnd(" ") & """;""" & id_fournisseur & """;""" & les_articles_a_creer(i).code_sku & """;""" &
                            les_articles_a_creer(i).prix_achat & """;""" & les_articles_a_creer(i).prix_achat & """" & ";""" & lier_PA_PV & """"
                End If
 
            Catch ex As Exception
                Set_Msg_log("Erreur Traitement nouveau article : code article : " & les_articles_a_creer(i).code_fabricant.TrimEnd(" ") & " : " & ex.Message)
            End Try
        Next
 
 
 
        Set_Msg_log("_______________________________________________ Fin traitement nouveau article _______________________________________________")
 
 
    End Sub
Code VB : 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
 
Public Sub Traitement_article_update()
        Dim sql_categorie As String
        Dim reslut_sql As DataView
        Dim sql_libelle As String = ""
 
        Dim statut_article_EBP As String
 
        For i = 0 To les_articles_a_modifier.Count
            ' For Each item As Article In les_articles_a_modifier
            Form_principal.ProgressBar1.Increment(1)
            Try
                If LireINI("Article", "traitement_code_reference") = 1 Then
                    If Verification_code_reference(les_articles_a_modifier(i).code_fabricant, les_articles_a_modifier(i).code_sku) = False Then
                        Set_Msg_log("Erreur : Le code référence " & les_articles_a_modifier(i).code_fabricant & " existe pour plusieurs produits dans le fichier")
                        Continue For
                    End If
                End If
 
 
                If les_articles_a_modifier(i).nom_marque = "" Then
                    Set_Msg_log("Erreur : pas de marque existant pour l'article : " & les_articles_a_modifier(i).code_fabricant.TrimEnd(" "))
                End If
 
                sql_libelle = "select I.xx_Libelles_modifies " &
                              "  from item I " &
                              " where id = '" & les_articles_a_modifier(i).code_fabricant & "'"
 
                reslut_sql = SelectBDD_EBP(sql_libelle)
 
                For Each rst As DataRowView In reslut_sql
                    If les_articles_a_modifier(i).indicateur_action = LireINI("Article", "code_suppression") Then
                        statut_article_EBP = ";""" & status_suppresion & """"
                    ElseIf les_articles_a_modifier(i).indicateur_action = LireINI("Article", "code_modification") Then
                        statut_article_EBP = ";""" & status_modification & """"
 
                    ElseIf les_articles_a_modifier(i).indicateur_action = LireINI("Article", "code_nouveau") Then
                        statut_article_EBP = ";""" & status_nouveau & """"
                    End If
 
 
                    If rst("xx_Libelles_modifies") = 0 Then
                        If ligne_article_modifier_libelle = "" Then
                            ligne_article_modifier_libelle = """" & les_articles_a_modifier(i).code_fabricant.TrimEnd(" ") & """;""" &
                                                            les_articles_a_modifier(i).libelle & """;""" &
                                                            les_articles_a_modifier(i).categorie & """;""" & les_articles_a_modifier(i).sous_categorie & """;""" &
                                                            les_articles_a_modifier(i).prix_achat & """;""" &
                                                            les_articles_a_modifier(i).libelle & """;""B"";""" &
                                                            les_articles_a_modifier(i).poids & """;""" &
                                                            les_articles_a_modifier(i).indicateur_action & """;""" &
                                                             Verification_code_barre(les_articles_a_modifier(i).code_fabricant.TrimEnd(" "), les_articles_a_modifier(i).code_barre) & """" &
                                                             statut_article_EBP & ";" & """" & les_articles_a_modifier(i).nom_marque & """;""" & les_articles_a_modifier(i).prix_public & """;""" & les_articles_a_modifier(i).article_remplacement & """"
 
 
                        Else
                            ligne_article_modifier_libelle = ligne_article_modifier_libelle & vbCrLf & """" & les_articles_a_modifier(i).code_fabricant.TrimEnd(" ") & """;""" &
                                                            les_articles_a_modifier(i).libelle & """;""" &
                                                             les_articles_a_modifier(i).categorie & """;""" & les_articles_a_modifier(i).sous_categorie & """;""" &
                                                            les_articles_a_modifier(i).prix_achat & """;""" &
                                                            les_articles_a_modifier(i).libelle & """;""B"";""" &
                                                            les_articles_a_modifier(i).poids & """;""" &
                                                            les_articles_a_modifier(i).indicateur_action & """;""" &
                                                             Verification_code_barre(les_articles_a_modifier(i).code_fabricant.TrimEnd(" "), les_articles_a_modifier(i).code_barre) &
                                                             """" & statut_article_EBP & ";" & """" & les_articles_a_modifier(i).nom_marque & """;""" & les_articles_a_modifier(i).prix_public & """;""" & les_articles_a_modifier(i).article_remplacement & """"
                        End If
                    Else
                        If ligne_article_modifier_hors_libelle = "" Then
                            ligne_article_modifier_hors_libelle = """" & les_articles_a_modifier(i).code_fabricant.TrimEnd(" ") & """;""" &
                                                                les_articles_a_modifier(i).categorie & """;""" & les_articles_a_modifier(i).sous_categorie & """;""" &
                                                                les_articles_a_modifier(i).prix_achat & """;" &
                                                                """B" & """;""" & les_articles_a_modifier(i).poids & """;""" &
                                                                les_articles_a_modifier(i).indicateur_action & """;""" &
                                                                Verification_code_barre(les_articles_a_modifier(i).code_fabricant.TrimEnd(" "), les_articles_a_modifier(i).code_barre) &
                                                                """" & statut_article_EBP & ";" & """" & les_articles_a_modifier(i).nom_marque & """;""" & les_articles_a_modifier(i).prix_public & """;""" & les_articles_a_modifier(i).article_remplacement & """"
 
                        Else
                            ligne_article_modifier_hors_libelle = ligne_article_modifier_hors_libelle & vbCrLf & """" & les_articles_a_modifier(i).code_fabricant.TrimEnd(" ") & """;""" &
                                                                 les_articles_a_modifier(i).categorie & """;""" & les_articles_a_modifier(i).sous_categorie & """;""" &
                                                                 les_articles_a_modifier(i).prix_achat & """;" &
                                                                """B" & """;""" & les_articles_a_modifier(i).poids & """;""" &
                                                                les_articles_a_modifier(i).indicateur_action & """;""" &
                                                                 Verification_code_barre(les_articles_a_modifier(i).code_fabricant.TrimEnd(" "), les_articles_a_modifier(i).code_barre) &
                                                                 """" & statut_article_EBP & ";" & """" & les_articles_a_modifier(i).nom_marque & """;""" & les_articles_a_modifier(i).prix_public & """;""" & les_articles_a_modifier(i).article_remplacement & """"
 
                        End If
 
 
 
                    End If
                    If ligne_article_fournisseur = "" Then
                        ligne_article_fournisseur = """" & les_articles_a_modifier(i).code_fabricant.TrimEnd(" ") & """;""" & id_fournisseur & """;""" & les_articles_a_modifier(i).code_sku & """;""" &
                                les_articles_a_modifier(i).prix_achat & """;""" & les_articles_a_modifier(i).prix_achat & """" & ";""" & lier_PA_PV & """"
                    Else
                        ligne_article_fournisseur = ligne_article_fournisseur & vbCrLf & """" & les_articles_a_modifier(i).code_fabricant.TrimEnd(" ") & """;""" & id_fournisseur & """;""" & les_articles_a_modifier(i).code_sku & """;""" &
                                les_articles_a_modifier(i).prix_achat & """;""" & les_articles_a_modifier(i).prix_achat & """" & ";""" & lier_PA_PV & """"
                    End If
                Next
            Catch ex As Exception
                Set_Msg_log("Erreur traitement article a modifier : code article : " & les_articles_a_modifier(i).code_fabricant & " : " & ex.Message)
            End Try
        Next
    End Sub

Code VB : 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
 Public Function Verification_code_barre(ByVal code_article As String, ByVal code_barre As String)
        If LireINI("Article", "traitement_code_barre") = 0 Then
            Return code_barre
            Exit Function
        End If
 
        Dim sql As String
        Dim code_bare_a_saisir As String
        Dim result_sql As DataView
        Dim traitement As Boolean = True
 
        sql = " select id , barcode " &
            " from item " &
            " where barcode = '" & code_barre & "'"
 
        result_sql = SelectBDD_EBP(sql)
 
        For Each row As DataRowView In result_sql
            If row("id") <> code_article Then
                Set_Msg_log("Le code barre " & code_barre & " existe déja pour l'article : " & row("code_article"))
                traitement = False
            End If
        Next
 
        If les_code_barres <> "" Then
            If les_code_barres.Contains(";" & code_barre & ";") = True Then
                traitement = False
 
            End If
            If les_code_barres.Contains(";" & code_barre & ";") = False Then
                If les_code_barres = "" Then
                    les_code_barres = ";" & code_barre & ";"
                Else
                    les_code_barres = les_code_barres & ";" & code_barre & ";"
                End If
            End If
        Else
 
            If les_code_barres = "" Then
                les_code_barres = ";" & code_barre & ";"
            Else
                les_code_barres = les_code_barres & ";" & code_barre & ";"
            End If
 
        End If
 
        If traitement Then
            code_bare_a_saisir = code_barre
        Else
            code_bare_a_saisir = ""
        End If
 
        Return code_bare_a_saisir
    End Function
 
    Public Function Verification_code_reference(ByVal code_reference As String, ByVal sku As String)
        Dim traitement As Boolean = True
 
        'For i = 0 To les_code_articles.Count - 1
        '    If code_reference = les_code_articles.Item(i).code_fabricant And sku <> les_code_articles.Item(i).code_reference Then
        '        traitement = False
        '    End If
 
        'Next
 
        'For Each element As Article_code In les_code_articles
        'If element.code_fabricant = code_reference And sku <> element.code_reference Then
        'traitement = False
        ' Exit For
        ' End If
        ' Next
        If les_code_reference_interdit <> "" Then
            If les_code_reference_interdit.Contains(";" & code_reference & ";") = True Then
                traitement = False
            End If
        End If
 
        ' If les_code_articles.Exists(Function(x) x.code_fabricant = code_reference And x.code_reference <> sku) = True Then
        'traitement = False
        ' End If
        Return traitement
    End Function

La durée de traitement de cette étape est de 8h. Ce que je voudrais savoir si est-ce que vous voyez un moyen d'améliorer le temps de traitement.
Je précise que la durée de 8h ne comprend pas le temps de l'import dans EBP.

merci d'avance pour votre aide.