Challenge : optmizer ce code VBA ! - Programmation
Marsh Posté le 11-09-2001 à 12:51:34
Sélectionne un autre onglet,
sheets("toto" ).select
et comme il ne sera plus à l'écran
ça ira plus vite.
Mais à chaque ligne tu rajoutes :
sheets("toto" ).cells(....
A+
Marsh Posté le 11-09-2001 à 12:57:06
une autre solution serait de desactiver le refresh de ta page:
Code :
|
Marsh Posté le 11-09-2001 à 13:04:54
je pige pas trop la finalite ...
juste une question :
For i = 1 To 2500 '2500 lignes a verifier
For j = 1 To 2500 '2500 lignes a verifier
If Cells(i, 2) = Cells(j, 4) Then
Cells(i, 2) = ""
Cells(j, 4) = ""
End If
Next
Next
soit i = 10, j=1
si Cells(10, 2) = Cells(1, 4)
alors Cells(10, 2) vaudra ""
a partir de la, pour que cette condition : Cells(i, 2) = Cells(j, 4) soit a nouveau verifiee, il faut que Cells(j, 4) soit egal a ""
alors dans ce cas
Cells(10, 2) va a nouveau valoir "" alors qu'il le vaut deja
Cells(j, 4) va valoir "" alors qu'il le vaut deja puisqu'il est egal a Cells(10, 2)
donc une premiere optimisation serait :
For i = 1 To 2500 '2500 lignes a verifier
For j = 1 To 2500 '2500 lignes a verifier
If Cells(i, 2) = Cells(j, 4) Then
Cells(i, 2) = ""
Cells(j, 4) = ""
Exit For
End If
Next
Next
nan ?
ensuite, ton Cells, c'est une espece de tableau de chaines de carcateres non ? (moi je connais pas VBA)
alors petetre que, si tu cree une variable chaine ainsi :
For i = 1 To 2500 '2500 lignes a verifier
For j = 1 To 2500 '2500 lignes a verifier
chaine = Cells(i, 2)
If chaine = Cells(j, 4) Then
Cells(i, 2) = ""
Cells(j, 4) = ""
Exit For
End If
Next
Next
*petetre* que ca va un peu booster
mais c'est a tester, je te l'ai dit, moi, le VBA ...
en esperant t'aider ...
Marsh Posté le 11-09-2001 à 13:11:23
Exact !!! Le EXIT c pas bete
Merci a tous
en fait, g lancé le prog pdt ke je suis parti manger, et pile a mon retour, la feuille XLS etait nikel
Marsh Posté le 11-09-2001 à 14:40:23
Je connais pas le langage, mais tu peux améliorer le code de helloWorld :
Code :
|
devient
Code :
|
La variable chaine est affectée uniquement lorsque sa valeur change. Si tu laisses cette instruction ds la boucle j, tu réaffectes n fois la var pour rien. Même principe pour le vidage de la cellule i : le booléen t'indique que tu dois vider la var, mais tu ne fais le vidage qu'une fois.
exit for : ne connaissant pas le langage, je reprends pas cette instruction, qui doit être un genre de goto nioulouk, donc unpeu louche...
Marsh Posté le 11-09-2001 à 12:04:35
Voila, ces quelque lignes simple sont censé faire mon travail en quelques secondes, malheursement, ca met quand meme du tps
Sub Macro1()
For i = 1 To 2500 '2500 lignes a verifier
For j = 1 To 2500 '2500 lignes a verifier
If Cells(i, 2) = Cells(j, 4) Then
Cells(i, 2) = ""
Cells(j, 4) = ""
End If
Next
Next
End Sub
DONC, ca ca marche, mais laisse tombé, demain matin ca tourne encore
Alors g fait ca :
For i = 1 To 2500
For j = i To 2500
If Cells(i, 4) = Cells(j, 2) Then
Cells(i, 2) = ""
Cells(j, 4) = ""
End If
Next
Next