Macro vba pour comparaison de 2 colonne
Dernière réponse : dans Programmation
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
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
Sub saisie2() On Error Resume Next Dim Lig As Long Dim NbrLig As Long, NumLig As Long Dim col, char As String Dim i As Integer 'col3 = "M" compt1 = 1 NbrLig = Sheets("Feuil1").Cells(65536, col1).End(xlUp).Row NumLig = Sheets("Feuil2").Cells(65536, col1).End(xlUp).Row For Lig = 1 To NbrLig Sheets("Feuil1").Select Cells(Lig, 1).Select char = Cells(Lig, 1).Value If char = "" Then GoTo lab For i = 1 To NumLig If Sheets("Feuil2").Range("G" & i).Value = char Then Sheets("Feuil2").Select Sheets("Feuil2").Range("M" & i & ":X" & i).Copy Sheets("Feuil1").Select Sheets("Feuil1").Range("C" & compt1 & ":N" & compt1).Select ActiveSheet.Paste End If Next i compt1 = compt1 + 3 lab: Next Lig End Sub
Autres pages sur : macro vba comparaison colonne
Lassé par la pub ? Créez un compte
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,
é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,
Sub saisie2()
'On Error Resume Next
Dim Lig As Long
Dim NbrLig As Long, NumLig As Long
Dim cde As String
Dim i As Integer
NbrLig = Worksheets("Feuil1").Range("A" & 65536).End(xlUp).Row
'Sur la feuille 2 c'est la colonne "G" d'après l'ennoncé qui correspond à la colonne "A" de la feuille 1
NumLig = Worksheets("Feuil2").Range("G" & 65536).End(xlUp).Row
For Lig = 1 To NbrLig step 3
cde =Worksheets("Feuil1").range("A" & lig)
If cde = "" Then GoTo lab
'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.
'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
i=1
For i = 1 To NumLig
If Worksheets("Feuil2").Range("G" & i).Value = char Then
' Worksheets("Feuil2").select ne sert à rien puisque tu y fais référence dans ton "copy"
'Sheets("Feuil2").Select
Worksheets("Feuil2").Range("M" & i & ":X" & i).Copy
'idem que pour feuil2
'Sheets("Feuil1").Select
'ici tu n'es plus sur la feuil2 mais sur la feuil1 c'est "lig" qui donne la ligne qui va bien
Worksheets("Feuil1").Range("C" & lig).Select
Selection.Paste
exit for
End If
Next i
' A quoi sert compt1 à l'origine? c'est lig ton fil conducteur non?
'compt1 = compt1 + 3
lab:
Next Lig
End Sub
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
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
Lassé par la pub ? Créez un compte
- Contenus similaires :