Optimisation Comparer deux colonnes en VBA sous Excel

Optimisation Comparer deux colonnes en VBA sous Excel - VB/VBA/VBS - Programmation

Marsh Posté le 13-12-2007 à 11:19:19    

Bonjour,
 
Voila je doit faire la tache suivante :
 
Comparer les colonnes A de la feuil 1 et feuil 2  
i=numeros de ligne dans la feuil1
x=numeros de ligne dans la feuil2
0<x>5000  
0<i>5000
 
Les colonnes A contiennent des valeur du type "IMB/75103/C/0525"  
 
Si la valeur de cellule Ai dans la feuille 1 et égal à une valeur d'une cellule de la colonne A dans la feuille 2 et si dans la ligne Ax de la feuille 2 la cellule Fx est rempli alors les cellules de la feuille 1 Gx,Hx,Ix ...etc sont egal aux cellule de la feuille 2 Ox,Px..etc  
 
Si Fx est pas rempli ne rien faire  
Si Ax dans feuil1 ne trouve pas de correspondance dans feuil2 passer à i+1.
Stoper la function à i=5000
 
Alors pour le moment je suis parti sur cette piste la

Code :
  1. Sub COMPAR()
  2. 'declaration des variables'
  3. Dim VALEURA As String, i As Integer, x As Integer, valeurB As String
  4. 'i correspondra au numeros de ligne dans la feuille 1'
  5. i = 2
  6. 'continuer tant que i n'est pas egal à 5000'
  7. Do While i <> "5000"
  8. 'donner une valeur de départ à VALEURA, valeura=le contenue de A2'
  9. VALEURA = Range("A" & i).Value
  10. 'activer la feuille 2'
  11. Sheets("Feuil2" ).Select
  12. 'x correspond au numeros de ligne dans la feuille 2'
  13. x = 2
  14. 'donner une valeur de depart a valeurb'
  15. valeurB = Range("A" & x).Value
  16. 'comparer valeura et valeurb, tant que faux incrementer x de 1'
  17. Do While VALEURA <> valeurB
  18. x = x + 1
  19. valeurB = Range("A" & x).Value
  20. Loop
  21. 'si la cellule Lx = quelque chose alors on copy la ligne'
  22. If Range("L" & x).Value <> "" Then
  23. Range("L" & x).Select
  24. Selection.Copy
  25. Sheets("Feuil1" ).Select
  26. Range("J" & i).Select
  27. ActiveSheet.Paste
  28. Sheets("Feuil2" ).Select
  29. Range("O" & x).Select
  30. Selection.Copy
  31. Sheets("Feuil1" ).Select
  32. Range("M" & i).Select
  33. ActiveSheet.Paste
  34. End If
  35. 'on incremente i de 1'
  36. i = i + 1
  37. 'on continue les fonction d'avant jusqu'a ce que i=5000'
  38. Loop
  39. End Sub


 
J'ai un probléme a la ligne 26  X ne s'arrete jamais d'incrementer hors il faut que je larréte à 5000 si il n'a pas trouver de correspondance.
 
Merci.
 
Viouu


Message édité par Viouu le 13-12-2007 à 12:25:05
Reply

Marsh Posté le 13-12-2007 à 11:19:19   

Reply

Marsh Posté le 13-12-2007 à 12:26:21    

Bon ok tout marche maintenant mais je shouaterai l'optimisé car ca prend bcp bcp de temps ..
 

Code :
  1. Sub COMPAR()
  2. 'declaration des variables'
  3. Dim VALEURA As String, i As Integer, x As Integer, valeurB As String
  4. 'i correspondra au numeros de ligne dans la feuille 1'
  5. i = 2
  6. 'continuer tant que i n'est pas egal à 5000'
  7. Do While i <> "5000"
  8. 'donner une valeur de départ à VALEURA, valeura=le contenue de A2'
  9. VALEURA = Range("A" & i).Value
  10. 'activer la feuille 2'
  11. Sheets("Feuil2" ).Select
  12. 'x correspond au numeros de ligne dans la feuille 2'
  13. x = 2
  14. 'donner une valeur de depart a valeurb'
  15. valeurB = Range("A" & x).Value
  16. 'comparer valeura et valeurb, tant que faux incrementer x de 1'
  17. Do While VALEURA <> valeurB
  18. x = x + 1
  19. If x = 5000 Then GoTo l49
  20. valeurB = Range("A" & x).Value
  21. Loop
  22. 'si la cellule Lx = quelque chose alors on copy la ligne'
  23. If Range("L" & x).Value <> "" Then
  24. Range("L" & x).Select
  25. Selection.Copy
  26. Sheets("Feuil1" ).Select
  27. Range("J" & i).Select
  28. ActiveSheet.Paste
  29. Sheets("Feuil2" ).Select
  30. Range("O" & x).Select
  31. Selection.Copy
  32. Sheets("Feuil1" ).Select
  33. Range("M" & i).Select
  34. ActiveSheet.Paste
  35. End If
  36. 'on incremente i de 1'
  37. l49:
  38. i = i + 1
  39. 'on continue les fonction d'avant jusqu'a ce que i=5000'
  40. Loop
  41. End Sub


 
Quelqu'un à une idée
 
Viouu

Reply

Marsh Posté le 13-12-2007 à 12:48:16    

VBA n'est pas très rapide.
 
Pour accélérer un petit peu, on peut supprimer le refresh et l'auto update avec

Application.ScreenUpdating = False
...
Tout le programme
...
Application.ScreenUpdating = True

Reply

Marsh Posté le 13-12-2007 à 12:53:39    

merci je vais essayer
 
Je me posait la question vue qu'il fait du copier coller il ne faut pas vider le presse papier ?
 
Viouu

Reply

Marsh Posté le 13-12-2007 à 13:15:56    

Application.ScreenUpdating n'interfère pas avec le presse papier.

Reply

Marsh Posté le 13-12-2007 à 13:26:39    

Je sais mais vue que j'utilise le copier coller dans mon code. ?
 
Viouu

Reply

Sujets relatifs:

Leave a Replay

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