Challenge : optmizer ce code VBA !

Challenge : optmizer ce code VBA ! - Programmation

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 :sweat:
 
 
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 :o
 
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

Reply

Marsh Posté le 11-09-2001 à 12:04:35   

Reply

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+

Reply

Marsh Posté le 11-09-2001 à 12:57:06    

une autre solution serait de desactiver le refresh de ta page:

Code :
  1. Application.screenUpdating = False
  2. '... ton code ici  ....
  3. Application.ScreenUpdating = True


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

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 ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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 :)

Reply

Marsh Posté le 11-09-2001 à 14:40:23    

Je connais pas le langage, mais tu peux améliorer le code de helloWorld :

Code :
  1. For i = 1 To 2500 '2500 lignes a verifier 
  2.   For j = 1 To 2500 '2500 lignes a verifier 
  3.       chaine = Cells(i, 2)
  4.       If chaine = Cells(j, 4) Then 
  5.           Cells(i, 2) = "" 
  6.           Cells(j, 4) = "" 
  7.           Exit For
  8.       End If 
  9.   Next 
  10. Next


 
devient

Code :
  1. For i = 1 To 2500 '2500 lignes a verifier 
  2.   chaine = cells(i,2) // affectation 1 seule fois ds la boucle i
  3.   viderCellI = false // cette var est un booléen
  4.   For j = 1 To 2500 '2500 lignes a verifier 
  5.       If chaine = Cells(j, 4) Then 
  6.           Cells(j, 4) = ""
  7.           viderCellI = true
  8.       End If 
  9.   Next 
  10.   if viderCellI then Cell(i,2) = ""
  11. Next


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... :sol:


---------------
di. / www.diredaredare.org - Ailes de la ville
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed