Excel 2016 - VBA - Validation des données + boucle For : Recherche d'optimisation
Bonsoir à tous,
Je suis à la recherche d'une piste pour optimiser un code.
Pour un besoin métier, j'ai met en œuvre des listes dynamiques.
Sur chaque ligne d'un tableau d'environ 20.000 lignes, selon une sélection de paramètres sur 3 colonnes, je propose une liste adaptée.
En appliquant la formule qui suit, je mets à jour 1 à 1 la "validation de données" des lignes de mon tableau.
NB : Mon tableau évolue dans le temps avec des lignes qui apparaissent et d'autres qui disparaissent.
Hélas cette méthode prend du temps et je cherche des astuces pour faire la même chose mais plus vite (la MAJ prend pas loin de 5min à date et je serai amené à développer encore mon fichier).
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 31 32 33
|
Worksheets("MonOnglet").Activate
'On désactive la MAJ de l'écran
Application.ScreenUpdating = False
Application.Calculation = xlManual
For i = 2 To dernLigne_MonOnglet
With Sheets("MonOnglet").Range("Y" & i).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:= _
"=OFFSET(CATALOGUE!$E$1,MATCH(CONCATENATE(LEFT(V" & i & ",2),""_"",W" & i & " ,""_"",X" & i & "),CATALOGUE!$S$2:$S$100,0),0,COUNTIF(CATALOGUE!S:S,CONCATENATE(LEFT(V" & i & ",2),""_"",W" & i & ",""_"",X" & i & ")),1)"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Next
'On réactive la MAJ de l'écran
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic |
J'ai fait des tests en remplaçant la formule par la création de liste et l'utilisation de la fonction "Indirect" mais je n'observe pas de gain de temps.
Merci par avance pour votre aide.
Cordialement