Salut.
La boucle est lente dis-tu.
Pour une très grande boucle, il vaut mieux utiliser les fonctions Excel dont l'exécution est plus rapide. Bien poser les calculs.
Range("E2").FormulaArray"=INDEX($B$1:$C$40000,LARGE(IF(D2=$A$2:$A$40000,ROW($A$2:$A$40000),""),1),5)"
pour remplir toute la colonne avec cette formule:
Range("E2").Autofill Destination:=Range("E2:E40000")
Transformer les formules par leurs valeurs:
Range("E2:E40000").Value=Range("E2:E40000").Value
En fait il te faut tester une formule efficace qui répond à tes besoins.
si tu préfères toujours les boucles:
dans le corps de ta procédure recopie ceci
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 34 35 36
| Dim T,Table,D,L as Long,i as Integer
'T variant devant contenir ta colonne n° 1 (critère)
'D Variant qui contiendra les Résultats (colonne n° 4 et 5)
'Table variant qui contiendra Tes colonnes n°: 2 et 3
'Affectations implicites en tableau des variants T, D, Table
T=Range("A2:A50000")
Table=Range("B2:B50000")
'Ici si la colonne n'est pas vide l'éffacer avec l'instruction Range("D2:D50000").ClearContents
D=Range("D2:D50000")
L=1
Do 'boucle externe qui permettra d'avoir un élément à la boucle interne
n=1
Do
If Table(n,1)=T(L,1) Then
' instructions...
'Ex: D(L,1)=Table(1,2)
Else
'Instruction...
End If
n=n+1
Loop Until n=Ubound(D)
L=L+1
Loop Until L=Ubound(D)
'Renvoyer le Tableau D dans la colonne 4
Range("D2:D40000")=D
'En fait l'opération n'agit sur la feuille qu'à la dernière instruction
il vaut mieux avoir le mode de calcul en manuel si tu as des formules sur ton fichier. |
Partager