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
| Option Explicit
Sub Mise_a_jour()
On Error GoTo fin
Dim j As Byte
Dim Lignes As Long, i As Long, k As Long
Dim Temps_1 As Date, Temps_2 As Date
Dim Tableau_1 As Variant, Tableau_2 As Variant
Dim Dico As Object
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset
Set cnx = New ADODB.Connection
Set rst = New Recordset
Set Dico = CreateObject("Scripting.Dictionary")
Temps_1 = Time
cnx.Open "Driver={Microsoft Visual FoxPro Driver};SourceDB=C:\Fichiers;SourceType=DBF;Exclusive=No"
'Mémorise les désignations
rst.Open "SELECT GPARTICL.AR_CODE, GPARTICL.AR_DES1 FROM GPARTICL WHERE LEFT(GPARTICL.AR_CODE, 1) = 'C'", cnx
Tableau_1 = Application.Transpose(rst.GetRows)
rst.Close
For i = 1 To UBound(Tableau_1)
Tableau_1(i, 1) = Trim(Tableau_1(i, 1)) 'Suppression des espaces en fin de lignes
Tableau_1(i, 2) = Trim(Tableau_1(i, 2))
Dico(Tableau_1(i, 1)) = i 'Intègre les références dans un dictionnaire
Next i
With ThisWorkbook.Sheets("Bons de livraison")
.Range("A4:D80000").ClearContents 'Suppression des anciennes données
rst.Open "SELECT GPCOLIS.CO_EXPE, GPCOLIS.CO_NSER, GPCOLIS.CO_CART FROM GPCOLIS WHERE LEFT(GPCOLIS.CO_CART, 1) = 'C'", cnx
.Range("A4").CopyFromRecordset rst 'Import des nouvelles données
rst.Close
Lignes = .Range("A" & Rows.Count).End(xlUp).Row
Tableau_2 = .Range("A4:D" & Lignes)
For i = 1 To UBound(Tableau_2)
Tableau_2(i, 2) = Trim(Tableau_2(i, 2)) 'Suppression des espaces en fin de lignes
Tableau_2(i, 3) = Trim(Tableau_2(i, 3))
If Tableau_2(i, 2) = vbNullString Then 'Supprime les lignes sans numéro de série
For j = 1 To 3
Tableau_2(i, j) = vbNullString
Next j
Else
k = Dico(Tableau_2(i, 3)) 'Donne la position de la référence dans le dictionnaire et donc dans le Tableau_1
Tableau_2(i, 4) = Tableau_1(k, 2) 'Désignation
End If
Next i
With .Range("A4:D" & UBound(Tableau_2) + 3)
.ClearContents
.FormulaLocal = Tableau_2 'Importation des données
.Sort key1:=.Range("A1"), order1:=xlAscending, DataOption1:=xlSortNormal 'Tri par numéro de BL
End With
End With
cnx.Close
Temps_2 = Time
MsgBox "Mise à jour terminée en " & Format(CDate(Temps_2 - Temps_1), "n""mn ""s""sec")
Erase Tableau_1
Erase Tableau_2
Set Dico = Nothing
Set rst = Nothing
Set cnx = Nothing
Exit Sub
fin:
MsgBox "Echec de la mise à jour (ref : " & Tableau_2(i, 1) & ")"
End Sub |