Lenteur avec Macro Excel + base de données
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 :mouarf:)
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??:calim2:
Merci!
Macro de connexion:
Code:
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:
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 |