C'est normal, tu ne l'as pas désactivé
Concernant la "Calculation" :
SoumZoum a écrit :
La calculation automatique, qui est la valeur par défaut, fait que chaque cellule modifiée est automatiquement recalculée ainsi que les cellules qui en découlent - les liens, les formules. Si tu as un =f7+f8 en cellule f6 et que tu modifies cette dernière, il recalculera les trois. Le fait de la mettre en manuelle et de la réactiver en fin de routine permet de tout faire d'un bloc, plutôt que de recalculer à chaque passage sur une cellule.
Tu désactives en début de module (=False), tu réactives en fin de sub ou en fin d'instruction (=True).
Des risques ? A part ralentir ta macro, non.
Par contre si un bout de ton code se base sur un résultat de la même macro, ça pourra te bloquer.
Exemple
Sheets.Add
[A1, A2] = 10
[A3].Formula = "=A1*A2" '= 100
Application.calculation = xlcalculationmanual
[A1] = 20
[A4].formula = "=A3*10"
Application.calculation = xlcalculationautomatic
Mets ça dans une sub et fais la tourner manuellement (touche F8), en étant attentif aux valeurs de A3 et A4.
Dans l'exemple, ça va, car les formules sont recalculées à la fin, donc pas de problème.
Maintenant, remplace
[A4].formula = "=A3*10"
par
[A4]= [A3]*10
, et refais tourner la sub .
Et tu verras que ça peut te donner des résultats bien différents de ceux attendus.
Concernant donc ton code :
Application.ScreenUpdating = False
Application.Calculation = xlcalculationmanual '(Eviter de placer ce genre d'instruction au milieu d'une boucle car elle sera exécutée à chaque itération, ce qui n'est pas utile ni judicieux si tu souhaites optimiser ton code.
lastrow = Worksheets("Test de Notation").Range("Q" & Rows.Count).End(xlUp).Row
For i = 1 To lastrow
Cells(i, 18) = Application.VLookup(Cells(i, 17), Worksheets("mapping").Range("$H$2:$L$1050").Value, 5, False)
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Ca devrait marcher bien plus vite !