jeromecools
XLDnaute Nouveau
Bonjour à tous,
J'ai un fichier de 30.000 Lignes, voir plus.
Avant de mettre à jour mon fichier via une connection SQL, je fait 2 copies.
Une copie identique, et aussi une liste avec ITEM sans doublons, et 3 valeurs manuel qui n'existe pas dans la table sql.
Mes macros récupèrent ces valeurs dans ma table d'origine.
Seulement voila, je pensais que la première serait plus rapide grace au dictonary, mais la version avec vlookup me semble plus rapide... que pensez-vous?
Merci pour vos coneilles/remarques.
J'ai un fichier de 30.000 Lignes, voir plus.
Avant de mettre à jour mon fichier via une connection SQL, je fait 2 copies.
Une copie identique, et aussi une liste avec ITEM sans doublons, et 3 valeurs manuel qui n'existe pas dans la table sql.
Mes macros récupèrent ces valeurs dans ma table d'origine.
Seulement voila, je pensais que la première serait plus rapide grace au dictonary, mais la version avec vlookup me semble plus rapide... que pensez-vous?
Code:
Sub CopierLesSelectionAssortiment2()
Sheets("TRAVAIL").Select
Dim ChoixL, ChoixMs, ChoixMn As Object
Dim ItemIdBackup, ItemId As Range
Set ChoixL = CreateObject("Scripting.Dictionary")
Set ChoixMs = CreateObject("Scripting.Dictionary")
Set ChoixMn = CreateObject("Scripting.Dictionary")
' DB_ITEM est ma liste sans doublons (ID, Col1, Col2, Col3)
For Each ItemIdBackup In Sheets("DB_ITEM").Range("A2:" & Range("A2").End(xlDown).Address)
ChoixL.Item(ItemIdBackup.Value) = ItemIdBackup.Offset(0, 1).Value
ChoixMs.Item(ItemIdBackup.Value) = ItemIdBackup.Offset(0, 2).Value
ChoixMn.Item(ItemIdBackup.Value) = ItemIdBackup.Offset(0, 3).Value
Next ItemIdBackup
Application.ScreenUpdating = False
Range("TableTravail[ChoixL]").Interior.Color = RGB(229, 224, 236)
Range("TableTravail[ChoixMs]").Interior.Color = RGB(253, 233, 217)
Range("TableTravail[ChoixMn]").Interior.Color = RGB(219, 238, 242)
' TableTravail[Item] est la colone ID en référence à celle du sheet DB_ITEM
For Each ItemId In Range("TableTravail[Item]")
If ChoixL.Exists(ItemId.Value) Then
If ChoixL.Item(ItemId.Value) <> ItemId.Offset(0, 29).Value Then
ItemId.Offset(0, 29).Value = ChoixL.Item(ItemId.Value)
End If
Else
ItemId.Offset(0, 29).Interior.ColorIndex = 20
End If
If ChoixMs.Exists(ItemId.Value) Then
If ChoixMs.Item(ItemId.Value) <> ItemId.Offset(0, 30).Value Then
Cells(ItemId.Row, 31).Value = ChoixMs.Item(ItemId.Value)
End If
Else
Cells(ItemId.Row, 31).Interior.ColorIndex = 20
End If
If ChoixMn.Exists(ItemId.Value) Then
If ChoixMn.Item(ItemId.Value) <> ItemId.Offset(0, 31).Value Then
Cells(ItemId.Row, 32).Value = ChoixMn.Item(ItemId.Value)
End If
Else
Cells(ItemId.Row, 32).Interior.ColorIndex = 20
End If
Next ItemId
Application.ScreenUpdating = True
End Sub
Code:
Sub CopierLesSelectionAssortiment()
' ETAPE 3 : Copier les choix assort
Sheets("DB_ITEM").Visible = True
Sheets("TRAVAIL").Select
Range("TableTravail[ChoixL]").Select
Range("TableTravail[ChoixL]").Formula = "=T(VLOOKUP([Item],DB_ITEM!A:D,2,FALSE))"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
Application.CutCopyMode = False
Range("TableTravail[ChoixMs]").Select
Range("TableTravail[ChoixMs]").Formula = "=T(VLOOKUP([Item],DB_ITEM!A:D,3,FALSE))"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
Application.CutCopyMode = False
Range("TableTravail[ChoixMn]").Select
Range("TableTravail[ChoixMn]").Formula = "=T(VLOOKUP([Item],DB_ITEM!A:D,4,FALSE))"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
Application.CutCopyMode = False
'pour vider le cache
VidePressePapier
'pour revenir au menu de mon programme
RetourMenu ("Les choix d'assortiment sont copiés depuis le backup item")
End Sub
Merci pour vos coneilles/remarques.
Dernière édition: