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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation Comparer deux colonnes en VBA sous Excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation Comparer deux colonnes en VBA sous Excel

n°1657607
Viouu
Posté le 13-12-2007 à 11:19:19  profilanswer
 

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
mood
Publicité
Posté le 13-12-2007 à 11:19:19  profilanswer
 

n°1657637
Viouu
Posté le 13-12-2007 à 12:26:21  profilanswer
 

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

n°1657645
olivthill
Posté le 13-12-2007 à 12:48:16  profilanswer
 

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

n°1657650
Viouu
Posté le 13-12-2007 à 12:53:39  profilanswer
 

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

n°1657667
olivthill
Posté le 13-12-2007 à 13:15:56  profilanswer
 

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

n°1657672
Viouu
Posté le 13-12-2007 à 13:26:39  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation Comparer deux colonnes en VBA sous Excel

 

Sujets relatifs
copie selon criteres sous excel[VBA] probleme de pièce jointe outlook
Résolu [Excel] colori selon critèreRésolu[Excel] Se déplacer dans Excel
erreur avec une macro d'excelVBA 2007 et INET: serveur OLE introuvable... Au secours !
Apprendre le VBA pour la financecréer une macro VBA qui modifiera une base de données automatiquement
Conseil pour migration Excel vers access ou autre SGBD en VBA 
Plus de sujets relatifs à : Optimisation Comparer deux colonnes en VBA sous Excel


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