Code VBA et Vlookup, trop longue exécution

Bonsoir,

VlookUp travaille sur des cellules.

Si la boucle contient beaucoup de lignes, utiliser plutôt des Arrays et des Dictionnaires.

Ceuzin

Bonjour Ceuzin ! Je ne connais pas le principe des dictionnaires, comment faire dans mon cas par exemple ?

Bonjour,

On simule une maj avec VLookUp :7sec

Sub RechvM2()
  Application.ScreenUpdating = False
  Set clé = Range("F2:F2673")    ' valeurs cherchées
  Set résult = Range("G2:G2673")
  colResult = 2
  messageErreur = "inconnu"
  For i = 1 To clé.Count
    tmp = clé.Cells(i, 1)
    résult.Cells(i, 1) = Application.VLookup(tmp, [matable], colResult, False)
  Next i
End Sub

Avec Dictionary :0,17 sec

Sub RechvM()
  Set clé = Range("F2:F2673")    ' valeurs cherchées
  Set résult = Range("G2:G2673")
  colResult = 2
  messageErreur = "inconnu"
  Set d = CreateObject("Scripting.Dictionary")
  a = [matable].Value
  b = clé.Value
  For i = LBound(a) To UBound(a)
    d(a(i, 1)) = a(i, colResult)
  Next i
  Dim temp(): ReDim temp(LBound(b) To UBound(b), 1 To 1)
  For i = LBound(b) To UBound(b)
    If d(b(i, 1)) <> "" Then temp(i, 1) = d(b(i, 1)) Else temp(i, 1) = messageErreur
  Next i
  résult.Value = temp
End Sub

Ceuzin

11majvlookup.zip (321.91 Ko)

Ah ca marche bien ! Merci beaucoup !

Et sinon, de petites idées pour le reste du code ? Je suis assez novice donc je sais pas faire trop efficient

Bonjour,

2 ou 3 commentaires sur ton code :

  • La déclaration des variables est inexacte (Dim A, B, C As Integer ne déclare que "C", il faut écrire Dim A As Integer, B As Integer...)
  • Tu peux aussi utiliser en début de code les 2 instructions "Application.ScreenUpdating = False" et "Application.Calculation = xlCalculationManual" pour accélérer l’exécution et ne pas oublier de rétablir les valeurs en fin de macro
  • Aussi, par expérience j'ai constaté que les instructions type " EntireRow.Delete shift:=xlUp" sont parfois longues à exécuter. Aussi, tu peux utiliser une instruction ".ClearContents" puis réaliser un tri en fin de macro pour positionner les lignes vides en bas de tes données

En espérant que ça t'aidera.

Merci beaucoup ! Je vais tester ca des que je peux !

Bonjour,

et n'oubliez pas :

@ bientôt

LouReeD

Rechercher des sujets similaires à "code vba vlookup trop longue execution"