Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1866 connectés 

  FORUM HardWare.fr
  Programmation

  Challenge : optmizer ce code VBA !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Challenge : optmizer ce code VBA !

n°59000
fabd
Posté le 11-09-2001 à 12:04:35  profilanswer
 

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

mood
Publicité
Posté le 11-09-2001 à 12:04:35  profilanswer
 

n°59014
apophyss
Posté le 11-09-2001 à 12:51:34  profilanswer
 

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+

n°59015
JWhy
je peux plier (héhé)
Posté le 11-09-2001 à 12:57:06  profilanswer
 

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
n°59017
HelloWorld
Salut tout le monde!
Posté le 11-09-2001 à 13:04:54  profilanswer
 

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
n°59020
fabd
Posté le 11-09-2001 à 13:11:23  profilanswer
 

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

n°59049
instantdha​rma
Ailleurs c'est ici
Posté le 11-09-2001 à 14:40:23  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Challenge : optmizer ce code VBA !

 

Sujets relatifs
cordonnées de la sourie en JAvascript pourkoi code marche pas??[VBA] Quelle fct remplace la fct Date ds Excel 97 ?
code automodifiant en php!![ACCESS] requetes SQL ou procedures VBA ?
VBA, Excel, ... :-(([VBA]
VBA word bis[HTML] logiciel pour nettoyer son code html
[VBA] [UserForm] Remplir une ListBox[VBA] Word et tableaux
Plus de sujets relatifs à : Challenge : optmizer ce code VBA !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR