Votre question

Macro vba pour comparaison de 2 colonne

Tags :
  • Programmation
Dernière réponse : dans Programmation
4 Avril 2011 12:15:32

Bonjour tout le monde ;


Je sui nouveau sur votre forum et je suis debutant en VBA . merci d'avance pour ceux qui vont m'aider à resoudre mon problème.
En fait , jai deux feuils(feuil1 et feuil2) la colA de la feuil 1 contient les codes article(il peut y avoir des cellules vide) .la col G de la feuil2 contient les article aussi(il peut y avoire des cellules vide) col M jusqu'à col X contient les quantités pour chaque article (sur une année (12 mois)) .je veux créer un code vba qui prends un article de la col A "feuil1" ,le cherche dans la colonne "G" de la feuil2 ,une fois trouvé il copier les quantités correspondantes de cet article (les cellules des col M-->X de la feuil2 ) vers les cellules C1-->C13 de la feuil1 . pour le passage à un autre article j'aimerai bien qu'il saute 3 lignes c'est à dire pour le prchaine article les quantités seront coller dans les cellules C4-->C16 .......

voilà ce que j'ai fait , et je ne sais pas pourquoi ça ne marche pas


  1. Sub saisie2()
  2.  
  3.  
  4. On Error Resume Next
  5. Dim Lig As Long
  6. Dim NbrLig As Long, NumLig As Long
  7.  
  8. Dim col, char As String
  9.  
  10.  
  11.  
  12.  
  13.  
  14. Dim i As Integer
  15.  
  16.  
  17.  
  18. 'col3 = "M"
  19. compt1 = 1
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26. NbrLig = Sheets("Feuil1").Cells(65536, col1).End(xlUp).Row
  27. NumLig = Sheets("Feuil2").Cells(65536, col1).End(xlUp).Row
  28.  
  29.  
  30.  
  31. For Lig = 1 To NbrLig
  32. Sheets("Feuil1").Select
  33.  
  34. Cells(Lig, 1).Select
  35. char = Cells(Lig, 1).Value
  36. If char = "" Then GoTo lab
  37.  
  38.  
  39.  
  40. For i = 1 To NumLig
  41.  
  42.  
  43. If Sheets("Feuil2").Range("G" & i).Value = char Then
  44.  
  45.  
  46.  
  47. Sheets("Feuil2").Select
  48. Sheets("Feuil2").Range("M" & i & ":X" & i).Copy
  49.  
  50.  
  51. Sheets("Feuil1").Select
  52. Sheets("Feuil1").Range("C" & compt1 & ":N" & compt1).Select
  53. ActiveSheet.Paste
  54.  
  55.  
  56. End If
  57.  
  58. Next i
  59. compt1 = compt1 + 3
  60.  
  61. lab:
  62. Next Lig
  63.  
  64. End Sub

Autres pages sur : macro vba comparaison colonne

11 Avril 2011 21:11:41

Il y a plusieurs problème dans le code que tu donnes ainsi que dans l'énnoncé :
énoncé:
1- énoncé : c'est en ligne que tu fait tes recherches et sur une même ligne que tu colles les résultats ce n'est donc pas de c4 à c16 mais des colonnes C à N d'après ton code.
code:
1- "on error resume next" évite de l'utiliser c'est plus un conseil qu'une erreur s'il arrive une erreur pendant l'exécution de ton code que tu n'avais pas prévu au départ, cette simple ligne suffit à te rendre aveugle. je te l'ai laissé par défaut ceci dit
2- Ta variable "char" renommes la.... char(valeur) existe déjà par défaut en VBA... je n'ai pas testé si ça fonctionne ou pas mais je me suis fais prendre au piege et cru en passant vite fait sur le code que ton soucis venait de là. pour plus de clareté evites.
3- voilà un code qui devrait fonctionner (mais non testé) j'ai fais quelques remarques sur ton code amuses toi à trouver les différences et comprendre ce qui n'allait pas.... au besoin n'hésites pas à poser des questions. (PS: mon VBA remonte à loin donc indulgence sur si les objets manipulés ne sont pas écris correctement)

Bonne continuation,

  1. Sub saisie2()
  2.  
  3.  
  4. 'On Error Resume Next
  5. Dim Lig As Long
  6. Dim NbrLig As Long, NumLig As Long
  7. Dim cde As String
  8. Dim i As Integer
  9.  
  10. NbrLig = Worksheets("Feuil1").Range("A" & 65536).End(xlUp).Row
  11. 'Sur la feuille 2 c'est la colonne "G" d'après l'ennoncé qui correspond à la colonne "A" de la feuille 1
  12. NumLig = Worksheets("Feuil2").Range("G" & 65536).End(xlUp).Row
  13. For Lig = 1 To NbrLig step 3
  14. cde =Worksheets("Feuil1").range("A" & lig)
  15. If cde = "" Then GoTo lab
  16. 'là il te faut réinitialiser ta variable i sans quoi tu n'y rentres qu'au premier test et les autres fois elle garde la valeur affectée au dernier passage et dans ton cas elle termine la boucle.
  17. 'Ceci dit la boucle n'est pas obligée de continuer dès que la correspondance est trouvée donc ajoute un "exit for" à la fin de ta condition
  18. i=1
  19. For i = 1 To NumLig
  20. If Worksheets("Feuil2").Range("G" & i).Value = char Then
  21. ' Worksheets("Feuil2").select ne sert à rien puisque tu y fais référence dans ton "copy"
  22. 'Sheets("Feuil2").Select
  23. Worksheets("Feuil2").Range("M" & i & ":X" & i).Copy
  24. 'idem que pour feuil2
  25. 'Sheets("Feuil1").Select
  26. 'ici tu n'es plus sur la feuil2 mais sur la feuil1 c'est "lig" qui donne la ligne qui va bien
  27. Worksheets("Feuil1").Range("C" & lig).Select
  28. Selection.Paste
  29. exit for
  30. End If
  31. Next i
  32. ' A quoi sert compt1 à l'origine? c'est lig ton fil conducteur non?
  33. 'compt1 = compt1 + 3
  34.  
  35. lab:
  36. Next Lig
  37.  
  38. End Sub
m
0
l
12 Avril 2011 13:28:14

Bonjour ;

Merci bcp devoffice de ta réponse . je suis désolé de ne pas etre aussi claire lors d'exposition de mon problème la derniere fois . Je viens d'essayer ton code mais malheureusement ça ne marche pas correctement (pas pour tous les articles ) comme le mien .
En excutant mon programme avec etape par etape (F8) , j'ai pu decouvrir exactement le problème mais je ne sais pas comment je pourrai le resoudre :

Le problème c'est lors de la comparaison des deux chaines de caractère afin (2eme boucle) afin de faire copier/coller des cellules concernée .

pour certains articles meme si ils sont egaux il quite la boucle ,car il garde un espace apres le dernier carctère de l'un des deux article

exemple :

"F5331056720010"<> "F5331056720010 " et
"S5421220520301"="S5421220520301"

. je ne sais pas d'où il vient cet espace ( j'ai mets les meme dimensions , meme proprietés pour les deux colonnes concernés et ça n a pas marché ) .

j'espere avoir bien expliquer mon souci cette fois. merci bcp de tn aide
NB : Est ce qu'il n'y a pas une autre méthode de comparer deux chaine de caractère sans rendre compte des espace .


Merci d'avance
cordialement



m
0
l
Contenus similaires
a c 232 L Programmation
12 Avril 2011 14:00:31

Tu as la fonction TRIM
m
0
l
12 Avril 2011 15:32:32

merci merci bcp. tu m' a vraiment sauver la vie

ça marche impec ,

cordialement
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS