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