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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager