Boucles et performances [ résolu ]

Boucles et performances [ résolu ] - VB/VBA/VBS - Programmation

Marsh Posté le 04-12-2007 à 18:07:58    

Bonjour.
J'ai fait une petite macro sur excel.
Le problème étant que cela fonctionne quand je traite moins de 10/100 des données mais dès que je met tout ça bloque. :/
Voici le code en question:

Code :
  1. Private Sub CommandButton1_Click()
  2.  
  3.    v_colonne_ref_1 = "F"
  4.    v_colonne_four1 = "J"
  5.    v_colonne_ref_2 = "A"
  6.    v_colonne_four2 = "D"
  7.    v_ligne_1 = 2
  8.    v_ligne_2 = 1
  9.  
  10. Worksheets(1).Activate
  11.  
  12.    For g = 2 To 2000
  13.         v_cellule_ref_1 = v_colonne_ref_1 & g
  14.         vref_1 = Worksheets(1).Range(v_cellule_ref_1)
  15.         vref_1 = Trim(vref_1)
  16.         Worksheets(1).Range(v_cellule_ref_1) = vref_1
  17.         v_cellule_four1 = v_colonne_four1 & g
  18.         vfour1 = Worksheets(1).Range(v_cellule_four1)
  19.         vfour1 = Trim(vfour1)
  20.         Worksheets(1).Range(v_cellule_four1) = vfour1
  21.    Next g
  22.  
  23. Worksheets(2).Activate
  24.  
  25.    For h = 1 To 6000
  26.        
  27.         v_cellule_ref_2 = v_colonne_ref_2 & h
  28.         v_cellule_four2 = v_colonne_four2 & h
  29.         vref_2 = Worksheets(2).Range(v_cellule_ref_2)
  30.         vref_2 = Trim(vref_2)
  31.         Worksheets(2).Range(v_cellule_ref_2) = vref_2
  32.         vfour2 = Worksheets(2).Range(v_cellule_four2)
  33.         vfour2 = Trim(vfour2)
  34.         Worksheets(2).Range(v_cellule_four2) = vfour2
  35.    Next h
  36.  
  37. Worksheets(1).Activate
  38.        
  39.    For i = v_ligne_1 To 2000
  40.         v_cellule_resultat = "C" & i
  41.         v_cellule_ref_1 = v_colonne_ref_1 & i
  42.         v_cellule_four1 = v_colonne_four1 & i
  43.         vref_1 = Worksheets(1).Range(v_cellule_ref_1)
  44.         vfour1 = Worksheets(1).Range(v_cellule_four1)
  45.        
  46.    
  47.    
  48. Worksheets(2).Activate
  49.    
  50.         For j = v_ligne_2 To 6000
  51.             v_cellule_ref_2 = v_colonne_ref_2 & j
  52.             v_cellule_four2 = v_colonne_four2 & j
  53.             vref_2 = Worksheets(2).Range(v_cellule_ref_2)
  54.             vfour2 = Worksheets(2).Range(v_cellule_four2)
  55.        
  56.    
  57. Worksheets(1).Activate
  58.        
  59.         If vref_1 = vref_2 And vfour1 = vfour2 Then Worksheets(1).Range(v_cellule_resultat) = "ACTIF": GoTo suite
  60.     Next j
  61. suite:
  62.     Next i
  63.    
  64.    
  65. End Sub


Bon je sais que je code comme un porc mais tout de même je ne peut pas être aussi mauvais ( si ?  :lol:  )
J'ai bien tenté de mettre le nettoyage des cellules à part mais le ralentissement ne vient pas de là.
 
Qqun aurait il une idée siouplait.....
Merci d'avance.


Message édité par amsterdam le 04-12-2007 à 21:08:32
Reply

Marsh Posté le 04-12-2007 à 18:07:58   

Reply

Marsh Posté le 04-12-2007 à 19:20:13    

Personne ?

Reply

Marsh Posté le 04-12-2007 à 19:47:52    

C'est bon je pense avoir trouver.
C'est au niveau de la fonction trim que j'ai simplifié et ça va beaucoup plus vite.
Et en plus c'est plus propre  :lol:  

Code :

Reply

Marsh Posté le 04-12-2007 à 20:10:50    

:cry:  :cry:  :cry:  
Fausse alerte. :( ça ne va pas plus vite.
Je met quand même la nouvelle version du code.

Code :
  1. Option Explicit
  2. Dim v_cellule_ref_1, v_cellule_ref_2, v_cellule_four1, v_cellule_four2, vref_1, vref_2, vfour1, vfour2 As String
  3. Dim v_colonne_ref_1, v_colonne_ref_2, v_colonne_four1, v_colonne_four2, v_cellule_resultat, v_temps As String
  4. Dim v_ligne_1, v_ligne_2, g, h, i, j As Integer
  5. Private Sub CommandButton1_Click()
  6.    v_temps = Timer
  7.    v_colonne_ref_1 = "F"
  8.    v_colonne_four1 = "J"
  9.    v_colonne_ref_2 = "A"
  10.    v_colonne_four2 = "D"
  11.    v_ligne_1 = 2
  12.    v_ligne_2 = 1
  13.  
  14. Worksheets(1).Activate
  15.  
  16.    For g = 2 To 2000
  17.         v_cellule_ref_1 = v_colonne_ref_1 & g
  18.         v_cellule_four1 = v_colonne_four1 & g
  19.         Worksheets(1).Range(v_cellule_ref_1) = Trim(Worksheets(1).Range(v_cellule_ref_1))
  20.         Worksheets(1).Range(v_cellule_four1) = Trim(Worksheets(1).Range(v_cellule_four1))
  21.    Next g
  22.  
  23. Worksheets(2).Activate
  24.  
  25.    For h = 1 To 6000
  26.        
  27.         v_cellule_ref_2 = v_colonne_ref_2 & h
  28.         v_cellule_four2 = v_colonne_four2 & h
  29.         Worksheets(2).Range(v_cellule_ref_2) = Trim(Worksheets(2).Range(v_cellule_ref_2))
  30.         Worksheets(2).Range(v_cellule_four2) = Trim(Worksheets(2).Range(v_cellule_four2))
  31.        
  32.    Next h
  33.  
  34. Worksheets(1).Activate
  35.        
  36.    For i = v_ligne_1 To 50
  37.         v_cellule_resultat = "C" & i
  38.         v_cellule_ref_1 = v_colonne_ref_1 & i
  39.         v_cellule_four1 = v_colonne_four1 & i
  40.         vref_1 = Worksheets(1).Range(v_cellule_ref_1)
  41.         vfour1 = Worksheets(1).Range(v_cellule_four1)
  42.        
  43.    
  44.    
  45. Worksheets(2).Activate
  46.    
  47.         For j = v_ligne_2 To 6000
  48.             v_cellule_ref_2 = v_colonne_ref_2 & j
  49.             v_cellule_four2 = v_colonne_four2 & j
  50.             vref_2 = Worksheets(2).Range(v_cellule_ref_2)
  51.             vfour2 = Worksheets(2).Range(v_cellule_four2)
  52.        
  53.    
  54. Worksheets(1).Activate
  55.        
  56.         If vref_1 = vref_2 And vfour1 = vfour2 Then Worksheets(1).Range(v_cellule_resultat) = "ACTIF": GoTo suite
  57.     Next j
  58. suite:
  59.     Next i
  60.    
  61.     MsgBox Timer - v_temps
  62. End Sub


En fait ça allait plus vite car le fichier excel était foiré du à une mauvaise manip de ma part et au lieu d'avoir une chaine de caractère genre: 0PAST4.1EP0.8T40
j'avais "faux"
Ce qui est bizarre c'est que ce sont deux chaines de caractères..non ?


Message édité par amsterdam le 04-12-2007 à 20:11:42
Reply

Marsh Posté le 04-12-2007 à 21:08:12    

C'est bon c'est résolu.  :bounce:  [:gm_superstar]  [:gm_superstar]  
En fait j'ai tout mis dans des tableau por éviter de passer des millier de fois d'un onglet à l'autre et ttot baigne.
Environ 15 secondes pour tout comparer.

Reply

Sujets relatifs:

Leave a Replay

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