Bonjour tout le monde,

Je fais de la migration de données et j'ai un problème (oui, car sinon je ne posterai pas sur ce forum )

Le souci est que un de mes développeurs a codé une macro Excel qui doit traiter des fichiers Excel pour tout en requêtant en base.

Nous avons un onglet de collecte contenant les informations de quelques champs à charger et un onglet d'upload qui lui contient tous les champs de la table à charger.
Les fichiers peuvent avoir la taille de 66000 lignes quelques fois et faire plus de 200Mo.

Cependant cette macro prend un temps fou pour aller requeter en base (en consultation uniquement!!!) et ramener des infos nécessaires à l'upload.

Voici les 2 macros qu'il utilise.

Est-ce que quelqu'un ici pourrait me dire pourquoi ça peut mettre jusqu'à 48h pour 66000 lignes??

Merci!

Macro de connexion:
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
Private Sub P_OracleConnect()
    On Error GoTo logonError
    connected = 0
    Dim Conn As String
    Dim drv As String
    uid = ThisWorkbook.Worksheets("CONTROLE").Range("CONNECTION_BASE_LOGIN").Value    '"sqluser"
    pwd = ThisWorkbook.Worksheets("CONTROLE").Range("CONNECTION_BASE_PASSWORD").Value    '"sqluser"
    dBase = ThisWorkbook.Worksheets("CONTROLE").Range("CONNECTION_BASE_BASE").Value    '"EDEVBDD1"
 
    Set db = New ADODB.Connection
 
    Conn = "UID= " & uid & ";PWD=" & pwd & ";DRIVER={Microsoft ODBC For Oracle};" & "SERVER=" & dBase & ";"
 
    With db
        .ConnectionString = Conn
        .CursorLocation = adUseClient
        .Open
    End With
    connected = 1
 
logonError:
 
    If Err.Number <> 0 Then
 
        MsgBox "Restart the program. Error Description:" & Err.Description & "", vbCritical
        connected = 0
 
    End If
 
End Sub
Fonction dépendante:
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
'Renvoie une valeur
'version 1.0
Public Function F_S_BASE(S_Requete As String) As String
 
    Dim adoCommand As ADODB.Command
    Dim adoRecordSet As ADODB.Recordset
    Dim l_cpt As Long
    On Error GoTo InsertCustomer
    Set adoCommand = New ADODB.Command
    With adoCommand
        .CommandType = adCmdText
        .ActiveConnection = db
        .CommandText = S_Requete
    End With
    Set adoRecordSet = New ADODB.Recordset
    adoRecordSet.Open adoCommand, , adOpenStatic, adLockOptimistic
 
    F_S_BASE = adoRecordSet.Fields(0)
 
    Set adoRecordSet = Nothing
    Set adoCommand = Nothing
    Exit Function
InsertCustomer:
 
End Function